diff options
59 files changed, 3659 insertions, 1790 deletions
@@ -1,890 +1,1740 @@ <?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="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850"> - <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850" moduleId="org.eclipse.cdt.core.settings" name="Duet085"> - <macros> - <stringMacro name="LinkFlags2" type="VALUE_TEXT" value="-Wl,--end-group -lm"/> - <stringMacro name="LinkFlags1" type="VALUE_TEXT" value="-mthumb -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--entry=Reset_Handler -Wl,--unresolved-symbols=report-all -Wl,--warn-common -Wl,--warn-section-align -Wl,--warn-unresolved-symbols -Wl,--start-group"/> - <stringMacro name="CoreName" type="VALUE_TEXT" value="CoreNG"/> - <stringMacro name="GccPath" type="VALUE_TEXT" value="/home/christian/duet-dc42/gcc-arm-none-eabi-7-2017-q4-major/bin/"/> - </macros> - <externalSettings/> - <extensions> - <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/> - <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 artifactExtension="elf" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850" name="Duet085" parent="cdt.managedbuild.config.gnu.cross.exe.release" postannouncebuildStep="Generating binary file" postbuildStep="arm-none-eabi-objcopy -O binary ${workspace_loc:/${ProjName}/${ConfigName}}/${ProjName}.elf ${workspace_loc:/${ProjName}/${ConfigName}}/${ProjName}.bin"> - <folderInfo id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850." name="/" resourcePath=""> - <toolChain id="cdt.managedbuild.toolchain.gnu.cross.exe.release.947353540" name="Cross GCC" superClass="cdt.managedbuild.toolchain.gnu.cross.exe.release"> - <option id="cdt.managedbuild.option.gnu.cross.path.1742191832" name="Path" superClass="cdt.managedbuild.option.gnu.cross.path" useByScannerDiscovery="false" value="${GccPath}" valueType="string"/> - <option id="cdt.managedbuild.option.gnu.cross.prefix.1660769040" name="Prefix" superClass="cdt.managedbuild.option.gnu.cross.prefix" useByScannerDiscovery="false" value="arm-none-eabi-" valueType="string"/> - <targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="cdt.managedbuild.targetPlatform.gnu.cross.223860525" isAbstract="false" osList="all" superClass="cdt.managedbuild.targetPlatform.gnu.cross"/> - <builder buildPath="${workspace_loc:/RepRapFirmware}/Release" id="cdt.managedbuild.builder.gnu.cross.13059261" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="cdt.managedbuild.builder.gnu.cross"/> - <tool id="cdt.managedbuild.tool.gnu.cross.assembler.163742171" name="Cross GCC Assembler" superClass="cdt.managedbuild.tool.gnu.cross.assembler"> - <inputType id="cdt.managedbuild.tool.gnu.assembler.input.230262206" superClass="cdt.managedbuild.tool.gnu.assembler.input"/> - </tool> - <tool commandLinePattern="${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}" id="cdt.managedbuild.tool.gnu.cross.c.compiler.278237460" name="Cross GCC Compiler" superClass="cdt.managedbuild.tool.gnu.cross.c.compiler"> - <option defaultValue="gnu.c.optimization.level.most" id="gnu.c.compiler.option.optimization.level.710346403" name="Optimization Level" superClass="gnu.c.compiler.option.optimization.level" useByScannerDiscovery="false" value="gnu.c.optimization.level.more" valueType="enumerated"/> - <option id="gnu.c.compiler.option.debugging.level.836865552" name="Debug Level" superClass="gnu.c.compiler.option.debugging.level" useByScannerDiscovery="false" value="gnu.c.debugging.level.none" valueType="enumerated"/> - <option id="gnu.c.compiler.option.misc.verbose.431575256" name="Verbose (-v)" superClass="gnu.c.compiler.option.misc.verbose" useByScannerDiscovery="false" value="false" valueType="boolean"/> - <option id="gnu.c.compiler.option.misc.other.660952665" name="Other flags" superClass="gnu.c.compiler.option.misc.other" useByScannerDiscovery="false" value="-c -std=gnu99 -mcpu=cortex-m3 -mthumb -ffunction-sections -fdata-sections -nostdlib -Wdouble-promotion -fsingle-precision-constant "-Wa,-ahl=$*.s"" valueType="string"/> - <option id="gnu.c.compiler.option.include.paths.2080437508" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath"> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/cores/arduino}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Storage}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/utils}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/drivers}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/cmsis/sam3x/include}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/header_files}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/preprocessor}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/thirdparty/CMSIS/Include}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/variants/duet}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Duet/Lwip}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Duet/Lwip/lwip/src/include}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Duet/EMAC}""/> - </option> - <option id="gnu.c.compiler.option.preprocessor.def.symbols.571434619" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" useByScannerDiscovery="false" valueType="definedSymbols"> - <listOptionValue builtIn="false" value="__SAM3X8E__"/> - <listOptionValue builtIn="false" value="DUET_06_085"/> - </option> - <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1642892736" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/> - </tool> - <tool id="cdt.managedbuild.tool.gnu.cross.c.linker.831729502" name="Cross GCC Linker" superClass="cdt.managedbuild.tool.gnu.cross.c.linker"/> - <tool id="cdt.managedbuild.tool.gnu.cross.archiver.586905748" name="Cross GCC Archiver" superClass="cdt.managedbuild.tool.gnu.cross.archiver"/> - <tool command="gcc" commandLinePattern="${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${LinkFlags1} "${workspace_loc:/${CoreName}/SAM3X8E/cores/arduino/syscalls.o}" ${INPUTS} ${LinkFlags2}" id="cdt.managedbuild.tool.gnu.cross.cpp.linker.77650722" name="Cross G++ Linker" superClass="cdt.managedbuild.tool.gnu.cross.cpp.linker"> - <option id="gnu.cpp.link.option.nostdlibs.296038599" name="No startup or default libs (-nostdlib)" superClass="gnu.cpp.link.option.nostdlibs" useByScannerDiscovery="false" value="false" valueType="boolean"/> - <option id="gnu.cpp.link.option.paths.75045718" name="Library search path (-L)" superClass="gnu.cpp.link.option.paths" useByScannerDiscovery="false" valueType="libPaths"> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/SAM3X8E/}""/> - </option> - <option id="gnu.cpp.link.option.libs.1995000942" name="Libraries (-l)" superClass="gnu.cpp.link.option.libs" useByScannerDiscovery="false" valueType="libs"> - <listOptionValue builtIn="false" value="${CoreName}"/> - </option> - <option id="gnu.cpp.link.option.flags.1670739910" name="Linker flags" superClass="gnu.cpp.link.option.flags" useByScannerDiscovery="false" value="-Os -Wl,--gc-sections -Wl,--fatal-warnings -mcpu=cortex-m3 -T${workspace_loc:/${CoreName}/variants/duet/linker_scripts/gcc/flash.ld} -Wl,-Map,${workspace_loc:/${ProjName}/${ConfigName}}/${BuildArtifactFileBaseName}.map" valueType="string"/> - <inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.1491196930" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input"> - <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/> - <additionalInput kind="additionalinput" paths="$(LIBS)"/> - </inputType> - </tool> - <tool command="g++" id="cdt.managedbuild.tool.gnu.cross.cpp.compiler.1261470824" name="Cross G++ Compiler" superClass="cdt.managedbuild.tool.gnu.cross.cpp.compiler"> - <option id="gnu.cpp.compiler.option.optimization.level.1078688101" name="Optimization Level" superClass="gnu.cpp.compiler.option.optimization.level" useByScannerDiscovery="false" value="gnu.cpp.compiler.optimization.level.more" valueType="enumerated"/> - <option id="gnu.cpp.compiler.option.debugging.level.1332396113" name="Debug Level" superClass="gnu.cpp.compiler.option.debugging.level" useByScannerDiscovery="false" value="gnu.cpp.compiler.debugging.level.none" valueType="enumerated"/> - <option id="gnu.cpp.compiler.option.other.verbose.1151170522" name="Verbose (-v)" superClass="gnu.cpp.compiler.option.other.verbose" useByScannerDiscovery="false" value="false" valueType="boolean"/> - <option id="gnu.cpp.compiler.option.other.other.184134051" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" useByScannerDiscovery="false" value="-c -std=gnu++14 -mcpu=cortex-m3 -mthumb -ffunction-sections -fdata-sections -fno-threadsafe-statics -fno-rtti -fno-exceptions -nostdlib -Wdouble-promotion -fsingle-precision-constant "-Wa,-ahl=$*.s"" valueType="string"/> - <option id="gnu.cpp.compiler.option.include.paths.1285689288" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath"> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/cores/arduino}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Flash}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/SharedSpi}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Storage}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Wire}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/utils}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/services/clock}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/drivers}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/services/flash_efc}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/cmsis/sam3x/include}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/header_files}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/preprocessor}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/thirdparty/CMSIS/Include}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/variants/duet}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Duet}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Duet/Lwip}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Duet/EMAC}""/> - </option> - <option id="gnu.cpp.compiler.option.preprocessor.def.1548770846" name="Defined symbols (-D)" superClass="gnu.cpp.compiler.option.preprocessor.def" useByScannerDiscovery="false" valueType="definedSymbols"> - <listOptionValue builtIn="false" value="__SAM3X8E__"/> - <listOptionValue builtIn="false" value="DUET_06_085"/> - <listOptionValue builtIn="false" value="_XOPEN_SOURCE"/> - </option> - <inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.948285998" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/> - </tool> - </toolChain> - </folderInfo> - <sourceEntries> - <entry excluding="src/Alligator|src/Duet/Lwip/lwip/src/core/ipv6|src/Duet/Lwip/lwip/test|src/SAME70_TEST|src/Display|src/Networking|src/DuetNG|src/DuetM|src/RADDS" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/> - </sourceEntries> - </configuration> - </storageModule> - <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/> - </cconfiguration> - <cconfiguration id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.1027429289"> - <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.1027429289" moduleId="org.eclipse.cdt.core.settings" name="RADDS"> - <macros> - <stringMacro name="LinkFlags2" type="VALUE_TEXT" value="-Wl,--end-group -lm"/> - <stringMacro name="LinkFlags1" type="VALUE_TEXT" value="-mthumb -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--entry=Reset_Handler -Wl,--unresolved-symbols=report-all -Wl,--warn-common -Wl,--warn-section-align -Wl,--warn-unresolved-symbols -Wl,--start-group"/> - <stringMacro name="CoreName" type="VALUE_TEXT" value="CoreNG"/> - <stringMacro name="GccPath" type="VALUE_TEXT" value="/home/christian/duet-dc42/gcc-arm-none-eabi-7-2017-q4-major/bin/"/> - </macros> - <externalSettings/> - <extensions> - <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/> - <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 artifactExtension="elf" artifactName="${ProjName}-RADDS" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.1027429289" name="RADDS" parent="cdt.managedbuild.config.gnu.cross.exe.release" postannouncebuildStep="Generating binary file" postbuildStep="arm-none-eabi-objcopy -O binary ${workspace_loc:/${ProjName}/${ConfigName}}/${ProjName}-RADDS.elf ${workspace_loc:/${ProjName}/${ConfigName}}/${ProjName}-RADDS.bin"> - <folderInfo id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.1027429289." name="/" resourcePath=""> - <toolChain id="cdt.managedbuild.toolchain.gnu.cross.exe.release.1973208555" name="Cross GCC" superClass="cdt.managedbuild.toolchain.gnu.cross.exe.release"> - <option id="cdt.managedbuild.option.gnu.cross.path.2092504710" name="Path" superClass="cdt.managedbuild.option.gnu.cross.path" useByScannerDiscovery="false" value="${GccPath}" valueType="string"/> - <option id="cdt.managedbuild.option.gnu.cross.prefix.1606498191" name="Prefix" superClass="cdt.managedbuild.option.gnu.cross.prefix" useByScannerDiscovery="false" value="arm-none-eabi-" valueType="string"/> - <targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="cdt.managedbuild.targetPlatform.gnu.cross.342355349" isAbstract="false" osList="all" superClass="cdt.managedbuild.targetPlatform.gnu.cross"/> - <builder buildPath="${workspace_loc:/RepRapFirmware}/Release" id="cdt.managedbuild.builder.gnu.cross.1336978387" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="cdt.managedbuild.builder.gnu.cross"/> - <tool id="cdt.managedbuild.tool.gnu.cross.assembler.863511428" name="Cross GCC Assembler" superClass="cdt.managedbuild.tool.gnu.cross.assembler"> - <inputType id="cdt.managedbuild.tool.gnu.assembler.input.664007272" superClass="cdt.managedbuild.tool.gnu.assembler.input"/> - </tool> - <tool commandLinePattern="${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}" id="cdt.managedbuild.tool.gnu.cross.c.compiler.764246283" name="Cross GCC Compiler" superClass="cdt.managedbuild.tool.gnu.cross.c.compiler"> - <option defaultValue="gnu.c.optimization.level.most" id="gnu.c.compiler.option.optimization.level.1125289372" name="Optimization Level" superClass="gnu.c.compiler.option.optimization.level" useByScannerDiscovery="false" value="gnu.c.optimization.level.more" valueType="enumerated"/> - <option id="gnu.c.compiler.option.debugging.level.807229803" name="Debug Level" superClass="gnu.c.compiler.option.debugging.level" useByScannerDiscovery="false" value="gnu.c.debugging.level.none" valueType="enumerated"/> - <option id="gnu.c.compiler.option.misc.verbose.1747279976" name="Verbose (-v)" superClass="gnu.c.compiler.option.misc.verbose" useByScannerDiscovery="false" value="false" valueType="boolean"/> - <option id="gnu.c.compiler.option.misc.other.1771169870" name="Other flags" superClass="gnu.c.compiler.option.misc.other" useByScannerDiscovery="false" value="-c -std=gnu99 -mcpu=cortex-m3 -mthumb -ffunction-sections -fdata-sections -nostdlib -Wdouble-promotion -fsingle-precision-constant "-Wa,-ahl=$*.s"" valueType="string"/> - <option id="gnu.c.compiler.option.include.paths.425316569" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath"> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/cores/arduino}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Storage}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/utils}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/drivers}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/cmsis/sam3x/include}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/header_files}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/preprocessor}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/thirdparty/CMSIS/Include}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/variants/RADDS}""/> - </option> - <option id="gnu.c.compiler.option.preprocessor.def.symbols.2017188375" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" useByScannerDiscovery="false" valueType="definedSymbols"> - <listOptionValue builtIn="false" value="__SAM3X8E__"/> - <listOptionValue builtIn="false" value="__RADDS__"/> - </option> - <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.110609707" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/> - </tool> - <tool id="cdt.managedbuild.tool.gnu.cross.c.linker.1692168928" name="Cross GCC Linker" superClass="cdt.managedbuild.tool.gnu.cross.c.linker"/> - <tool id="cdt.managedbuild.tool.gnu.cross.archiver.1755453550" name="Cross GCC Archiver" superClass="cdt.managedbuild.tool.gnu.cross.archiver"/> - <tool command="gcc" commandLinePattern="${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${LinkFlags1} "${workspace_loc:/${CoreName}/RADDS/cores/arduino/syscalls.o}" ${INPUTS} ${LinkFlags2}" id="cdt.managedbuild.tool.gnu.cross.cpp.linker.1176271302" name="Cross G++ Linker" superClass="cdt.managedbuild.tool.gnu.cross.cpp.linker"> - <option id="gnu.cpp.link.option.nostdlibs.706270025" name="No startup or default libs (-nostdlib)" superClass="gnu.cpp.link.option.nostdlibs" useByScannerDiscovery="false" value="false" valueType="boolean"/> - <option id="gnu.cpp.link.option.paths.1160723414" name="Library search path (-L)" superClass="gnu.cpp.link.option.paths" useByScannerDiscovery="false" valueType="libPaths"> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/RADDS/}""/> - </option> - <option id="gnu.cpp.link.option.libs.1006761104" name="Libraries (-l)" superClass="gnu.cpp.link.option.libs" useByScannerDiscovery="false" valueType="libs"> - <listOptionValue builtIn="false" value="${CoreName}"/> - </option> - <option id="gnu.cpp.link.option.flags.827167716" name="Linker flags" superClass="gnu.cpp.link.option.flags" useByScannerDiscovery="false" value="-Os -Wl,--gc-sections -Wl,--fatal-warnings -mcpu=cortex-m3 -T${workspace_loc:/${CoreName}/variants/RADDS/linker_scripts/gcc/flash.ld} -Wl,-Map,${workspace_loc:/${ProjName}/${ConfigName}}/${BuildArtifactFileBaseName}.map" valueType="string"/> - <inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.99895855" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input"> - <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/> - <additionalInput kind="additionalinput" paths="$(LIBS)"/> - </inputType> - </tool> - <tool command="g++" id="cdt.managedbuild.tool.gnu.cross.cpp.compiler.2077096750" name="Cross G++ Compiler" superClass="cdt.managedbuild.tool.gnu.cross.cpp.compiler"> - <option id="gnu.cpp.compiler.option.optimization.level.25432549" name="Optimization Level" superClass="gnu.cpp.compiler.option.optimization.level" useByScannerDiscovery="false" value="gnu.cpp.compiler.optimization.level.more" valueType="enumerated"/> - <option id="gnu.cpp.compiler.option.debugging.level.1920128035" name="Debug Level" superClass="gnu.cpp.compiler.option.debugging.level" useByScannerDiscovery="false" value="gnu.cpp.compiler.debugging.level.none" valueType="enumerated"/> - <option id="gnu.cpp.compiler.option.other.verbose.1825237573" name="Verbose (-v)" superClass="gnu.cpp.compiler.option.other.verbose" useByScannerDiscovery="false" value="false" valueType="boolean"/> - <option id="gnu.cpp.compiler.option.other.other.165959132" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" useByScannerDiscovery="false" value="-c -std=gnu++14 -mcpu=cortex-m3 -mthumb -ffunction-sections -fdata-sections -fno-threadsafe-statics -fno-rtti -fno-exceptions -nostdlib -Wdouble-promotion -fsingle-precision-constant "-Wa,-ahl=$*.s"" valueType="string"/> - <option id="gnu.cpp.compiler.option.include.paths.603435221" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath"> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/cores/arduino}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Flash}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/SharedSpi}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Storage}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Wire}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/utils}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/services/clock}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/drivers}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/services/flash_efc}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/cmsis/sam3x/include}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/header_files}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/preprocessor}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/thirdparty/CMSIS/Include}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/variants/RADDS}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/RADDS}""/> - </option> - <option id="gnu.cpp.compiler.option.preprocessor.def.1179781669" name="Defined symbols (-D)" superClass="gnu.cpp.compiler.option.preprocessor.def" useByScannerDiscovery="false" valueType="definedSymbols"> - <listOptionValue builtIn="false" value="__SAM3X8E__"/> - <listOptionValue builtIn="false" value="__RADDS__"/> - <listOptionValue builtIn="false" value="_XOPEN_SOURCE"/> - </option> - <inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1578939493" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/> - </tool> - </toolChain> - </folderInfo> - <sourceEntries> - <entry excluding="src/Networking|src/Alligator|src/SAME70_TEST|src/Display|src/Duet|src/DuetNG|src/DuetM" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/> - </sourceEntries> - </configuration> - </storageModule> - <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/> - </cconfiguration> - <cconfiguration id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.1745168887"> - <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.1745168887" moduleId="org.eclipse.cdt.core.settings" name="Alligator"> - <macros> - <stringMacro name="LinkFlags2" type="VALUE_TEXT" value="-Wl,--end-group -lm"/> - <stringMacro name="LinkFlags1" type="VALUE_TEXT" value="-mthumb -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--entry=Reset_Handler -Wl,--unresolved-symbols=report-all -Wl,--warn-common -Wl,--warn-section-align -Wl,--warn-unresolved-symbols -Wl,--start-group"/> - <stringMacro name="CoreName" type="VALUE_TEXT" value="CoreNG"/> - <stringMacro name="GccPath" type="VALUE_TEXT" value="/home/christian/duet-dc42/gcc-arm-none-eabi-7-2017-q4-major/bin/"/> - </macros> - <externalSettings/> - <extensions> - <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/> - <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 artifactExtension="elf" artifactName="${ProjName}-Alligator" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.1745168887" name="Alligator" parent="cdt.managedbuild.config.gnu.cross.exe.release" postannouncebuildStep="Generating binary file" postbuildStep="arm-none-eabi-objcopy -O binary ${workspace_loc:/${ProjName}/${ConfigName}}/${ProjName}-Alligator.elf ${workspace_loc:/${ProjName}/${ConfigName}}/${ProjName}-Alligator.bin"> - <folderInfo id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.1745168887." name="/" resourcePath=""> - <toolChain id="cdt.managedbuild.toolchain.gnu.cross.exe.release.623324432" name="Cross GCC" superClass="cdt.managedbuild.toolchain.gnu.cross.exe.release"> - <option id="cdt.managedbuild.option.gnu.cross.path.645044151" name="Path" superClass="cdt.managedbuild.option.gnu.cross.path" useByScannerDiscovery="false" value="${GccPath}" valueType="string"/> - <option id="cdt.managedbuild.option.gnu.cross.prefix.629438941" name="Prefix" superClass="cdt.managedbuild.option.gnu.cross.prefix" useByScannerDiscovery="false" value="arm-none-eabi-" valueType="string"/> - <targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="cdt.managedbuild.targetPlatform.gnu.cross.878309876" isAbstract="false" osList="all" superClass="cdt.managedbuild.targetPlatform.gnu.cross"/> - <builder buildPath="${workspace_loc:/RepRapFirmware}/Release" id="cdt.managedbuild.builder.gnu.cross.56178753" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="cdt.managedbuild.builder.gnu.cross"/> - <tool id="cdt.managedbuild.tool.gnu.cross.assembler.384615201" name="Cross GCC Assembler" superClass="cdt.managedbuild.tool.gnu.cross.assembler"> - <inputType id="cdt.managedbuild.tool.gnu.assembler.input.1769413014" superClass="cdt.managedbuild.tool.gnu.assembler.input"/> - </tool> - <tool commandLinePattern="${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}" id="cdt.managedbuild.tool.gnu.cross.c.compiler.429394189" name="Cross GCC Compiler" superClass="cdt.managedbuild.tool.gnu.cross.c.compiler"> - <option defaultValue="gnu.c.optimization.level.most" id="gnu.c.compiler.option.optimization.level.1940178744" name="Optimization Level" superClass="gnu.c.compiler.option.optimization.level" useByScannerDiscovery="false" value="gnu.c.optimization.level.more" valueType="enumerated"/> - <option id="gnu.c.compiler.option.debugging.level.1345702698" name="Debug Level" superClass="gnu.c.compiler.option.debugging.level" useByScannerDiscovery="false" value="gnu.c.debugging.level.none" valueType="enumerated"/> - <option id="gnu.c.compiler.option.misc.verbose.1965295612" name="Verbose (-v)" superClass="gnu.c.compiler.option.misc.verbose" useByScannerDiscovery="false" value="false" valueType="boolean"/> - <option id="gnu.c.compiler.option.misc.other.2089676962" name="Other flags" superClass="gnu.c.compiler.option.misc.other" useByScannerDiscovery="false" value="-c -std=gnu99 -mcpu=cortex-m3 -mthumb -ffunction-sections -fdata-sections -nostdlib -Wdouble-promotion -fsingle-precision-constant "-Wa,-ahl=$*.s"" valueType="string"/> - <option id="gnu.c.compiler.option.include.paths.1071791609" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath"> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/cores/arduino}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Storage}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/utils}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/drivers}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/cmsis/sam3x/include}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/header_files}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/preprocessor}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/thirdparty/CMSIS/Include}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/variants/alligator}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Duet/Lwip}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Duet/Lwip/lwip/src/include}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Duet/EMAC}""/> - </option> - <option id="gnu.c.compiler.option.preprocessor.def.symbols.680004295" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" useByScannerDiscovery="false" valueType="definedSymbols"> - <listOptionValue builtIn="false" value="__SAM3X8E__"/> - <listOptionValue builtIn="false" value="__ALLIGATOR__"/> - </option> - <option id="gnu.c.compiler.option.dialect.std.1020546177" name="Language standard" superClass="gnu.c.compiler.option.dialect.std" useByScannerDiscovery="true" value="gnu.c.compiler.dialect.default" valueType="enumerated"/> - <option id="gnu.c.compiler.option.include.files.1091766282" name="Include files (-include)" superClass="gnu.c.compiler.option.include.files" useByScannerDiscovery="false"/> - <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1737201945" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/> - </tool> - <tool id="cdt.managedbuild.tool.gnu.cross.c.linker.1510685625" name="Cross GCC Linker" superClass="cdt.managedbuild.tool.gnu.cross.c.linker"/> - <tool id="cdt.managedbuild.tool.gnu.cross.archiver.2031955379" name="Cross GCC Archiver" superClass="cdt.managedbuild.tool.gnu.cross.archiver"/> - <tool command="gcc" commandLinePattern="${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${LinkFlags1} "${workspace_loc:/${CoreName}/Alligator/cores/arduino/syscalls.o}" ${INPUTS} ${LinkFlags2}" id="cdt.managedbuild.tool.gnu.cross.cpp.linker.1616069436" name="Cross G++ Linker" superClass="cdt.managedbuild.tool.gnu.cross.cpp.linker"> - <option id="gnu.cpp.link.option.nostdlibs.760089516" name="No startup or default libs (-nostdlib)" superClass="gnu.cpp.link.option.nostdlibs" useByScannerDiscovery="false" value="false" valueType="boolean"/> - <option id="gnu.cpp.link.option.paths.1593340130" name="Library search path (-L)" superClass="gnu.cpp.link.option.paths" useByScannerDiscovery="false" valueType="libPaths"> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/Alligator/}""/> - </option> - <option id="gnu.cpp.link.option.libs.1260510068" name="Libraries (-l)" superClass="gnu.cpp.link.option.libs" useByScannerDiscovery="false" valueType="libs"> - <listOptionValue builtIn="false" value="${CoreName}"/> - </option> - <option id="gnu.cpp.link.option.flags.1376831701" name="Linker flags" superClass="gnu.cpp.link.option.flags" useByScannerDiscovery="false" value="-Os -Wl,--gc-sections -Wl,--fatal-warnings -mcpu=cortex-m3 -T${workspace_loc:/${CoreName}/variants/alligator/linker_scripts/gcc/flash.ld} -Wl,-Map,${workspace_loc:/${ProjName}/${ConfigName}}/${BuildArtifactFileBaseName}.map" valueType="string"/> - <inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.1951368129" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input"> - <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/> - <additionalInput kind="additionalinput" paths="$(LIBS)"/> - </inputType> - </tool> - <tool command="g++" id="cdt.managedbuild.tool.gnu.cross.cpp.compiler.1533537470" name="Cross G++ Compiler" superClass="cdt.managedbuild.tool.gnu.cross.cpp.compiler"> - <option id="gnu.cpp.compiler.option.optimization.level.1431609218" name="Optimization Level" superClass="gnu.cpp.compiler.option.optimization.level" useByScannerDiscovery="false" value="gnu.cpp.compiler.optimization.level.more" valueType="enumerated"/> - <option id="gnu.cpp.compiler.option.debugging.level.1167774913" name="Debug Level" superClass="gnu.cpp.compiler.option.debugging.level" useByScannerDiscovery="false" value="gnu.cpp.compiler.debugging.level.none" valueType="enumerated"/> - <option id="gnu.cpp.compiler.option.other.verbose.68487747" name="Verbose (-v)" superClass="gnu.cpp.compiler.option.other.verbose" useByScannerDiscovery="false" value="false" valueType="boolean"/> - <option id="gnu.cpp.compiler.option.other.other.1532821901" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" useByScannerDiscovery="false" value="-c -std=gnu++14 -mcpu=cortex-m3 -mthumb -ffunction-sections -fdata-sections -fno-threadsafe-statics -fno-rtti -fno-exceptions -nostdlib -Wdouble-promotion -fsingle-precision-constant "-Wa,-ahl=$*.s"" valueType="string"/> - <option id="gnu.cpp.compiler.option.include.paths.1825159078" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath"> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/cores/arduino}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Flash}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/SharedSpi}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Storage}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Wire}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/utils}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/services/clock}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/drivers}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/services/flash_efc}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/cmsis/sam3x/include}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/header_files}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/preprocessor}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/thirdparty/CMSIS/Include}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/variants/alligator}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Alligator}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Duet}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Duet/Lwip}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Duet/EMAC}""/> - </option> - <option id="gnu.cpp.compiler.option.preprocessor.def.890621467" name="Defined symbols (-D)" superClass="gnu.cpp.compiler.option.preprocessor.def" useByScannerDiscovery="false" valueType="definedSymbols"> - <listOptionValue builtIn="false" value="__SAM3X8E__"/> - <listOptionValue builtIn="false" value="__ALLIGATOR__"/> - <listOptionValue builtIn="false" value="_XOPEN_SOURCE"/> - </option> - <option id="gnu.cpp.compiler.option.preprocessor.undef.913409309" name="Undefined symbols (-U)" superClass="gnu.cpp.compiler.option.preprocessor.undef" useByScannerDiscovery="false"/> - <option id="gnu.cpp.compiler.option.dialect.std.603621474" name="Language standard" superClass="gnu.cpp.compiler.option.dialect.std" useByScannerDiscovery="true" value="gnu.cpp.compiler.dialect.default" valueType="enumerated"/> - <option id="gnu.cpp.compiler.option.include.files.1575937801" name="Include files (-include)" superClass="gnu.cpp.compiler.option.include.files" useByScannerDiscovery="false"/> - <inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.667323948" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/> - </tool> - </toolChain> - </folderInfo> - <sourceEntries> - <entry excluding="src/Networking|src/Duet/Lwip/lwip/src/core/ipv6|src/Networking|src/DuetNG|src/Alligator/Lwip/lwip/src/include/ipv6|src/Alligator/Lwip/lwip/test|src/Duet/MCP4461|src/Duet/Lwip/lwip/test|src/SAME70_TEST|src/Display|src/DuetM|src/Alligator/Lwip/lwip/src/core/ipv6|src/RADDS" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/> - </sourceEntries> - </configuration> - </storageModule> - <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/> - </cconfiguration> - <cconfiguration id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.241502451.170574622"> - <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.241502451.170574622" moduleId="org.eclipse.cdt.core.settings" name="Duet2_RTOS"> - <macros> - <stringMacro name="LinkFlags2" type="VALUE_TEXT" value="-Wl,--end-group -lm"/> - <stringMacro name="LinkFlags1" type="VALUE_TEXT" value="-mthumb -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--entry=Reset_Handler -Wl,--unresolved-symbols=report-all -Wl,--warn-common -Wl,--warn-section-align -Wl,--warn-unresolved-symbols -Wl,--start-group"/> - <stringMacro name="CoreName" type="VALUE_TEXT" value="CoreNG"/> - <stringMacro name="GccPath" type="VALUE_TEXT" value="/home/christian/duet-dc42/gcc-arm-none-eabi-7-2017-q4-major/bin/"/> - </macros> - <externalSettings/> - <extensions> - <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/> - <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 artifactExtension="elf" artifactName="Duet2CombinedFirmware" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.241502451.170574622" name="Duet2_RTOS" parent="cdt.managedbuild.config.gnu.cross.exe.release" postannouncebuildStep="Generating binary file" postbuildStep="arm-none-eabi-objcopy -O binary ${workspace_loc:/${ProjName}/${ConfigName}}/Duet2CombinedFirmware.elf ${workspace_loc:/${ProjName}/${ConfigName}}/Duet2CombinedFirmware.bin"> - <folderInfo id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.241502451.170574622." name="/" resourcePath=""> - <toolChain id="cdt.managedbuild.toolchain.gnu.cross.exe.release.435431950" name="Cross GCC" superClass="cdt.managedbuild.toolchain.gnu.cross.exe.release"> - <option id="cdt.managedbuild.option.gnu.cross.path.1881231799" name="Path" superClass="cdt.managedbuild.option.gnu.cross.path" useByScannerDiscovery="false" value="${GccPath}" valueType="string"/> - <option id="cdt.managedbuild.option.gnu.cross.prefix.172065168" name="Prefix" superClass="cdt.managedbuild.option.gnu.cross.prefix" useByScannerDiscovery="false" value="arm-none-eabi-" valueType="string"/> - <targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="cdt.managedbuild.targetPlatform.gnu.cross.1838379384" isAbstract="false" osList="all" superClass="cdt.managedbuild.targetPlatform.gnu.cross"/> - <builder buildPath="${workspace_loc:/RepRapFirmware}/Release" id="cdt.managedbuild.builder.gnu.cross.591414239" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="cdt.managedbuild.builder.gnu.cross"/> - <tool id="cdt.managedbuild.tool.gnu.cross.assembler.1539163958" name="Cross GCC Assembler" superClass="cdt.managedbuild.tool.gnu.cross.assembler"> - <inputType id="cdt.managedbuild.tool.gnu.assembler.input.1036697395" superClass="cdt.managedbuild.tool.gnu.assembler.input"/> - </tool> - <tool commandLinePattern="${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}" id="cdt.managedbuild.tool.gnu.cross.c.compiler.463703707" name="Cross GCC Compiler" superClass="cdt.managedbuild.tool.gnu.cross.c.compiler"> - <option defaultValue="gnu.c.optimization.level.most" id="gnu.c.compiler.option.optimization.level.456685708" name="Optimization Level" superClass="gnu.c.compiler.option.optimization.level" useByScannerDiscovery="false" value="gnu.c.optimization.level.more" valueType="enumerated"/> - <option id="gnu.c.compiler.option.debugging.level.1579494397" name="Debug Level" superClass="gnu.c.compiler.option.debugging.level" useByScannerDiscovery="false" value="gnu.c.debugging.level.none" valueType="enumerated"/> - <option id="gnu.c.compiler.option.misc.verbose.328543251" name="Verbose (-v)" superClass="gnu.c.compiler.option.misc.verbose" useByScannerDiscovery="false" value="false" valueType="boolean"/> - <option id="gnu.c.compiler.option.misc.other.465279131" name="Other flags" superClass="gnu.c.compiler.option.misc.other" useByScannerDiscovery="false" value="-c -std=gnu99 -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections -nostdlib -Wdouble-promotion -fsingle-precision-constant "-Wa,-ahl=$*.s"" valueType="string"/> - <option id="gnu.c.compiler.option.include.paths.288982451" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath"> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/cores/arduino}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Storage}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/utils}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/services/ioport}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/drivers}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/cmsis/sam4e/include}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/header_files}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/preprocessor}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/thirdparty/CMSIS/Include}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/variants/duetNG}""/> - </option> - <option id="gnu.c.compiler.option.preprocessor.def.symbols.1227675538" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" useByScannerDiscovery="false" valueType="definedSymbols"> - <listOptionValue builtIn="false" value="__SAM4E8E__"/> - <listOptionValue builtIn="false" value="RTOS"/> - <listOptionValue builtIn="false" value="DUET_NG"/> - </option> - <option id="gnu.c.compiler.option.dialect.std.580173803" name="Language standard" superClass="gnu.c.compiler.option.dialect.std" useByScannerDiscovery="true" value="gnu.c.compiler.dialect.default" valueType="enumerated"/> - <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1065384487" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/> - </tool> - <tool id="cdt.managedbuild.tool.gnu.cross.c.linker.1102044150" name="Cross GCC Linker" superClass="cdt.managedbuild.tool.gnu.cross.c.linker"/> - <tool id="cdt.managedbuild.tool.gnu.cross.archiver.1402882499" name="Cross GCC Archiver" superClass="cdt.managedbuild.tool.gnu.cross.archiver"/> - <tool command="gcc" commandLinePattern="${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${LinkFlags1} "${workspace_loc:/${CoreName}/SAM4E8E_RTOS/cores/arduino/syscalls.o}" ${INPUTS} ${LinkFlags2}" id="cdt.managedbuild.tool.gnu.cross.cpp.linker.1768134875" name="Cross G++ Linker" superClass="cdt.managedbuild.tool.gnu.cross.cpp.linker"> - <option id="gnu.cpp.link.option.nostdlibs.399544265" name="No startup or default libs (-nostdlib)" superClass="gnu.cpp.link.option.nostdlibs" useByScannerDiscovery="false" value="false" valueType="boolean"/> - <option id="gnu.cpp.link.option.paths.605414111" name="Library search path (-L)" superClass="gnu.cpp.link.option.paths" useByScannerDiscovery="false" valueType="libPaths"> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/SAM4E8E_RTOS/}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/FreeRTOS/SAM4E}""/> - </option> - <option id="gnu.cpp.link.option.libs.847860449" name="Libraries (-l)" superClass="gnu.cpp.link.option.libs" useByScannerDiscovery="false" valueType="libs"> - <listOptionValue builtIn="false" value="${CoreName}"/> - <listOptionValue builtIn="false" value="FreeRTOS"/> - </option> - <option id="gnu.cpp.link.option.flags.161856294" name="Linker flags" superClass="gnu.cpp.link.option.flags" useByScannerDiscovery="false" value="-Os --specs=nano.specs -Wl,--gc-sections -Wl,--fatal-warnings -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -T${workspace_loc:/${CoreName}/variants/duetNG/linker_scripts/gcc/flash.ld} -Wl,-Map,${workspace_loc:/${ProjName}/${ConfigName}}/${BuildArtifactFileBaseName}.map" valueType="string"/> - <inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.1270956612" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input"> - <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/> - <additionalInput kind="additionalinput" paths="$(LIBS)"/> - </inputType> - </tool> - <tool command="g++" id="cdt.managedbuild.tool.gnu.cross.cpp.compiler.1697970502" name="Cross G++ Compiler" superClass="cdt.managedbuild.tool.gnu.cross.cpp.compiler"> - <option id="gnu.cpp.compiler.option.optimization.level.1835678360" name="Optimization Level" superClass="gnu.cpp.compiler.option.optimization.level" useByScannerDiscovery="false" value="gnu.cpp.compiler.optimization.level.more" valueType="enumerated"/> - <option id="gnu.cpp.compiler.option.debugging.level.737051102" name="Debug Level" superClass="gnu.cpp.compiler.option.debugging.level" useByScannerDiscovery="false" value="gnu.cpp.compiler.debugging.level.none" valueType="enumerated"/> - <option id="gnu.cpp.compiler.option.other.verbose.1225557122" name="Verbose (-v)" superClass="gnu.cpp.compiler.option.other.verbose" useByScannerDiscovery="false" value="false" valueType="boolean"/> - <option id="gnu.cpp.compiler.option.other.other.1423466590" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" useByScannerDiscovery="false" value="-c -std=gnu++14 -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections -fno-threadsafe-statics -fno-rtti -fno-exceptions -nostdlib -Wdouble-promotion -fsingle-precision-constant "-Wa,-ahl=$*.s"" valueType="string"/> - <option id="gnu.cpp.compiler.option.include.paths.1505018967" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath"> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/cores/arduino}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Flash}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/SharedSpi}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Storage}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Wire}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/utils}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/services/clock}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/services/ioport}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/drivers}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/services/flash_efc}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/cmsis/sam4e/include}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/header_files}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/preprocessor}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/thirdparty/CMSIS/Include}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/variants/duetNG}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/DuetNG}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Networking}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/DuetWiFiSocketServer/src/include}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/FreeRTOS/src/include}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/FreeRTOS/src/portable/GCC/ARM_CM4F}""/> - </option> - <option id="gnu.cpp.compiler.option.preprocessor.def.1443248224" name="Defined symbols (-D)" superClass="gnu.cpp.compiler.option.preprocessor.def" useByScannerDiscovery="false" valueType="definedSymbols"> - <listOptionValue builtIn="false" value="__SAM4E8E__"/> - <listOptionValue builtIn="false" value="RTOS"/> - <listOptionValue builtIn="false" value="DUET_NG"/> - <listOptionValue builtIn="false" value="_XOPEN_SOURCE"/> - </option> - <option id="gnu.cpp.compiler.option.dialect.std.705325399" name="Language standard" superClass="gnu.cpp.compiler.option.dialect.std" useByScannerDiscovery="true" value="gnu.cpp.compiler.dialect.default" valueType="enumerated"/> - <inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.65828751" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/> - </tool> - </toolChain> - </folderInfo> - <sourceEntries> - <entry excluding="src/Networking/LwipEthernet|src/Alligator|src/SAME70_TEST|src/Display|src/Duet|src/DuetM|src/RADDS" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/> - </sourceEntries> - </configuration> - </storageModule> - <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/> - </cconfiguration> - <cconfiguration id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.241502451.1275216290.274082366.1645191116.1726130161"> - <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.241502451.1275216290.274082366.1645191116.1726130161" moduleId="org.eclipse.cdt.core.settings" name="SAME70_RTOS"> - <macros> - <stringMacro name="LinkFlags2" type="VALUE_TEXT" value="-Wl,--end-group -lm"/> - <stringMacro name="LinkFlags1" type="VALUE_TEXT" value="-mthumb -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--entry=Reset_Handler -Wl,--unresolved-symbols=report-all -Wl,--warn-common -Wl,--warn-section-align -Wl,--warn-unresolved-symbols -Wl,--start-group"/> - <stringMacro name="CoreName" type="VALUE_TEXT" value="CoreNG"/> - <stringMacro name="GccPath" type="VALUE_TEXT" value="/home/christian/duet-dc42/gcc-arm-none-eabi-7-2017-q4-major/bin/"/> - </macros> - <externalSettings/> - <extensions> - <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/> - <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 artifactExtension="elf" artifactName="SAME70Firmware" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.241502451.1275216290.274082366.1645191116.1726130161" name="SAME70_RTOS" parent="cdt.managedbuild.config.gnu.cross.exe.release" postannouncebuildStep="Generating binary file" postbuildStep="arm-none-eabi-objcopy -O binary ${workspace_loc:/${ProjName}/${ConfigName}}/SAME70Firmware.elf ${workspace_loc:/${ProjName}/${ConfigName}}/SAME70Firmware.bin"> - <folderInfo id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.241502451.1275216290.274082366.1645191116.1726130161." name="/" resourcePath=""> - <toolChain id="cdt.managedbuild.toolchain.gnu.cross.exe.release.418398691" name="Cross GCC" superClass="cdt.managedbuild.toolchain.gnu.cross.exe.release"> - <option id="cdt.managedbuild.option.gnu.cross.path.737846295" name="Path" superClass="cdt.managedbuild.option.gnu.cross.path" useByScannerDiscovery="false" value="${GccPath}" valueType="string"/> - <option id="cdt.managedbuild.option.gnu.cross.prefix.1759325799" name="Prefix" superClass="cdt.managedbuild.option.gnu.cross.prefix" useByScannerDiscovery="false" value="arm-none-eabi-" valueType="string"/> - <targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="cdt.managedbuild.targetPlatform.gnu.cross.278027372" isAbstract="false" osList="all" superClass="cdt.managedbuild.targetPlatform.gnu.cross"/> - <builder buildPath="${workspace_loc:/RepRapFirmware}/Release" id="cdt.managedbuild.builder.gnu.cross.1995751749" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="cdt.managedbuild.builder.gnu.cross"/> - <tool id="cdt.managedbuild.tool.gnu.cross.assembler.408977354" name="Cross GCC Assembler" superClass="cdt.managedbuild.tool.gnu.cross.assembler"> - <inputType id="cdt.managedbuild.tool.gnu.assembler.input.2007824056" superClass="cdt.managedbuild.tool.gnu.assembler.input"/> - </tool> - <tool commandLinePattern="${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}" id="cdt.managedbuild.tool.gnu.cross.c.compiler.683111625" name="Cross GCC Compiler" superClass="cdt.managedbuild.tool.gnu.cross.c.compiler"> - <option defaultValue="gnu.c.optimization.level.most" id="gnu.c.compiler.option.optimization.level.1059564366" name="Optimization Level" superClass="gnu.c.compiler.option.optimization.level" useByScannerDiscovery="false" value="gnu.c.optimization.level.more" valueType="enumerated"/> - <option id="gnu.c.compiler.option.debugging.level.1763855573" name="Debug Level" superClass="gnu.c.compiler.option.debugging.level" useByScannerDiscovery="false" value="gnu.c.debugging.level.default" valueType="enumerated"/> - <option id="gnu.c.compiler.option.misc.verbose.1619149556" name="Verbose (-v)" superClass="gnu.c.compiler.option.misc.verbose" useByScannerDiscovery="false" value="false" valueType="boolean"/> - <option id="gnu.c.compiler.option.misc.other.881101552" name="Other flags" superClass="gnu.c.compiler.option.misc.other" useByScannerDiscovery="false" value="-c -std=gnu99 -mcpu=cortex-m7 -mthumb -mfpu=fpv5-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections -nostdlib -Wdouble-promotion -fsingle-precision-constant" valueType="string"/> - <option id="gnu.c.compiler.option.include.paths.1588247101" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath"> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/cores/arduino}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Storage}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/utils}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/services/clock}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/services/ioport}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/components/ethernet_phy/ksz8081rna}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/drivers/hsmci}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/drivers/gmac}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/drivers/pmc}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/drivers/rstc}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/drivers/rtc}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/cmsis/same70/include}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/header_files}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/preprocessor}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/thirdparty/CMSIS/Include}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/variants/same70}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/SAME70_TEST}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Networking/LwipEthernet}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Networking/LwipEthernet/Lwip/src/include}""/> - </option> - <option id="gnu.c.compiler.option.preprocessor.def.symbols.2060162405" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" useByScannerDiscovery="false" valueType="definedSymbols"> - <listOptionValue builtIn="false" value="__SAME70Q21__"/> - <listOptionValue builtIn="false" value="SAME70_TEST_BOARD"/> - <listOptionValue builtIn="false" value="RTOS"/> - </option> - <option id="gnu.c.compiler.option.dialect.std.2086912971" name="Language standard" superClass="gnu.c.compiler.option.dialect.std" useByScannerDiscovery="true" value="gnu.c.compiler.dialect.default" valueType="enumerated"/> - <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.590982919" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/> - </tool> - <tool id="cdt.managedbuild.tool.gnu.cross.c.linker.698944650" name="Cross GCC Linker" superClass="cdt.managedbuild.tool.gnu.cross.c.linker"/> - <tool id="cdt.managedbuild.tool.gnu.cross.archiver.1178245746" name="Cross GCC Archiver" superClass="cdt.managedbuild.tool.gnu.cross.archiver"/> - <tool command="gcc" commandLinePattern="${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${LinkFlags1} "${workspace_loc:/${CoreName}/SAME70_RTOS/cores/arduino/syscalls.o}" ${INPUTS} ${LinkFlags2}" id="cdt.managedbuild.tool.gnu.cross.cpp.linker.1809359936" name="Cross G++ Linker" superClass="cdt.managedbuild.tool.gnu.cross.cpp.linker"> - <option id="gnu.cpp.link.option.nostdlibs.1494262112" name="No startup or default libs (-nostdlib)" superClass="gnu.cpp.link.option.nostdlibs" useByScannerDiscovery="false" value="false" valueType="boolean"/> - <option id="gnu.cpp.link.option.paths.374020775" name="Library search path (-L)" superClass="gnu.cpp.link.option.paths" useByScannerDiscovery="false" valueType="libPaths"> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/SAME70_RTOS/}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/FreeRTOS/SAME70}""/> - </option> - <option id="gnu.cpp.link.option.libs.1189839054" name="Libraries (-l)" superClass="gnu.cpp.link.option.libs" useByScannerDiscovery="false" valueType="libs"> - <listOptionValue builtIn="false" value="${CoreName}"/> - <listOptionValue builtIn="false" value="FreeRTOS"/> - </option> - <option id="gnu.cpp.link.option.flags.770219385" name="Linker flags" superClass="gnu.cpp.link.option.flags" useByScannerDiscovery="false" value="-Os -Wl,--gc-sections -Wl,--fatal-warnings -mcpu=cortex-m7 -mthumb -mfpu=fpv5-d16 -mfloat-abi=hard -T${workspace_loc:/${CoreName}/variants/same70/linker_scripts/gcc/flash.ld} -Wl,-Map,${workspace_loc:/${ProjName}/${ConfigName}}/${BuildArtifactFileBaseName}.map" valueType="string"/> - <inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.1510992918" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input"> - <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/> - <additionalInput kind="additionalinput" paths="$(LIBS)"/> - </inputType> - </tool> - <tool command="g++" id="cdt.managedbuild.tool.gnu.cross.cpp.compiler.730587251" name="Cross G++ Compiler" superClass="cdt.managedbuild.tool.gnu.cross.cpp.compiler"> - <option id="gnu.cpp.compiler.option.optimization.level.221735778" name="Optimization Level" superClass="gnu.cpp.compiler.option.optimization.level" useByScannerDiscovery="false" value="gnu.cpp.compiler.optimization.level.more" valueType="enumerated"/> - <option id="gnu.cpp.compiler.option.debugging.level.1690050236" name="Debug Level" superClass="gnu.cpp.compiler.option.debugging.level" useByScannerDiscovery="false" value="gnu.cpp.compiler.debugging.level.max" valueType="enumerated"/> - <option id="gnu.cpp.compiler.option.other.verbose.2083519512" name="Verbose (-v)" superClass="gnu.cpp.compiler.option.other.verbose" useByScannerDiscovery="false" value="false" valueType="boolean"/> - <option id="gnu.cpp.compiler.option.other.other.1879111073" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" useByScannerDiscovery="false" value="-c -std=gnu++14 -mcpu=cortex-m7 -mthumb -mfpu=fpv5-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections -fno-threadsafe-statics -fno-rtti -fno-exceptions -nostdlib -Wdouble-promotion -fsingle-precision-constant" valueType="string"/> - <option id="gnu.cpp.compiler.option.include.paths.1952129269" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath"> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/cores/arduino}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Flash}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/SharedSpi}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Storage}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Wire}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/utils}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/services/clock}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/services/ioport}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/drivers}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/drivers/gmac}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/services/flash_efc}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/cmsis/same70/include}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/header_files}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/preprocessor}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/thirdparty/CMSIS/Include}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/variants/same70}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/SAME70_TEST}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Networking}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Networking/LwipEthernet}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Networking/LwipEthernet/Lwip/src/include}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/DuetWiFiSocketServer/src/include}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/FreeRTOS/src/include}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/FreeRTOS/src/portable/GCC/ARM_CM7/r0p1}""/> - </option> - <option id="gnu.cpp.compiler.option.preprocessor.def.1432647334" name="Defined symbols (-D)" superClass="gnu.cpp.compiler.option.preprocessor.def" useByScannerDiscovery="false" valueType="definedSymbols"> - <listOptionValue builtIn="false" value="__SAME70Q21__"/> - <listOptionValue builtIn="false" value="RTOS"/> - <listOptionValue builtIn="false" value="SAME70_TEST_BOARD"/> - <listOptionValue builtIn="false" value="_XOPEN_SOURCE"/> - </option> - <option id="gnu.cpp.compiler.option.dialect.std.1245992156" name="Language standard" superClass="gnu.cpp.compiler.option.dialect.std" useByScannerDiscovery="true" value="gnu.cpp.compiler.dialect.default" valueType="enumerated"/> - <inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1500062938" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/> - </tool> - </toolChain> - </folderInfo> - <sourceEntries> - <entry excluding="src/Networking/W5500Ethernet|src/DuetNG/DuetWiFi|src/Duet|src/DuetNG/DuetEthernet/Wiznet/Internet/SNTP|src/DuetNG|src/Networking/LwipEthernet/Lwip/test|src/DuetNG/DuetEthernet/Wiznet/Internet/DNS|src/DuetNG/DuetEthernet/Wiznet/Application|src/DuetNG/DuetEthernet/Wiznet/Internet/MQTT|src/Alligator|src/Display|src/Networking/LwipEthernet/Lwip/src/apps/mqtt|src/Networking/LwipEthernet/Lwip/doc|src/DuetNG/DuetEthernet/Wiznet/Internet/TFTP|src/DuetNG/DuetEthernet/Ethernet3|src/Networking/LwipEthernet/Lwip/src/apps/snmp|src/Networking/LwipEthernet/Lwip/src/apps/httpd|src/DuetNG/DuetEthernet/Wiznet/Internet/FTPServer|src/DuetNG/DuetEthernet/Ethernet3/examples|src/Networking/LwipEthernet/Lwip/src/apps/tftp|src/Networking/LwipEthernet/Lwip/src/netif/ppp|src/Networking/LwipEthernet/Lwip/src/apps/lwiperf|src/DuetNG/DuetEthernet/Wiznet/Internet/FTPClient|src/Networking/LwipEthernet/Lwip/src/apps/sntp|src/DuetNG/DuetEthernet/Wiznet/Internet/httpServer|src/DuetNG/DuetEthernet/Wiznet/Internet/SNMP|src/DuetM|src/RADDS" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/> - </sourceEntries> - </configuration> - </storageModule> - <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/> - </cconfiguration> - <cconfiguration id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.241502451.1275216290.1979117592.1786125202"> - <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.241502451.1275216290.1979117592.1786125202" moduleId="org.eclipse.cdt.core.settings" name="DuetM_RTOS"> - <macros> - <stringMacro name="LinkFlags2" type="VALUE_TEXT" value="-Wl,--end-group -lm"/> - <stringMacro name="LinkFlags1" type="VALUE_TEXT" value="-mthumb -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--entry=Reset_Handler -Wl,--unresolved-symbols=report-all -Wl,--warn-common -Wl,--warn-section-align -Wl,--warn-unresolved-symbols -Wl,--start-group"/> - <stringMacro name="CoreName" type="VALUE_TEXT" value="CoreNG"/> - <stringMacro name="GccPath" type="VALUE_TEXT" value="/home/christian/duet-dc42/gcc-arm-none-eabi-7-2017-q4-major/bin/"/> - </macros> - <externalSettings/> - <extensions> - <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/> - <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 artifactExtension="elf" artifactName="DuetMaestroFirmware" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.241502451.1275216290.1979117592.1786125202" name="DuetM_RTOS" parent="cdt.managedbuild.config.gnu.cross.exe.release" postannouncebuildStep="Generating binary file" postbuildStep="arm-none-eabi-objcopy -O binary ${workspace_loc:/${ProjName}/${ConfigName}}/DuetMaestroFirmware.elf ${workspace_loc:/${ProjName}/${ConfigName}}/DuetMaestroFirmware.bin"> - <folderInfo id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.241502451.1275216290.1979117592.1786125202." name="/" resourcePath=""> - <toolChain id="cdt.managedbuild.toolchain.gnu.cross.exe.release.587287092" name="Cross GCC" superClass="cdt.managedbuild.toolchain.gnu.cross.exe.release"> - <option id="cdt.managedbuild.option.gnu.cross.path.1109728511" name="Path" superClass="cdt.managedbuild.option.gnu.cross.path" useByScannerDiscovery="false" value="${GccPath}" valueType="string"/> - <option id="cdt.managedbuild.option.gnu.cross.prefix.902845750" name="Prefix" superClass="cdt.managedbuild.option.gnu.cross.prefix" useByScannerDiscovery="false" value="arm-none-eabi-" valueType="string"/> - <targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="cdt.managedbuild.targetPlatform.gnu.cross.650058498" isAbstract="false" osList="all" superClass="cdt.managedbuild.targetPlatform.gnu.cross"/> - <builder buildPath="${workspace_loc:/RepRapFirmware}/Release" id="cdt.managedbuild.builder.gnu.cross.1418828251" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="cdt.managedbuild.builder.gnu.cross"/> - <tool id="cdt.managedbuild.tool.gnu.cross.assembler.2098319503" name="Cross GCC Assembler" superClass="cdt.managedbuild.tool.gnu.cross.assembler"> - <inputType id="cdt.managedbuild.tool.gnu.assembler.input.960800346" superClass="cdt.managedbuild.tool.gnu.assembler.input"/> - </tool> - <tool commandLinePattern="${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}" id="cdt.managedbuild.tool.gnu.cross.c.compiler.362346514" name="Cross GCC Compiler" superClass="cdt.managedbuild.tool.gnu.cross.c.compiler"> - <option defaultValue="gnu.c.optimization.level.most" id="gnu.c.compiler.option.optimization.level.1146301638" name="Optimization Level" superClass="gnu.c.compiler.option.optimization.level" useByScannerDiscovery="false" value="gnu.c.optimization.level.more" valueType="enumerated"/> - <option id="gnu.c.compiler.option.debugging.level.26576195" name="Debug Level" superClass="gnu.c.compiler.option.debugging.level" useByScannerDiscovery="false" value="gnu.c.debugging.level.none" valueType="enumerated"/> - <option id="gnu.c.compiler.option.misc.verbose.506647291" name="Verbose (-v)" superClass="gnu.c.compiler.option.misc.verbose" useByScannerDiscovery="false" value="false" valueType="boolean"/> - <option id="gnu.c.compiler.option.misc.other.1094924681" name="Other flags" superClass="gnu.c.compiler.option.misc.other" useByScannerDiscovery="false" value="-c -std=gnu99 -mcpu=cortex-m4 -mthumb -ffunction-sections -fdata-sections -nostdlib -Wdouble-promotion -fsingle-precision-constant "-Wa,-ahl=$*.s"" valueType="string"/> - <option id="gnu.c.compiler.option.include.paths.1928788580" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath"> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/cores/arduino}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Storage}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/utils}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/services/ioport}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/drivers/hsmci}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/drivers/rstc}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/drivers/rtc}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/cmsis/sam4s/include}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/header_files}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/preprocessor}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/thirdparty/CMSIS/Include}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/variants/sam4s}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Networking/W5500Ethernet}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Networking/W5500Ethernet/Wiznet/Ethernet}""/> - </option> - <option id="gnu.c.compiler.option.preprocessor.def.symbols.42674268" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" useByScannerDiscovery="false" valueType="definedSymbols"> - <listOptionValue builtIn="false" value="__SAM4S8C__"/> - <listOptionValue builtIn="false" value="DUET_M"/> - <listOptionValue builtIn="false" value="RTOS"/> - </option> - <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1911984296" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/> - </tool> - <tool id="cdt.managedbuild.tool.gnu.cross.c.linker.658619264" name="Cross GCC Linker" superClass="cdt.managedbuild.tool.gnu.cross.c.linker"/> - <tool id="cdt.managedbuild.tool.gnu.cross.archiver.62127405" name="Cross GCC Archiver" superClass="cdt.managedbuild.tool.gnu.cross.archiver"/> - <tool command="gcc" commandLinePattern="${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${LinkFlags1} "${workspace_loc:/${CoreName}/SAM4S/cores/arduino/syscalls.o}" ${INPUTS} ${LinkFlags2}" id="cdt.managedbuild.tool.gnu.cross.cpp.linker.219833956" name="Cross G++ Linker" superClass="cdt.managedbuild.tool.gnu.cross.cpp.linker"> - <option id="gnu.cpp.link.option.nostdlibs.1759008050" name="No startup or default libs (-nostdlib)" superClass="gnu.cpp.link.option.nostdlibs" useByScannerDiscovery="false" value="false" valueType="boolean"/> - <option id="gnu.cpp.link.option.paths.1780686736" name="Library search path (-L)" superClass="gnu.cpp.link.option.paths" useByScannerDiscovery="false" valueType="libPaths"> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/SAM4S_RTOS/}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/FreeRTOS/SAM4S}""/> - </option> - <option id="gnu.cpp.link.option.libs.1861827109" name="Libraries (-l)" superClass="gnu.cpp.link.option.libs" useByScannerDiscovery="false" valueType="libs"> - <listOptionValue builtIn="false" value="${CoreName}"/> - <listOptionValue builtIn="false" value="FreeRTOS"/> - </option> - <option id="gnu.cpp.link.option.flags.249188176" name="Linker flags" superClass="gnu.cpp.link.option.flags" useByScannerDiscovery="false" value="-Os -Wl,--gc-sections -Wl,--fatal-warnings -mcpu=cortex-m4 -T${workspace_loc:/${CoreName}/variants/sam4s/linker_scripts/gcc/flash.ld} -Wl,-Map,${workspace_loc:/${ProjName}/${ConfigName}}/${BuildArtifactFileBaseName}.map" valueType="string"/> - <inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.1766055484" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input"> - <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/> - <additionalInput kind="additionalinput" paths="$(LIBS)"/> - </inputType> - </tool> - <tool command="g++" id="cdt.managedbuild.tool.gnu.cross.cpp.compiler.1679811926" name="Cross G++ Compiler" superClass="cdt.managedbuild.tool.gnu.cross.cpp.compiler"> - <option id="gnu.cpp.compiler.option.optimization.level.742108559" name="Optimization Level" superClass="gnu.cpp.compiler.option.optimization.level" useByScannerDiscovery="false" value="gnu.cpp.compiler.optimization.level.more" valueType="enumerated"/> - <option id="gnu.cpp.compiler.option.debugging.level.1766333437" name="Debug Level" superClass="gnu.cpp.compiler.option.debugging.level" useByScannerDiscovery="false" value="gnu.cpp.compiler.debugging.level.none" valueType="enumerated"/> - <option id="gnu.cpp.compiler.option.other.verbose.423352956" name="Verbose (-v)" superClass="gnu.cpp.compiler.option.other.verbose" useByScannerDiscovery="false" value="false" valueType="boolean"/> - <option id="gnu.cpp.compiler.option.other.other.296249362" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" useByScannerDiscovery="false" value="-c -std=gnu++14 -mcpu=cortex-m4 -mthumb -ffunction-sections -fdata-sections -fno-threadsafe-statics -fno-rtti -fno-exceptions -nostdlib -Wdouble-promotion -fsingle-precision-constant "-Wa,-ahl=$*.s"" valueType="string"/> - <option id="gnu.cpp.compiler.option.include.paths.1392267649" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath"> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/cores/arduino}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Flash}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/SharedSpi}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Storage}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Wire}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/utils}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/services/clock}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/services/ioport}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/drivers}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/services/flash_efc}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/cmsis/sam4s/include}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/header_files}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/preprocessor}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/thirdparty/CMSIS/Include}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/variants/sam4s}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/DuetM}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Networking}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/FreeRTOS/src/include}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/FreeRTOS/src/portable/GCC/ARM_CM4F}""/> - </option> - <option id="gnu.cpp.compiler.option.preprocessor.def.1873093132" name="Defined symbols (-D)" superClass="gnu.cpp.compiler.option.preprocessor.def" useByScannerDiscovery="false" valueType="definedSymbols"> - <listOptionValue builtIn="false" value="__SAM4S8C__"/> - <listOptionValue builtIn="false" value="DUET_M"/> - <listOptionValue builtIn="false" value="RTOS"/> - <listOptionValue builtIn="false" value="_XOPEN_SOURCE"/> - </option> - <option id="gnu.cpp.compiler.option.dialect.std.1735471203" name="Language standard" superClass="gnu.cpp.compiler.option.dialect.std" useByScannerDiscovery="true" value="gnu.cpp.compiler.dialect.default" valueType="enumerated"/> - <inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1116287501" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/> - </tool> - </toolChain> - </folderInfo> - <sourceEntries> - <entry excluding="src/DuetNG|src/Networking/ESP8266WiFi|src/Networking/LwipEthernet|src/Alligator|src/SAME70_TEST|src/Duet|src/RADDS" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/> - </sourceEntries> - </configuration> - </storageModule> - <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/> - </cconfiguration> - <cconfiguration id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.241502451.1275216290.274082366.1645191116.1852610203"> - <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.241502451.1275216290.274082366.1645191116.1852610203" moduleId="org.eclipse.cdt.core.settings" name="SAME70_RTOS"> - <macros> - <stringMacro name="LinkFlags2" type="VALUE_TEXT" value="-Wl,--end-group -lm"/> - <stringMacro name="LinkFlags1" type="VALUE_TEXT" value="-mthumb -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--entry=Reset_Handler -Wl,--unresolved-symbols=report-all -Wl,--warn-common -Wl,--warn-section-align -Wl,--warn-unresolved-symbols -Wl,--start-group"/> - <stringMacro name="CoreName" type="VALUE_TEXT" value="CoreNG"/> - <stringMacro name="GccPath" type="VALUE_TEXT" value="C:\Program Files (x86)\GNU Tools ARM Embedded\6 2017-q2-update\bin"/> - </macros> - <externalSettings/> - <extensions> - <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/> - <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 artifactExtension="elf" artifactName="SAME70Firmware" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.241502451.1275216290.274082366.1645191116.1852610203" name="SAME70_RTOS" parent="cdt.managedbuild.config.gnu.cross.exe.release" postannouncebuildStep="Generating binary file" postbuildStep="arm-none-eabi-objcopy -O binary ${workspace_loc:/${ProjName}/${ConfigName}}/SAME70Firmware.elf ${workspace_loc:/${ProjName}/${ConfigName}}/SAME70Firmware.bin"> - <folderInfo id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.241502451.1275216290.274082366.1645191116.1852610203." name="/" resourcePath=""> - <toolChain id="cdt.managedbuild.toolchain.gnu.cross.exe.release.5959303" name="Cross GCC" superClass="cdt.managedbuild.toolchain.gnu.cross.exe.release"> - <option id="cdt.managedbuild.option.gnu.cross.path.163568524" name="Path" superClass="cdt.managedbuild.option.gnu.cross.path" useByScannerDiscovery="false" value="${GccPath}" valueType="string"/> - <option id="cdt.managedbuild.option.gnu.cross.prefix.308380201" name="Prefix" superClass="cdt.managedbuild.option.gnu.cross.prefix" useByScannerDiscovery="false" value="arm-none-eabi-" valueType="string"/> - <targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="cdt.managedbuild.targetPlatform.gnu.cross.1827418537" isAbstract="false" osList="all" superClass="cdt.managedbuild.targetPlatform.gnu.cross"/> - <builder buildPath="${workspace_loc:/RepRapFirmware}/Release" id="cdt.managedbuild.builder.gnu.cross.1828958094" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="cdt.managedbuild.builder.gnu.cross"/> - <tool id="cdt.managedbuild.tool.gnu.cross.assembler.254554862" name="Cross GCC Assembler" superClass="cdt.managedbuild.tool.gnu.cross.assembler"> - <inputType id="cdt.managedbuild.tool.gnu.assembler.input.1960931313" superClass="cdt.managedbuild.tool.gnu.assembler.input"/> - </tool> - <tool commandLinePattern="${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}" id="cdt.managedbuild.tool.gnu.cross.c.compiler.1113168108" name="Cross GCC Compiler" superClass="cdt.managedbuild.tool.gnu.cross.c.compiler"> - <option defaultValue="gnu.c.optimization.level.most" id="gnu.c.compiler.option.optimization.level.1099089925" name="Optimization Level" superClass="gnu.c.compiler.option.optimization.level" useByScannerDiscovery="false" value="gnu.c.optimization.level.more" valueType="enumerated"/> - <option id="gnu.c.compiler.option.debugging.level.2018591546" name="Debug Level" superClass="gnu.c.compiler.option.debugging.level" useByScannerDiscovery="false" value="gnu.c.debugging.level.default" valueType="enumerated"/> - <option id="gnu.c.compiler.option.misc.verbose.1767118602" name="Verbose (-v)" superClass="gnu.c.compiler.option.misc.verbose" useByScannerDiscovery="false" value="false" valueType="boolean"/> - <option id="gnu.c.compiler.option.misc.other.2139236731" name="Other flags" superClass="gnu.c.compiler.option.misc.other" useByScannerDiscovery="false" value="-c -std=gnu99 -mcpu=cortex-m7 -mthumb -mfpu=fpv5-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections -nostdlib -Wdouble-promotion -fsingle-precision-constant" valueType="string"/> - <option id="gnu.c.compiler.option.include.paths.1736169055" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath"> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/cores/arduino}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Storage}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/utils}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/services/clock}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/services/ioport}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/components/ethernet_phy/ksz8081rna}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/drivers/hsmci}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/drivers/gmac}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/drivers/pmc}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/drivers/rstc}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/drivers/rtc}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/cmsis/same70/include}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/header_files}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/preprocessor}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/thirdparty/CMSIS/Include}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/variants/same70}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/SAME70_TEST}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Networking/LwipEthernet}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Networking/LwipEthernet/Lwip/src/include}""/> - </option> - <option id="gnu.c.compiler.option.preprocessor.def.symbols.316510289" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" useByScannerDiscovery="false" valueType="definedSymbols"> - <listOptionValue builtIn="false" value="__SAME70Q21__"/> - <listOptionValue builtIn="false" value="RTOS"/> - <listOptionValue builtIn="false" value="SAME70_TEST_BOARD"/> - </option> - <option id="gnu.c.compiler.option.dialect.std.133148413" name="Language standard" superClass="gnu.c.compiler.option.dialect.std" useByScannerDiscovery="true" value="gnu.c.compiler.dialect.default" valueType="enumerated"/> - <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.477491021" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/> - </tool> - <tool id="cdt.managedbuild.tool.gnu.cross.c.linker.1392905935" name="Cross GCC Linker" superClass="cdt.managedbuild.tool.gnu.cross.c.linker"/> - <tool id="cdt.managedbuild.tool.gnu.cross.archiver.733829747" name="Cross GCC Archiver" superClass="cdt.managedbuild.tool.gnu.cross.archiver"/> - <tool command="gcc" commandLinePattern="${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${LinkFlags1} "${workspace_loc}/${CoreName}/SAME70/cores/arduino/syscalls.o" ${INPUTS} ${LinkFlags2}" id="cdt.managedbuild.tool.gnu.cross.cpp.linker.1019421301" name="Cross G++ Linker" superClass="cdt.managedbuild.tool.gnu.cross.cpp.linker"> - <option id="gnu.cpp.link.option.nostdlibs.1609488418" name="No startup or default libs (-nostdlib)" superClass="gnu.cpp.link.option.nostdlibs" useByScannerDiscovery="false" value="false" valueType="boolean"/> - <option id="gnu.cpp.link.option.paths.579521002" name="Library search path (-L)" superClass="gnu.cpp.link.option.paths" useByScannerDiscovery="false" valueType="libPaths"> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/SAME70_RTOS/}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/FreeRTOS/SAME70}""/> - </option> - <option id="gnu.cpp.link.option.libs.1783235457" name="Libraries (-l)" superClass="gnu.cpp.link.option.libs" useByScannerDiscovery="false" valueType="libs"> - <listOptionValue builtIn="false" value="${CoreName}"/> - <listOptionValue builtIn="false" value="FreeRTOS"/> - </option> - <option id="gnu.cpp.link.option.flags.2100826215" name="Linker flags" superClass="gnu.cpp.link.option.flags" useByScannerDiscovery="false" value="-Os -Wl,--gc-sections -Wl,--fatal-warnings -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -T${workspace_loc:/${CoreName}/variants/same70/linker_scripts/gcc/flash.ld} -Wl,-Map,${workspace_loc:/${ProjName}/${ConfigName}}/${BuildArtifactFileBaseName}.map" valueType="string"/> - <inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.1623645672" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input"> - <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/> - <additionalInput kind="additionalinput" paths="$(LIBS)"/> - </inputType> - </tool> - <tool command="g++" id="cdt.managedbuild.tool.gnu.cross.cpp.compiler.1243015316" name="Cross G++ Compiler" superClass="cdt.managedbuild.tool.gnu.cross.cpp.compiler"> - <option id="gnu.cpp.compiler.option.optimization.level.744605431" name="Optimization Level" superClass="gnu.cpp.compiler.option.optimization.level" useByScannerDiscovery="false" value="gnu.cpp.compiler.optimization.level.more" valueType="enumerated"/> - <option id="gnu.cpp.compiler.option.debugging.level.1247470383" name="Debug Level" superClass="gnu.cpp.compiler.option.debugging.level" useByScannerDiscovery="false" value="gnu.cpp.compiler.debugging.level.default" valueType="enumerated"/> - <option id="gnu.cpp.compiler.option.other.verbose.1130347909" name="Verbose (-v)" superClass="gnu.cpp.compiler.option.other.verbose" useByScannerDiscovery="false" value="false" valueType="boolean"/> - <option id="gnu.cpp.compiler.option.other.other.1453375027" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" useByScannerDiscovery="false" value="-c -std=gnu++14 -mcpu=cortex-m7 -mthumb -mfpu=fpv5-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections -fno-threadsafe-statics -fno-rtti -fno-exceptions -nostdlib -Wdouble-promotion -fsingle-precision-constant "-Wa,-ahl=$*.s"" valueType="string"/> - <option id="gnu.cpp.compiler.option.include.paths.633679617" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath"> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/cores/arduino}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Flash}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/SharedSpi}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Storage}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Wire}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/utils}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/services/clock}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/services/ioport}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/drivers}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/drivers/gmac}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/services/flash_efc}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/cmsis/same70/include}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/header_files}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/preprocessor}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/thirdparty/CMSIS/Include}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/variants/same70}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/SAME70_TEST}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Networking}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Networking/LwipEthernet}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Networking/LwipEthernet/Lwip/src/include}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/DuetWiFiSocketServer/src/include}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/FreeRTOS/src/include}""/> - <listOptionValue builtIn="false" value=""${workspace_loc:/FreeRTOS/src/portable/GCC/ARM_CM7/r0p1}""/> - </option> - <option id="gnu.cpp.compiler.option.preprocessor.def.315745995" name="Defined symbols (-D)" superClass="gnu.cpp.compiler.option.preprocessor.def" useByScannerDiscovery="false" valueType="definedSymbols"> - <listOptionValue builtIn="false" value="__SAME70Q21__"/> - <listOptionValue builtIn="false" value="RTOS"/> - <listOptionValue builtIn="false" value="SAME70_TEST_BOARD"/> - <listOptionValue builtIn="false" value="_XOPEN_SOURCE"/> - </option> - <option id="gnu.cpp.compiler.option.dialect.std.815297330" name="Language standard" superClass="gnu.cpp.compiler.option.dialect.std" useByScannerDiscovery="true" value="gnu.cpp.compiler.dialect.default" valueType="enumerated"/> - <inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.2035099195" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/> - </tool> - </toolChain> - </folderInfo> - <sourceEntries> - <entry excluding="src/Networking/W5500Ethernet|src/DuetNG/DuetWiFi|src/Duet|src/DuetNG/DuetEthernet/Wiznet/Internet/SNTP|src/DuetNG|src/Networking/LwipEthernet/Lwip/test|src/DuetNG/DuetEthernet/Wiznet/Internet/DNS|src/DuetNG/DuetEthernet/Wiznet/Application|src/DuetNG/DuetEthernet/Wiznet/Internet/MQTT|src/Alligator|src/Display|src/Networking/LwipEthernet/Lwip/src/apps/mqtt|src/Networking/LwipEthernet/Lwip/doc|src/DuetNG/DuetEthernet/Wiznet/Internet/TFTP|src/DuetNG/DuetEthernet/Ethernet3|src/Networking/LwipEthernet/Lwip/src/apps/snmp|src/Networking/LwipEthernet/Lwip/src/apps/httpd|src/DuetNG/DuetEthernet/Wiznet/Internet/FTPServer|src/DuetNG/DuetEthernet/Ethernet3/examples|src/Networking/LwipEthernet/Lwip/src/apps/tftp|src/Networking/LwipEthernet/Lwip/src/netif/ppp|src/Networking/LwipEthernet/Lwip/src/apps/lwiperf|src/DuetNG/DuetEthernet/Wiznet/Internet/FTPClient|src/Networking/LwipEthernet/Lwip/src/apps/sntp|src/DuetNG/DuetEthernet/Wiznet/Internet/httpServer|src/DuetNG/DuetEthernet/Wiznet/Internet/SNMP|src/DuetM|src/RADDS" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/> - </sourceEntries> - </configuration> - </storageModule> - <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/> - </cconfiguration> - </storageModule> - <storageModule moduleId="cdtBuildSystem" version="4.0.0"> - <project id="RepRapFirmware.cdt.managedbuild.target.gnu.cross.exe.1494358155" name="Executable" projectType="cdt.managedbuild.target.gnu.cross.exe"/> - </storageModule> - <storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/> - <storageModule moduleId="refreshScope" versionNumber="2"> - <configuration configurationName="DuetM_RTOS"/> - <configuration configurationName="Alligator"/> - <configuration configurationName="SAME70"/> - <configuration configurationName="Duet2"/> - <configuration configurationName="RADDS"/> - <configuration configurationName="Duet2_RTOS"/> - <configuration configurationName="DuetM"/> - <configuration configurationName="Duet085"/> - </storageModule> - <storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/> - <storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/> - <storageModule moduleId="scannerConfiguration"> - <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/> - <scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.cross.exe.release.516195201;cdt.managedbuild.config.gnu.cross.exe.release.516195201.;cdt.managedbuild.tool.gnu.cross.cpp.compiler.1703390221;cdt.managedbuild.tool.gnu.cpp.compiler.input.111814721"> - <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP"/> - </scannerConfigBuildInfo> - <scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.cross.exe.release.516195201;cdt.managedbuild.config.gnu.cross.exe.release.516195201.;cdt.managedbuild.tool.gnu.cross.c.compiler.220085372;cdt.managedbuild.tool.gnu.c.compiler.input.1345445195"> - <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/> - </scannerConfigBuildInfo> - </storageModule> + + <storageModule moduleId="org.eclipse.cdt.core.settings"> + + <cconfiguration id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850"> + + <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850" moduleId="org.eclipse.cdt.core.settings" name="Duet085"> + + <macros> + + <stringMacro name="LinkFlags2" type="VALUE_TEXT" value="-Wl,--end-group -lm"/> + + <stringMacro name="LinkFlags1" type="VALUE_TEXT" value="-mthumb -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--entry=Reset_Handler -Wl,--unresolved-symbols=report-all -Wl,--warn-common -Wl,--warn-section-align -Wl,--warn-unresolved-symbols -Wl,--start-group"/> + + <stringMacro name="CoreName" type="VALUE_TEXT" value="CoreNG"/> + + <stringMacro name="GccPath" type="VALUE_TEXT" value="/home/christian/duet/gcc-arm-none-eabi-7-2018-q2-update/bin"/> + + </macros> + + <externalSettings/> + + <extensions> + + <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/> + + <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 artifactExtension="elf" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850" name="Duet085" optionalBuildProperties="" parent="cdt.managedbuild.config.gnu.cross.exe.release" postannouncebuildStep="Generating binary file" postbuildStep="arm-none-eabi-objcopy -O binary ${workspace_loc:/${ProjName}/${ConfigName}}/${BuildArtifactFileBaseName}.elf ${workspace_loc:/${ProjName}/${ConfigName}}/${BuildArtifactFileBaseName}.bin"> + + <folderInfo id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850." name="/" resourcePath=""> + + <toolChain id="cdt.managedbuild.toolchain.gnu.cross.exe.release.947353540" name="Cross GCC" superClass="cdt.managedbuild.toolchain.gnu.cross.exe.release"> + + <option id="cdt.managedbuild.option.gnu.cross.path.1742191832" name="Path" superClass="cdt.managedbuild.option.gnu.cross.path" useByScannerDiscovery="false" value="${GccPath}" valueType="string"/> + + <option id="cdt.managedbuild.option.gnu.cross.prefix.1660769040" name="Prefix" superClass="cdt.managedbuild.option.gnu.cross.prefix" useByScannerDiscovery="false" value="arm-none-eabi-" valueType="string"/> + + <targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="cdt.managedbuild.targetPlatform.gnu.cross.223860525" isAbstract="false" osList="all" superClass="cdt.managedbuild.targetPlatform.gnu.cross"/> + + <builder buildPath="${workspace_loc:/RepRapFirmware}/Release" id="cdt.managedbuild.builder.gnu.cross.13059261" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="cdt.managedbuild.builder.gnu.cross"/> + + <tool id="cdt.managedbuild.tool.gnu.cross.assembler.163742171" name="Cross GCC Assembler" superClass="cdt.managedbuild.tool.gnu.cross.assembler"> + + <inputType id="cdt.managedbuild.tool.gnu.assembler.input.230262206" superClass="cdt.managedbuild.tool.gnu.assembler.input"/> + + </tool> + + <tool commandLinePattern="${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}" id="cdt.managedbuild.tool.gnu.cross.c.compiler.278237460" name="Cross GCC Compiler" superClass="cdt.managedbuild.tool.gnu.cross.c.compiler"> + + <option defaultValue="gnu.c.optimization.level.most" id="gnu.c.compiler.option.optimization.level.710346403" name="Optimization Level" superClass="gnu.c.compiler.option.optimization.level" useByScannerDiscovery="false" value="gnu.c.optimization.level.more" valueType="enumerated"/> + + <option id="gnu.c.compiler.option.debugging.level.836865552" name="Debug Level" superClass="gnu.c.compiler.option.debugging.level" useByScannerDiscovery="false" value="gnu.c.debugging.level.none" valueType="enumerated"/> + + <option id="gnu.c.compiler.option.misc.verbose.431575256" name="Verbose (-v)" superClass="gnu.c.compiler.option.misc.verbose" useByScannerDiscovery="false" value="false" valueType="boolean"/> + + <option id="gnu.c.compiler.option.misc.other.660952665" name="Other flags" superClass="gnu.c.compiler.option.misc.other" useByScannerDiscovery="false" value="-c -std=gnu99 -mcpu=cortex-m3 -mthumb -ffunction-sections -fdata-sections -nostdlib -Wdouble-promotion -fsingle-precision-constant "-Wa,-ahl=$*.s"" valueType="string"/> + + <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.compiler.option.include.paths.2080437508" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath"> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/cores/arduino}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Storage}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/utils}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/drivers}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/cmsis/sam3x/include}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/header_files}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/preprocessor}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/thirdparty/CMSIS/Include}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/variants/duet}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Duet/Lwip}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Duet/Lwip/lwip/src/include}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Duet/EMAC}""/> + + </option> + + <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.compiler.option.preprocessor.def.symbols.571434619" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" useByScannerDiscovery="false" valueType="definedSymbols"> + + <listOptionValue builtIn="false" value="__SAM3X8E__"/> + + <listOptionValue builtIn="false" value="DUET_06_085"/> + + </option> + + <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1642892736" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/> + + </tool> + + <tool id="cdt.managedbuild.tool.gnu.cross.c.linker.831729502" name="Cross GCC Linker" superClass="cdt.managedbuild.tool.gnu.cross.c.linker"/> + + <tool id="cdt.managedbuild.tool.gnu.cross.archiver.586905748" name="Cross GCC Archiver" superClass="cdt.managedbuild.tool.gnu.cross.archiver"/> + + <tool command="gcc" commandLinePattern="${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${LinkFlags1} "${workspace_loc:/${CoreName}/SAM3X8E/cores/arduino/syscalls.o}" ${INPUTS} ${LinkFlags2}" id="cdt.managedbuild.tool.gnu.cross.cpp.linker.77650722" name="Cross G++ Linker" superClass="cdt.managedbuild.tool.gnu.cross.cpp.linker"> + + <option id="gnu.cpp.link.option.nostdlibs.296038599" name="No startup or default libs (-nostdlib)" superClass="gnu.cpp.link.option.nostdlibs" useByScannerDiscovery="false" value="false" valueType="boolean"/> + + <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.cpp.link.option.paths.75045718" name="Library search path (-L)" superClass="gnu.cpp.link.option.paths" useByScannerDiscovery="false" valueType="libPaths"> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/SAM3X8E/}""/> + + </option> + + <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.cpp.link.option.libs.1995000942" name="Libraries (-l)" superClass="gnu.cpp.link.option.libs" useByScannerDiscovery="false" valueType="libs"> + + <listOptionValue builtIn="false" value="${CoreName}"/> + + </option> + + <option id="gnu.cpp.link.option.flags.1670739910" name="Linker flags" superClass="gnu.cpp.link.option.flags" useByScannerDiscovery="false" value="-Os -Wl,--gc-sections -Wl,--fatal-warnings -mcpu=cortex-m3 -T${workspace_loc:/${CoreName}/variants/duet/linker_scripts/gcc/flash.ld} -Wl,-Map,${workspace_loc:/${ProjName}/${ConfigName}}/${BuildArtifactFileBaseName}.map" valueType="string"/> + + <inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.1491196930" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input"> + + <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/> + + <additionalInput kind="additionalinput" paths="$(LIBS)"/> + + </inputType> + + </tool> + + <tool command="g++" id="cdt.managedbuild.tool.gnu.cross.cpp.compiler.1261470824" name="Cross G++ Compiler" superClass="cdt.managedbuild.tool.gnu.cross.cpp.compiler"> + + <option id="gnu.cpp.compiler.option.optimization.level.1078688101" name="Optimization Level" superClass="gnu.cpp.compiler.option.optimization.level" useByScannerDiscovery="false" value="gnu.cpp.compiler.optimization.level.more" valueType="enumerated"/> + + <option id="gnu.cpp.compiler.option.debugging.level.1332396113" name="Debug Level" superClass="gnu.cpp.compiler.option.debugging.level" useByScannerDiscovery="false" value="gnu.cpp.compiler.debugging.level.none" valueType="enumerated"/> + + <option id="gnu.cpp.compiler.option.other.verbose.1151170522" name="Verbose (-v)" superClass="gnu.cpp.compiler.option.other.verbose" useByScannerDiscovery="false" value="false" valueType="boolean"/> + + <option id="gnu.cpp.compiler.option.other.other.184134051" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" useByScannerDiscovery="false" value="-c -std=gnu++14 -mcpu=cortex-m3 -mthumb -ffunction-sections -fdata-sections -fno-threadsafe-statics -fno-rtti -fno-exceptions -nostdlib -Wdouble-promotion -fsingle-precision-constant "-Wa,-ahl=$*.s"" valueType="string"/> + + <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.cpp.compiler.option.include.paths.1285689288" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath"> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/cores/arduino}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Flash}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/SharedSpi}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Storage}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Wire}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/utils}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/services/clock}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/drivers}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/services/flash_efc}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/cmsis/sam3x/include}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/header_files}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/preprocessor}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/thirdparty/CMSIS/Include}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/variants/duet}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Duet}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Duet/Lwip}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Duet/EMAC}""/> + + </option> + + <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.cpp.compiler.option.preprocessor.def.1548770846" name="Defined symbols (-D)" superClass="gnu.cpp.compiler.option.preprocessor.def" useByScannerDiscovery="false" valueType="definedSymbols"> + + <listOptionValue builtIn="false" value="__SAM3X8E__"/> + + <listOptionValue builtIn="false" value="DUET_06_085"/> + + <listOptionValue builtIn="false" value="_XOPEN_SOURCE"/> + + </option> + + <inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.948285998" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/> + + </tool> + + </toolChain> + + </folderInfo> + + <sourceEntries> + + <entry excluding="src/Pccb|src/Alligator|src/Duet/Lwip/lwip/src/core/ipv6|src/Duet/Lwip/lwip/test|src/SAME70_TEST|src/Display|src/Networking|src/DuetNG|src/DuetM|src/RADDS" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/> + + </sourceEntries> + + </configuration> + + </storageModule> + + <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/> + + </cconfiguration> + + <cconfiguration id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.1027429289"> + + <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.1027429289" moduleId="org.eclipse.cdt.core.settings" name="RADDS"> + + <macros> + + <stringMacro name="LinkFlags2" type="VALUE_TEXT" value="-Wl,--end-group -lm"/> + + <stringMacro name="LinkFlags1" type="VALUE_TEXT" value="-mthumb -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--entry=Reset_Handler -Wl,--unresolved-symbols=report-all -Wl,--warn-common -Wl,--warn-section-align -Wl,--warn-unresolved-symbols -Wl,--start-group"/> + + <stringMacro name="CoreName" type="VALUE_TEXT" value="CoreNG"/> + + <stringMacro name="GccPath" type="VALUE_TEXT" value="/home/christian/duet/gcc-arm-none-eabi-7-2018-q2-update/bin"/> + + </macros> + + <externalSettings/> + + <extensions> + + <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/> + + <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 artifactExtension="elf" artifactName="${ProjName}-RADDS" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.1027429289" name="RADDS" optionalBuildProperties="" parent="cdt.managedbuild.config.gnu.cross.exe.release" postannouncebuildStep="Generating binary file" postbuildStep="arm-none-eabi-objcopy -O binary ${workspace_loc:/${ProjName}/${ConfigName}}/${BuildArtifactFileBaseName}.elf ${workspace_loc:/${ProjName}/${ConfigName}}/${BuildArtifactFileBaseName}.bin"> + + <folderInfo id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.1027429289." name="/" resourcePath=""> + + <toolChain id="cdt.managedbuild.toolchain.gnu.cross.exe.release.1973208555" name="Cross GCC" superClass="cdt.managedbuild.toolchain.gnu.cross.exe.release"> + + <option id="cdt.managedbuild.option.gnu.cross.path.2092504710" name="Path" superClass="cdt.managedbuild.option.gnu.cross.path" useByScannerDiscovery="false" value="${GccPath}" valueType="string"/> + + <option id="cdt.managedbuild.option.gnu.cross.prefix.1606498191" name="Prefix" superClass="cdt.managedbuild.option.gnu.cross.prefix" useByScannerDiscovery="false" value="arm-none-eabi-" valueType="string"/> + + <targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="cdt.managedbuild.targetPlatform.gnu.cross.342355349" isAbstract="false" osList="all" superClass="cdt.managedbuild.targetPlatform.gnu.cross"/> + + <builder buildPath="${workspace_loc:/RepRapFirmware}/Release" id="cdt.managedbuild.builder.gnu.cross.1336978387" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="cdt.managedbuild.builder.gnu.cross"/> + + <tool id="cdt.managedbuild.tool.gnu.cross.assembler.863511428" name="Cross GCC Assembler" superClass="cdt.managedbuild.tool.gnu.cross.assembler"> + + <inputType id="cdt.managedbuild.tool.gnu.assembler.input.664007272" superClass="cdt.managedbuild.tool.gnu.assembler.input"/> + + </tool> + + <tool commandLinePattern="${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}" id="cdt.managedbuild.tool.gnu.cross.c.compiler.764246283" name="Cross GCC Compiler" superClass="cdt.managedbuild.tool.gnu.cross.c.compiler"> + + <option defaultValue="gnu.c.optimization.level.most" id="gnu.c.compiler.option.optimization.level.1125289372" name="Optimization Level" superClass="gnu.c.compiler.option.optimization.level" useByScannerDiscovery="false" value="gnu.c.optimization.level.more" valueType="enumerated"/> + + <option id="gnu.c.compiler.option.debugging.level.807229803" name="Debug Level" superClass="gnu.c.compiler.option.debugging.level" useByScannerDiscovery="false" value="gnu.c.debugging.level.none" valueType="enumerated"/> + + <option id="gnu.c.compiler.option.misc.verbose.1747279976" name="Verbose (-v)" superClass="gnu.c.compiler.option.misc.verbose" useByScannerDiscovery="false" value="false" valueType="boolean"/> + + <option id="gnu.c.compiler.option.misc.other.1771169870" name="Other flags" superClass="gnu.c.compiler.option.misc.other" useByScannerDiscovery="false" value="-c -std=gnu99 -mcpu=cortex-m3 -mthumb -ffunction-sections -fdata-sections -nostdlib -Wdouble-promotion -fsingle-precision-constant "-Wa,-ahl=$*.s"" valueType="string"/> + + <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.compiler.option.include.paths.425316569" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath"> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/cores/arduino}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Storage}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/utils}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/drivers}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/cmsis/sam3x/include}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/header_files}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/preprocessor}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/thirdparty/CMSIS/Include}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/variants/RADDS}""/> + + </option> + + <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.compiler.option.preprocessor.def.symbols.2017188375" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" useByScannerDiscovery="false" valueType="definedSymbols"> + + <listOptionValue builtIn="false" value="__SAM3X8E__"/> + + <listOptionValue builtIn="false" value="__RADDS__"/> + + </option> + + <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.110609707" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/> + + </tool> + + <tool id="cdt.managedbuild.tool.gnu.cross.c.linker.1692168928" name="Cross GCC Linker" superClass="cdt.managedbuild.tool.gnu.cross.c.linker"/> + + <tool id="cdt.managedbuild.tool.gnu.cross.archiver.1755453550" name="Cross GCC Archiver" superClass="cdt.managedbuild.tool.gnu.cross.archiver"/> + + <tool command="gcc" commandLinePattern="${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${LinkFlags1} "${workspace_loc:/${CoreName}/RADDS/cores/arduino/syscalls.o}" ${INPUTS} ${LinkFlags2}" id="cdt.managedbuild.tool.gnu.cross.cpp.linker.1176271302" name="Cross G++ Linker" superClass="cdt.managedbuild.tool.gnu.cross.cpp.linker"> + + <option id="gnu.cpp.link.option.nostdlibs.706270025" name="No startup or default libs (-nostdlib)" superClass="gnu.cpp.link.option.nostdlibs" useByScannerDiscovery="false" value="false" valueType="boolean"/> + + <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.cpp.link.option.paths.1160723414" name="Library search path (-L)" superClass="gnu.cpp.link.option.paths" useByScannerDiscovery="false" valueType="libPaths"> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/RADDS/}""/> + + </option> + + <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.cpp.link.option.libs.1006761104" name="Libraries (-l)" superClass="gnu.cpp.link.option.libs" useByScannerDiscovery="false" valueType="libs"> + + <listOptionValue builtIn="false" value="${CoreName}"/> + + </option> + + <option id="gnu.cpp.link.option.flags.827167716" name="Linker flags" superClass="gnu.cpp.link.option.flags" useByScannerDiscovery="false" value="-Os -Wl,--gc-sections -Wl,--fatal-warnings -mcpu=cortex-m3 -T${workspace_loc:/${CoreName}/variants/RADDS/linker_scripts/gcc/flash.ld} -Wl,-Map,${workspace_loc:/${ProjName}/${ConfigName}}/${BuildArtifactFileBaseName}.map" valueType="string"/> + + <inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.99895855" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input"> + + <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/> + + <additionalInput kind="additionalinput" paths="$(LIBS)"/> + + </inputType> + + </tool> + + <tool command="g++" id="cdt.managedbuild.tool.gnu.cross.cpp.compiler.2077096750" name="Cross G++ Compiler" superClass="cdt.managedbuild.tool.gnu.cross.cpp.compiler"> + + <option id="gnu.cpp.compiler.option.optimization.level.25432549" name="Optimization Level" superClass="gnu.cpp.compiler.option.optimization.level" useByScannerDiscovery="false" value="gnu.cpp.compiler.optimization.level.more" valueType="enumerated"/> + + <option id="gnu.cpp.compiler.option.debugging.level.1920128035" name="Debug Level" superClass="gnu.cpp.compiler.option.debugging.level" useByScannerDiscovery="false" value="gnu.cpp.compiler.debugging.level.none" valueType="enumerated"/> + + <option id="gnu.cpp.compiler.option.other.verbose.1825237573" name="Verbose (-v)" superClass="gnu.cpp.compiler.option.other.verbose" useByScannerDiscovery="false" value="false" valueType="boolean"/> + + <option id="gnu.cpp.compiler.option.other.other.165959132" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" useByScannerDiscovery="false" value="-c -std=gnu++14 -mcpu=cortex-m3 -mthumb -ffunction-sections -fdata-sections -fno-threadsafe-statics -fno-rtti -fno-exceptions -nostdlib -Wdouble-promotion -fsingle-precision-constant "-Wa,-ahl=$*.s"" valueType="string"/> + + <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.cpp.compiler.option.include.paths.603435221" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath"> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/cores/arduino}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Flash}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/SharedSpi}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Storage}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Wire}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/utils}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/services/clock}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/drivers}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/services/flash_efc}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/cmsis/sam3x/include}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/header_files}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/preprocessor}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/thirdparty/CMSIS/Include}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/variants/RADDS}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/RADDS}""/> + + </option> + + <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.cpp.compiler.option.preprocessor.def.1179781669" name="Defined symbols (-D)" superClass="gnu.cpp.compiler.option.preprocessor.def" useByScannerDiscovery="false" valueType="definedSymbols"> + + <listOptionValue builtIn="false" value="__SAM3X8E__"/> + + <listOptionValue builtIn="false" value="__RADDS__"/> + + <listOptionValue builtIn="false" value="_XOPEN_SOURCE"/> + + </option> + + <inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1578939493" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/> + + </tool> + + </toolChain> + + </folderInfo> + + <sourceEntries> + + <entry excluding="src/Pccb|src/Alligator|src/SAME70_TEST|src/Display|src/Duet|src/Networking|src/DuetNG|src/DuetM" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/> + + </sourceEntries> + + </configuration> + + </storageModule> + + <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/> + + </cconfiguration> + + <cconfiguration id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.1745168887"> + + <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.1745168887" moduleId="org.eclipse.cdt.core.settings" name="Alligator"> + + <macros> + + <stringMacro name="LinkFlags2" type="VALUE_TEXT" value="-Wl,--end-group -lm"/> + + <stringMacro name="LinkFlags1" type="VALUE_TEXT" value="-mthumb -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--entry=Reset_Handler -Wl,--unresolved-symbols=report-all -Wl,--warn-common -Wl,--warn-section-align -Wl,--warn-unresolved-symbols -Wl,--start-group"/> + + <stringMacro name="CoreName" type="VALUE_TEXT" value="CoreNG"/> + + <stringMacro name="GccPath" type="VALUE_TEXT" value="/home/christian/duet/gcc-arm-none-eabi-7-2018-q2-update/bin"/> + + </macros> + + <externalSettings/> + + <extensions> + + <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/> + + <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 artifactExtension="elf" artifactName="${ProjName}-Alligator" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.1745168887" name="Alligator" optionalBuildProperties="org.eclipse.cdt.docker.launcher.containerbuild.property.selectedvolumes=,org.eclipse.cdt.docker.launcher.containerbuild.property.volumes=" parent="cdt.managedbuild.config.gnu.cross.exe.release" postannouncebuildStep="Generating binary file" postbuildStep="arm-none-eabi-objcopy -O binary ${workspace_loc:/${ProjName}/${ConfigName}}/${BuildArtifactFileBaseName}.elf ${workspace_loc:/${ProjName}/${ConfigName}}/${BuildArtifactFileBaseName}.bin"> + + <folderInfo id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.1745168887." name="/" resourcePath=""> + + <toolChain id="cdt.managedbuild.toolchain.gnu.cross.exe.release.623324432" name="Cross GCC" superClass="cdt.managedbuild.toolchain.gnu.cross.exe.release"> + + <option id="cdt.managedbuild.option.gnu.cross.path.645044151" name="Path" superClass="cdt.managedbuild.option.gnu.cross.path" useByScannerDiscovery="false" value="${GccPath}" valueType="string"/> + + <option id="cdt.managedbuild.option.gnu.cross.prefix.629438941" name="Prefix" superClass="cdt.managedbuild.option.gnu.cross.prefix" useByScannerDiscovery="false" value="arm-none-eabi-" valueType="string"/> + + <targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="cdt.managedbuild.targetPlatform.gnu.cross.878309876" isAbstract="false" osList="all" superClass="cdt.managedbuild.targetPlatform.gnu.cross"/> + + <builder buildPath="${workspace_loc:/RepRapFirmware}/Release" id="cdt.managedbuild.builder.gnu.cross.56178753" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="cdt.managedbuild.builder.gnu.cross"/> + + <tool id="cdt.managedbuild.tool.gnu.cross.assembler.384615201" name="Cross GCC Assembler" superClass="cdt.managedbuild.tool.gnu.cross.assembler"> + + <inputType id="cdt.managedbuild.tool.gnu.assembler.input.1769413014" superClass="cdt.managedbuild.tool.gnu.assembler.input"/> + + </tool> + + <tool commandLinePattern="${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}" id="cdt.managedbuild.tool.gnu.cross.c.compiler.429394189" name="Cross GCC Compiler" superClass="cdt.managedbuild.tool.gnu.cross.c.compiler"> + + <option defaultValue="gnu.c.optimization.level.most" id="gnu.c.compiler.option.optimization.level.1940178744" name="Optimization Level" superClass="gnu.c.compiler.option.optimization.level" useByScannerDiscovery="false" value="gnu.c.optimization.level.more" valueType="enumerated"/> + + <option id="gnu.c.compiler.option.debugging.level.1345702698" name="Debug Level" superClass="gnu.c.compiler.option.debugging.level" useByScannerDiscovery="false" value="gnu.c.debugging.level.none" valueType="enumerated"/> + + <option id="gnu.c.compiler.option.misc.verbose.1965295612" name="Verbose (-v)" superClass="gnu.c.compiler.option.misc.verbose" useByScannerDiscovery="false" value="false" valueType="boolean"/> + + <option id="gnu.c.compiler.option.misc.other.2089676962" name="Other flags" superClass="gnu.c.compiler.option.misc.other" useByScannerDiscovery="false" value="-c -std=gnu99 -mcpu=cortex-m3 -mthumb -ffunction-sections -fdata-sections -nostdlib -Wdouble-promotion -fsingle-precision-constant "-Wa,-ahl=$*.s"" valueType="string"/> + + <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.compiler.option.include.paths.1071791609" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath"> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/cores/arduino}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Storage}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/utils}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/drivers}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/cmsis/sam3x/include}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/header_files}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/preprocessor}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/thirdparty/CMSIS/Include}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/variants/alligator}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Duet/Lwip}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Duet/Lwip/lwip/src/include}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Duet/EMAC}""/> + + </option> + + <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.compiler.option.preprocessor.def.symbols.680004295" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" useByScannerDiscovery="false" valueType="definedSymbols"> + + <listOptionValue builtIn="false" value="__SAM3X8E__"/> + + <listOptionValue builtIn="false" value="__ALLIGATOR__"/> + + </option> + + <option id="gnu.c.compiler.option.dialect.std.1020546177" name="Language standard" superClass="gnu.c.compiler.option.dialect.std" useByScannerDiscovery="true" value="gnu.c.compiler.dialect.default" valueType="enumerated"/> + + <option id="gnu.c.compiler.option.include.files.1091766282" name="Include files (-include)" superClass="gnu.c.compiler.option.include.files" useByScannerDiscovery="false"/> + + <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1737201945" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/> + + </tool> + + <tool id="cdt.managedbuild.tool.gnu.cross.c.linker.1510685625" name="Cross GCC Linker" superClass="cdt.managedbuild.tool.gnu.cross.c.linker"/> + + <tool id="cdt.managedbuild.tool.gnu.cross.archiver.2031955379" name="Cross GCC Archiver" superClass="cdt.managedbuild.tool.gnu.cross.archiver"/> + + <tool command="gcc" commandLinePattern="${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${LinkFlags1} "${workspace_loc:/${CoreName}/Alligator/cores/arduino/syscalls.o}" ${INPUTS} ${LinkFlags2}" id="cdt.managedbuild.tool.gnu.cross.cpp.linker.1616069436" name="Cross G++ Linker" superClass="cdt.managedbuild.tool.gnu.cross.cpp.linker"> + + <option id="gnu.cpp.link.option.nostdlibs.760089516" name="No startup or default libs (-nostdlib)" superClass="gnu.cpp.link.option.nostdlibs" useByScannerDiscovery="false" value="false" valueType="boolean"/> + + <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.cpp.link.option.paths.1593340130" name="Library search path (-L)" superClass="gnu.cpp.link.option.paths" useByScannerDiscovery="false" valueType="libPaths"> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/Alligator/}""/> + + </option> + + <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.cpp.link.option.libs.1260510068" name="Libraries (-l)" superClass="gnu.cpp.link.option.libs" useByScannerDiscovery="false" valueType="libs"> + + <listOptionValue builtIn="false" value="${CoreName}"/> + + </option> + + <option id="gnu.cpp.link.option.flags.1376831701" name="Linker flags" superClass="gnu.cpp.link.option.flags" useByScannerDiscovery="false" value="-Os -Wl,--gc-sections -Wl,--fatal-warnings -mcpu=cortex-m3 -T${workspace_loc:/${CoreName}/variants/alligator/linker_scripts/gcc/flash.ld} -Wl,-Map,${workspace_loc:/${ProjName}/${ConfigName}}/${BuildArtifactFileBaseName}.map" valueType="string"/> + + <inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.1951368129" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input"> + + <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/> + + <additionalInput kind="additionalinput" paths="$(LIBS)"/> + + </inputType> + + </tool> + + <tool command="g++" id="cdt.managedbuild.tool.gnu.cross.cpp.compiler.1533537470" name="Cross G++ Compiler" superClass="cdt.managedbuild.tool.gnu.cross.cpp.compiler"> + + <option id="gnu.cpp.compiler.option.optimization.level.1431609218" name="Optimization Level" superClass="gnu.cpp.compiler.option.optimization.level" useByScannerDiscovery="false" value="gnu.cpp.compiler.optimization.level.more" valueType="enumerated"/> + + <option id="gnu.cpp.compiler.option.debugging.level.1167774913" name="Debug Level" superClass="gnu.cpp.compiler.option.debugging.level" useByScannerDiscovery="false" value="gnu.cpp.compiler.debugging.level.none" valueType="enumerated"/> + + <option id="gnu.cpp.compiler.option.other.verbose.68487747" name="Verbose (-v)" superClass="gnu.cpp.compiler.option.other.verbose" useByScannerDiscovery="false" value="false" valueType="boolean"/> + + <option id="gnu.cpp.compiler.option.other.other.1532821901" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" useByScannerDiscovery="false" value="-c -std=gnu++14 -mcpu=cortex-m3 -mthumb -ffunction-sections -fdata-sections -fno-threadsafe-statics -fno-rtti -fno-exceptions -nostdlib -Wdouble-promotion -fsingle-precision-constant "-Wa,-ahl=$*.s"" valueType="string"/> + + <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.cpp.compiler.option.include.paths.1825159078" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath"> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/cores/arduino}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Flash}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/SharedSpi}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Storage}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Wire}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/utils}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/services/clock}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/drivers}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/services/flash_efc}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/cmsis/sam3x/include}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/header_files}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/preprocessor}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/thirdparty/CMSIS/Include}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/variants/alligator}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Alligator}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Duet}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Duet/Lwip}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Duet/EMAC}""/> + + </option> + + <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.cpp.compiler.option.preprocessor.def.890621467" name="Defined symbols (-D)" superClass="gnu.cpp.compiler.option.preprocessor.def" useByScannerDiscovery="false" valueType="definedSymbols"> + + <listOptionValue builtIn="false" value="__SAM3X8E__"/> + + <listOptionValue builtIn="false" value="__ALLIGATOR__"/> + + <listOptionValue builtIn="false" value="_XOPEN_SOURCE"/> + + </option> + + <option id="gnu.cpp.compiler.option.preprocessor.undef.913409309" name="Undefined symbols (-U)" superClass="gnu.cpp.compiler.option.preprocessor.undef" useByScannerDiscovery="false"/> + + <option id="gnu.cpp.compiler.option.dialect.std.603621474" name="Language standard" superClass="gnu.cpp.compiler.option.dialect.std" useByScannerDiscovery="true" value="gnu.cpp.compiler.dialect.default" valueType="enumerated"/> + + <option id="gnu.cpp.compiler.option.include.files.1575937801" name="Include files (-include)" superClass="gnu.cpp.compiler.option.include.files" useByScannerDiscovery="false"/> + + <inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.667323948" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/> + + </tool> + + </toolChain> + + </folderInfo> + + <sourceEntries> + + <entry excluding="src/Pccb|src/Duet/Lwip/lwip/src/core/ipv6|src/Duet/Lwip/lwip/test|src/SAME70_TEST|src/Display|src/Networking|src/DuetNG|src/Alligator/Lwip/lwip/src/include/ipv6|src/Alligator/Lwip/lwip/test|src/DuetM|src/Duet/MCP4461|src/Alligator/Lwip/lwip/src/core/ipv6|src/RADDS" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/> + + </sourceEntries> + + </configuration> + + </storageModule> + + <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/> + + </cconfiguration> + + <cconfiguration id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.241502451.170574622"> + + <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.241502451.170574622" moduleId="org.eclipse.cdt.core.settings" name="Duet2_RTOS"> + + <macros> + + <stringMacro name="LinkFlags2" type="VALUE_TEXT" value="-Wl,--end-group -lm"/> + + <stringMacro name="LinkFlags1" type="VALUE_TEXT" value="-mthumb -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--entry=Reset_Handler -Wl,--unresolved-symbols=report-all -Wl,--warn-common -Wl,--warn-section-align -Wl,--warn-unresolved-symbols -Wl,--start-group"/> + + <stringMacro name="CoreName" type="VALUE_TEXT" value="CoreNG"/> + + <stringMacro name="GccPath" type="VALUE_TEXT" value="/home/christian/duet/gcc-arm-none-eabi-7-2018-q2-update/bin"/> + + </macros> + + <externalSettings/> + + <extensions> + + <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/> + + <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 artifactExtension="elf" artifactName="Duet2CombinedFirmware" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.241502451.170574622" name="Duet2_RTOS" optionalBuildProperties="" parent="cdt.managedbuild.config.gnu.cross.exe.release" postannouncebuildStep="Generating binary file" postbuildStep="arm-none-eabi-objcopy -O binary ${workspace_loc:/${ProjName}/${ConfigName}}/${BuildArtifactFileBaseName}.elf ${workspace_loc:/${ProjName}/${ConfigName}}/${BuildArtifactFileBaseName}.bin"> + + <folderInfo id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.241502451.170574622." name="/" resourcePath=""> + + <toolChain id="cdt.managedbuild.toolchain.gnu.cross.exe.release.435431950" name="Cross GCC" superClass="cdt.managedbuild.toolchain.gnu.cross.exe.release"> + + <option id="cdt.managedbuild.option.gnu.cross.path.1881231799" name="Path" superClass="cdt.managedbuild.option.gnu.cross.path" useByScannerDiscovery="false" value="${GccPath}" valueType="string"/> + + <option id="cdt.managedbuild.option.gnu.cross.prefix.172065168" name="Prefix" superClass="cdt.managedbuild.option.gnu.cross.prefix" useByScannerDiscovery="false" value="arm-none-eabi-" valueType="string"/> + + <targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="cdt.managedbuild.targetPlatform.gnu.cross.1838379384" isAbstract="false" osList="all" superClass="cdt.managedbuild.targetPlatform.gnu.cross"/> + + <builder buildPath="${workspace_loc:/RepRapFirmware}/Release" id="cdt.managedbuild.builder.gnu.cross.591414239" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="cdt.managedbuild.builder.gnu.cross"/> + + <tool id="cdt.managedbuild.tool.gnu.cross.assembler.1539163958" name="Cross GCC Assembler" superClass="cdt.managedbuild.tool.gnu.cross.assembler"> + + <inputType id="cdt.managedbuild.tool.gnu.assembler.input.1036697395" superClass="cdt.managedbuild.tool.gnu.assembler.input"/> + + </tool> + + <tool commandLinePattern="${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}" id="cdt.managedbuild.tool.gnu.cross.c.compiler.463703707" name="Cross GCC Compiler" superClass="cdt.managedbuild.tool.gnu.cross.c.compiler"> + + <option defaultValue="gnu.c.optimization.level.most" id="gnu.c.compiler.option.optimization.level.456685708" name="Optimization Level" superClass="gnu.c.compiler.option.optimization.level" useByScannerDiscovery="false" value="gnu.c.optimization.level.more" valueType="enumerated"/> + + <option id="gnu.c.compiler.option.debugging.level.1579494397" name="Debug Level" superClass="gnu.c.compiler.option.debugging.level" useByScannerDiscovery="false" value="gnu.c.debugging.level.none" valueType="enumerated"/> + + <option id="gnu.c.compiler.option.misc.verbose.328543251" name="Verbose (-v)" superClass="gnu.c.compiler.option.misc.verbose" useByScannerDiscovery="false" value="false" valueType="boolean"/> + + <option id="gnu.c.compiler.option.misc.other.465279131" name="Other flags" superClass="gnu.c.compiler.option.misc.other" useByScannerDiscovery="false" value="-c -std=gnu99 -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections -nostdlib -Wdouble-promotion -fsingle-precision-constant "-Wa,-ahl=$*.s"" valueType="string"/> + + <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.compiler.option.include.paths.288982451" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath"> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/cores/arduino}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Storage}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/utils}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/services/ioport}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/drivers}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/cmsis/sam4e/include}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/header_files}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/preprocessor}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/thirdparty/CMSIS/Include}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/variants/duetNG}""/> + + </option> + + <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.compiler.option.preprocessor.def.symbols.1227675538" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" useByScannerDiscovery="false" valueType="definedSymbols"> + + <listOptionValue builtIn="false" value="__SAM4E8E__"/> + + <listOptionValue builtIn="false" value="RTOS"/> + + <listOptionValue builtIn="false" value="DUET_NG"/> + + </option> + + <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1065384487" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/> + + </tool> + + <tool id="cdt.managedbuild.tool.gnu.cross.c.linker.1102044150" name="Cross GCC Linker" superClass="cdt.managedbuild.tool.gnu.cross.c.linker"/> + + <tool id="cdt.managedbuild.tool.gnu.cross.archiver.1402882499" name="Cross GCC Archiver" superClass="cdt.managedbuild.tool.gnu.cross.archiver"/> + + <tool command="gcc" commandLinePattern="${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${LinkFlags1} "${workspace_loc:/${CoreName}/SAM4E8E_RTOS/cores/arduino/syscalls.o}" ${INPUTS} ${LinkFlags2}" id="cdt.managedbuild.tool.gnu.cross.cpp.linker.1768134875" name="Cross G++ Linker" superClass="cdt.managedbuild.tool.gnu.cross.cpp.linker"> + + <option id="gnu.cpp.link.option.nostdlibs.399544265" name="No startup or default libs (-nostdlib)" superClass="gnu.cpp.link.option.nostdlibs" useByScannerDiscovery="false" value="false" valueType="boolean"/> + + <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.cpp.link.option.paths.605414111" name="Library search path (-L)" superClass="gnu.cpp.link.option.paths" useByScannerDiscovery="false" valueType="libPaths"> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/SAM4E8E_RTOS/}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/FreeRTOS/SAM4E}""/> + + </option> + + <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.cpp.link.option.libs.847860449" name="Libraries (-l)" superClass="gnu.cpp.link.option.libs" useByScannerDiscovery="false" valueType="libs"> + + <listOptionValue builtIn="false" value="${CoreName}"/> + + <listOptionValue builtIn="false" value="FreeRTOS"/> + + </option> + + <option id="gnu.cpp.link.option.flags.161856294" name="Linker flags" superClass="gnu.cpp.link.option.flags" useByScannerDiscovery="false" value="-Os --specs=nano.specs -Wl,--gc-sections -Wl,--fatal-warnings -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -T${workspace_loc:/${CoreName}/variants/duetNG/linker_scripts/gcc/flash.ld} -Wl,-Map,${workspace_loc:/${ProjName}/${ConfigName}}/${BuildArtifactFileBaseName}.map" valueType="string"/> + + <inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.1270956612" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input"> + + <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/> + + <additionalInput kind="additionalinput" paths="$(LIBS)"/> + + </inputType> + + </tool> + + <tool command="g++" id="cdt.managedbuild.tool.gnu.cross.cpp.compiler.1697970502" name="Cross G++ Compiler" superClass="cdt.managedbuild.tool.gnu.cross.cpp.compiler"> + + <option id="gnu.cpp.compiler.option.optimization.level.1835678360" name="Optimization Level" superClass="gnu.cpp.compiler.option.optimization.level" useByScannerDiscovery="false" value="gnu.cpp.compiler.optimization.level.more" valueType="enumerated"/> + + <option id="gnu.cpp.compiler.option.debugging.level.737051102" name="Debug Level" superClass="gnu.cpp.compiler.option.debugging.level" useByScannerDiscovery="false" value="gnu.cpp.compiler.debugging.level.none" valueType="enumerated"/> + + <option id="gnu.cpp.compiler.option.other.verbose.1225557122" name="Verbose (-v)" superClass="gnu.cpp.compiler.option.other.verbose" useByScannerDiscovery="false" value="false" valueType="boolean"/> + + <option id="gnu.cpp.compiler.option.other.other.1423466590" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" useByScannerDiscovery="false" value="-c -std=gnu++14 -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections -fno-threadsafe-statics -fno-rtti -fno-exceptions -nostdlib -Wdouble-promotion -fsingle-precision-constant "-Wa,-ahl=$*.s"" valueType="string"/> + + <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.cpp.compiler.option.include.paths.1505018967" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath"> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/cores/arduino}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Flash}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/SharedSpi}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Storage}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Wire}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/utils}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/services/clock}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/services/ioport}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/drivers}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/services/flash_efc}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/cmsis/sam4e/include}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/header_files}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/preprocessor}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/thirdparty/CMSIS/Include}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/variants/duetNG}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/DuetNG}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Networking}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/DuetWiFiSocketServer/src/include}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/FreeRTOS/src/include}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/FreeRTOS/src/portable/GCC/ARM_CM4F}""/> + + </option> + + <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.cpp.compiler.option.preprocessor.def.1443248224" name="Defined symbols (-D)" superClass="gnu.cpp.compiler.option.preprocessor.def" useByScannerDiscovery="false" valueType="definedSymbols"> + + <listOptionValue builtIn="false" value="__SAM4E8E__"/> + + <listOptionValue builtIn="false" value="RTOS"/> + + <listOptionValue builtIn="false" value="DUET_NG"/> + + <listOptionValue builtIn="false" value="_XOPEN_SOURCE"/> + + </option> + + <inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.65828751" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/> + + </tool> + + </toolChain> + + </folderInfo> + + <sourceEntries> + + <entry excluding="src/Pccb|src/Alligator|src/SAME70_TEST|src/Display|src/Duet|src/Networking/LwipEthernet|src/DuetM|src/RADDS" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/> + + </sourceEntries> + + </configuration> + + </storageModule> + + <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/> + + </cconfiguration> + + <cconfiguration id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.241502451.170574622.649587786"> + + <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.241502451.170574622.649587786" moduleId="org.eclipse.cdt.core.settings" name="DuetM_RTOS"> + + <macros> + + <stringMacro name="LinkFlags2" type="VALUE_TEXT" value="-Wl,--end-group -lm"/> + + <stringMacro name="LinkFlags1" type="VALUE_TEXT" value="-mthumb -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--entry=Reset_Handler -Wl,--unresolved-symbols=report-all -Wl,--warn-common -Wl,--warn-section-align -Wl,--warn-unresolved-symbols -Wl,--start-group"/> + + <stringMacro name="CoreName" type="VALUE_TEXT" value="CoreNG"/> + + <stringMacro name="GccPath" type="VALUE_TEXT" value="/home/christian/duet/gcc-arm-none-eabi-7-2018-q2-update/bin"/> + + </macros> + + <externalSettings/> + + <extensions> + + <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/> + + <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 artifactExtension="elf" artifactName="DuetMaestroFirmware" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.241502451.170574622.649587786" name="DuetM_RTOS" optionalBuildProperties="" parent="cdt.managedbuild.config.gnu.cross.exe.release" postannouncebuildStep="Generating binary file" postbuildStep="arm-none-eabi-objcopy -O binary ${workspace_loc:/${ProjName}/${ConfigName}}/${BuildArtifactFileBaseName}.elf ${workspace_loc:/${ProjName}/${ConfigName}}/${BuildArtifactFileBaseName}.bin"> + + <folderInfo id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.241502451.170574622.649587786." name="/" resourcePath=""> + + <toolChain id="cdt.managedbuild.toolchain.gnu.cross.exe.release.1494327638" name="Cross GCC" superClass="cdt.managedbuild.toolchain.gnu.cross.exe.release"> + + <option id="cdt.managedbuild.option.gnu.cross.path.1101985181" name="Path" superClass="cdt.managedbuild.option.gnu.cross.path" useByScannerDiscovery="false" value="${GccPath}" valueType="string"/> + + <option id="cdt.managedbuild.option.gnu.cross.prefix.455634880" name="Prefix" superClass="cdt.managedbuild.option.gnu.cross.prefix" useByScannerDiscovery="false" value="arm-none-eabi-" valueType="string"/> + + <targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="cdt.managedbuild.targetPlatform.gnu.cross.1648156947" isAbstract="false" osList="all" superClass="cdt.managedbuild.targetPlatform.gnu.cross"/> + + <builder buildPath="${workspace_loc:/RepRapFirmware}/Release" id="cdt.managedbuild.builder.gnu.cross.1787405692" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="cdt.managedbuild.builder.gnu.cross"/> + + <tool id="cdt.managedbuild.tool.gnu.cross.assembler.1187253546" name="Cross GCC Assembler" superClass="cdt.managedbuild.tool.gnu.cross.assembler"> + + <inputType id="cdt.managedbuild.tool.gnu.assembler.input.456980885" superClass="cdt.managedbuild.tool.gnu.assembler.input"/> + + </tool> + + <tool commandLinePattern="${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}" id="cdt.managedbuild.tool.gnu.cross.c.compiler.1037043643" name="Cross GCC Compiler" superClass="cdt.managedbuild.tool.gnu.cross.c.compiler"> + + <option defaultValue="gnu.c.optimization.level.most" id="gnu.c.compiler.option.optimization.level.293020747" name="Optimization Level" superClass="gnu.c.compiler.option.optimization.level" useByScannerDiscovery="false" value="gnu.c.optimization.level.more" valueType="enumerated"/> + + <option id="gnu.c.compiler.option.debugging.level.1647722987" name="Debug Level" superClass="gnu.c.compiler.option.debugging.level" useByScannerDiscovery="false" value="gnu.c.debugging.level.none" valueType="enumerated"/> + + <option id="gnu.c.compiler.option.misc.verbose.412653021" name="Verbose (-v)" superClass="gnu.c.compiler.option.misc.verbose" useByScannerDiscovery="false" value="false" valueType="boolean"/> + + <option id="gnu.c.compiler.option.misc.other.1084863157" name="Other flags" superClass="gnu.c.compiler.option.misc.other" useByScannerDiscovery="false" value="-c -std=gnu99 -mcpu=cortex-m4 -mthumb -ffunction-sections -fdata-sections -nostdlib -Wdouble-promotion -fsingle-precision-constant "-Wa,-ahl=$*.s"" valueType="string"/> + + <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.compiler.option.include.paths.275997920" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath"> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/cores/arduino}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Storage}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/utils}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/services/ioport}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/drivers}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/cmsis/sam4s/include}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/header_files}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/preprocessor}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/thirdparty/CMSIS/Include}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/variants/sam4s}""/> + + </option> + + <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.compiler.option.preprocessor.def.symbols.833298868" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" useByScannerDiscovery="false" valueType="definedSymbols"> + + <listOptionValue builtIn="false" value="__SAM4S8C__"/> + + <listOptionValue builtIn="false" value="RTOS"/> + + <listOptionValue builtIn="false" value="DUET_M"/> + + </option> + + <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.667707888" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/> + + </tool> + + <tool id="cdt.managedbuild.tool.gnu.cross.c.linker.411798791" name="Cross GCC Linker" superClass="cdt.managedbuild.tool.gnu.cross.c.linker"/> + + <tool id="cdt.managedbuild.tool.gnu.cross.archiver.2116733751" name="Cross GCC Archiver" superClass="cdt.managedbuild.tool.gnu.cross.archiver"/> + + <tool command="gcc" commandLinePattern="${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${LinkFlags1} "${workspace_loc:/${CoreName}/SAM4S_RTOS/cores/arduino/syscalls.o}" ${INPUTS} ${LinkFlags2}" id="cdt.managedbuild.tool.gnu.cross.cpp.linker.1011842834" name="Cross G++ Linker" superClass="cdt.managedbuild.tool.gnu.cross.cpp.linker"> + + <option id="gnu.cpp.link.option.nostdlibs.91014132" name="No startup or default libs (-nostdlib)" superClass="gnu.cpp.link.option.nostdlibs" useByScannerDiscovery="false" value="false" valueType="boolean"/> + + <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.cpp.link.option.paths.2085138159" name="Library search path (-L)" superClass="gnu.cpp.link.option.paths" useByScannerDiscovery="false" valueType="libPaths"> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/SAM4S_RTOS/}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/FreeRTOS/SAM4S}""/> + + </option> + + <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.cpp.link.option.libs.214117190" name="Libraries (-l)" superClass="gnu.cpp.link.option.libs" useByScannerDiscovery="false" valueType="libs"> + + <listOptionValue builtIn="false" value="${CoreName}"/> + + <listOptionValue builtIn="false" value="FreeRTOS"/> + + </option> + + <option id="gnu.cpp.link.option.flags.1077151865" name="Linker flags" superClass="gnu.cpp.link.option.flags" useByScannerDiscovery="false" value="-Os --specs=nano.specs -Wl,--gc-sections -Wl,--fatal-warnings -mcpu=cortex-m4 -T${workspace_loc:/${CoreName}/variants/sam4s/linker_scripts/gcc/flash.ld} -Wl,-Map,${workspace_loc:/${ProjName}/${ConfigName}}/${BuildArtifactFileBaseName}.map" valueType="string"/> + + <inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.480654714" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input"> + + <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/> + + <additionalInput kind="additionalinput" paths="$(LIBS)"/> + + </inputType> + + </tool> + + <tool command="g++" id="cdt.managedbuild.tool.gnu.cross.cpp.compiler.1849650984" name="Cross G++ Compiler" superClass="cdt.managedbuild.tool.gnu.cross.cpp.compiler"> + + <option id="gnu.cpp.compiler.option.optimization.level.1017091230" name="Optimization Level" superClass="gnu.cpp.compiler.option.optimization.level" useByScannerDiscovery="false" value="gnu.cpp.compiler.optimization.level.more" valueType="enumerated"/> + + <option id="gnu.cpp.compiler.option.debugging.level.326047343" name="Debug Level" superClass="gnu.cpp.compiler.option.debugging.level" useByScannerDiscovery="false" value="gnu.cpp.compiler.debugging.level.none" valueType="enumerated"/> + + <option id="gnu.cpp.compiler.option.other.verbose.1316817271" name="Verbose (-v)" superClass="gnu.cpp.compiler.option.other.verbose" useByScannerDiscovery="false" value="false" valueType="boolean"/> + + <option id="gnu.cpp.compiler.option.other.other.434744183" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" useByScannerDiscovery="false" value="-c -std=gnu++14 -mcpu=cortex-m4 -mthumb -ffunction-sections -fdata-sections -fno-threadsafe-statics -fno-rtti -fno-exceptions -nostdlib -Wdouble-promotion -fsingle-precision-constant "-Wa,-ahl=$*.s"" valueType="string"/> + + <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.cpp.compiler.option.include.paths.1102345734" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath"> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/cores/arduino}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Flash}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/SharedSpi}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Storage}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Wire}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/utils}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/services/clock}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/services/ioport}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/drivers}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/services/flash_efc}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/cmsis/sam4s/include}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/header_files}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/preprocessor}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/thirdparty/CMSIS/Include}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/variants/sam4s}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/DuetM}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Networking}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/DuetWiFiSocketServer/src/include}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/FreeRTOS/src/include}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/FreeRTOS/src/portable/GCC/ARM_CM3}""/> + + </option> + + <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.cpp.compiler.option.preprocessor.def.1832014133" name="Defined symbols (-D)" superClass="gnu.cpp.compiler.option.preprocessor.def" useByScannerDiscovery="false" valueType="definedSymbols"> + + <listOptionValue builtIn="false" value="__SAM4S8C__"/> + + <listOptionValue builtIn="false" value="RTOS"/> + + <listOptionValue builtIn="false" value="DUET_M"/> + + <listOptionValue builtIn="false" value="_XOPEN_SOURCE"/> + + </option> + + <inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1979789995" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/> + + </tool> + + </toolChain> + + </folderInfo> + + <sourceEntries> + + <entry excluding="src/Pccb|src/Alligator|src/SAME70_TEST|src/Duet|src/Networking/ESP8266WiFi|src/Networking/LwipEthernet|src/DuetNG|src/RADDS" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/> + + </sourceEntries> + + </configuration> + + </storageModule> + + <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/> + + </cconfiguration> + + <cconfiguration id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.241502451.1275216290.274082366.1645191116.1852610203"> + + <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.241502451.1275216290.274082366.1645191116.1852610203" moduleId="org.eclipse.cdt.core.settings" name="SAME70_RTOS"> + + <macros> + + <stringMacro name="LinkFlags2" type="VALUE_TEXT" value="-Wl,--end-group -lm"/> + + <stringMacro name="LinkFlags1" type="VALUE_TEXT" value="-mthumb -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--entry=Reset_Handler -Wl,--unresolved-symbols=report-all -Wl,--warn-common -Wl,--warn-section-align -Wl,--warn-unresolved-symbols -Wl,--start-group"/> + + <stringMacro name="CoreName" type="VALUE_TEXT" value="CoreNG"/> + + <stringMacro name="GccPath" type="VALUE_TEXT" value="/home/christian/duet/gcc-arm-none-eabi-7-2018-q2-update/bin"/> + + </macros> + + <externalSettings/> + + <extensions> + + <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/> + + <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 artifactExtension="elf" artifactName="SAME70Firmware" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.241502451.1275216290.274082366.1645191116.1852610203" name="SAME70_RTOS" optionalBuildProperties="org.eclipse.cdt.docker.launcher.containerbuild.property.volumes=,org.eclipse.cdt.docker.launcher.containerbuild.property.selectedvolumes=" parent="cdt.managedbuild.config.gnu.cross.exe.release" postannouncebuildStep="Generating binary file" postbuildStep="arm-none-eabi-objcopy -O binary ${workspace_loc:/${ProjName}/${ConfigName}}/${BuildArtifactFileBaseName}.elf ${workspace_loc:/${ProjName}/${ConfigName}}/${BuildArtifactFileBaseName}.bin"> + + <folderInfo id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.241502451.1275216290.274082366.1645191116.1852610203." name="/" resourcePath=""> + + <toolChain id="cdt.managedbuild.toolchain.gnu.cross.exe.release.5959303" name="Cross GCC" superClass="cdt.managedbuild.toolchain.gnu.cross.exe.release"> + + <option id="cdt.managedbuild.option.gnu.cross.path.163568524" name="Path" superClass="cdt.managedbuild.option.gnu.cross.path" useByScannerDiscovery="false" value="${GccPath}" valueType="string"/> + + <option id="cdt.managedbuild.option.gnu.cross.prefix.308380201" name="Prefix" superClass="cdt.managedbuild.option.gnu.cross.prefix" useByScannerDiscovery="false" value="arm-none-eabi-" valueType="string"/> + + <targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="cdt.managedbuild.targetPlatform.gnu.cross.1827418537" isAbstract="false" osList="all" superClass="cdt.managedbuild.targetPlatform.gnu.cross"/> + + <builder buildPath="${workspace_loc:/RepRapFirmware}/Release" id="cdt.managedbuild.builder.gnu.cross.1828958094" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="cdt.managedbuild.builder.gnu.cross"/> + + <tool id="cdt.managedbuild.tool.gnu.cross.assembler.254554862" name="Cross GCC Assembler" superClass="cdt.managedbuild.tool.gnu.cross.assembler"> + + <inputType id="cdt.managedbuild.tool.gnu.assembler.input.1960931313" superClass="cdt.managedbuild.tool.gnu.assembler.input"/> + + </tool> + + <tool commandLinePattern="${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}" id="cdt.managedbuild.tool.gnu.cross.c.compiler.1113168108" name="Cross GCC Compiler" superClass="cdt.managedbuild.tool.gnu.cross.c.compiler"> + + <option defaultValue="gnu.c.optimization.level.most" id="gnu.c.compiler.option.optimization.level.1099089925" name="Optimization Level" superClass="gnu.c.compiler.option.optimization.level" useByScannerDiscovery="false" value="gnu.c.optimization.level.more" valueType="enumerated"/> + + <option id="gnu.c.compiler.option.debugging.level.2018591546" name="Debug Level" superClass="gnu.c.compiler.option.debugging.level" useByScannerDiscovery="false" value="gnu.c.debugging.level.default" valueType="enumerated"/> + + <option id="gnu.c.compiler.option.misc.verbose.1767118602" name="Verbose (-v)" superClass="gnu.c.compiler.option.misc.verbose" useByScannerDiscovery="false" value="false" valueType="boolean"/> + + <option id="gnu.c.compiler.option.misc.other.2139236731" name="Other flags" superClass="gnu.c.compiler.option.misc.other" useByScannerDiscovery="false" value="-c -std=gnu99 -mcpu=cortex-m7 -mthumb -mfpu=fpv5-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections -nostdlib -Wdouble-promotion -fsingle-precision-constant" valueType="string"/> + + <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.compiler.option.include.paths.1736169055" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath"> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/cores/arduino}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Storage}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/utils}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/services/clock}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/services/ioport}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/components/ethernet_phy/ksz8081rna}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/drivers/hsmci}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/drivers/gmac}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/drivers/pmc}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/drivers/rstc}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/drivers/rtc}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/cmsis/same70/include}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/header_files}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/preprocessor}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/thirdparty/CMSIS/Include}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/variants/same70}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/SAME70_TEST}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Networking/LwipEthernet}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Networking/LwipEthernet/Lwip/src/include}""/> + + </option> + + <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.compiler.option.preprocessor.def.symbols.316510289" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" useByScannerDiscovery="false" valueType="definedSymbols"> + + <listOptionValue builtIn="false" value="__SAME70Q21__"/> + + <listOptionValue builtIn="false" value="RTOS"/> + + <listOptionValue builtIn="false" value="SAME70_TEST_BOARD"/> + + </option> + + <option id="gnu.c.compiler.option.dialect.std.133148413" name="Language standard" superClass="gnu.c.compiler.option.dialect.std" useByScannerDiscovery="true" value="gnu.c.compiler.dialect.default" valueType="enumerated"/> + + <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.477491021" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/> + + </tool> + + <tool id="cdt.managedbuild.tool.gnu.cross.c.linker.1392905935" name="Cross GCC Linker" superClass="cdt.managedbuild.tool.gnu.cross.c.linker"/> + + <tool id="cdt.managedbuild.tool.gnu.cross.archiver.733829747" name="Cross GCC Archiver" superClass="cdt.managedbuild.tool.gnu.cross.archiver"/> + + <tool command="gcc" commandLinePattern="${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${LinkFlags1} "${workspace_loc:/${CoreName}/SAME70_RTOS/cores/arduino/syscalls.o}" ${INPUTS} ${LinkFlags2}" id="cdt.managedbuild.tool.gnu.cross.cpp.linker.1019421301" name="Cross G++ Linker" superClass="cdt.managedbuild.tool.gnu.cross.cpp.linker"> + + <option id="gnu.cpp.link.option.nostdlibs.1609488418" name="No startup or default libs (-nostdlib)" superClass="gnu.cpp.link.option.nostdlibs" useByScannerDiscovery="false" value="false" valueType="boolean"/> + + <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.cpp.link.option.paths.579521002" name="Library search path (-L)" superClass="gnu.cpp.link.option.paths" useByScannerDiscovery="false" valueType="libPaths"> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/SAME70_RTOS/}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/FreeRTOS/SAME70}""/> + + </option> + + <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.cpp.link.option.libs.1783235457" name="Libraries (-l)" superClass="gnu.cpp.link.option.libs" useByScannerDiscovery="false" valueType="libs"> + + <listOptionValue builtIn="false" value="${CoreName}"/> + + <listOptionValue builtIn="false" value="FreeRTOS"/> + + </option> + + <option id="gnu.cpp.link.option.flags.2100826215" name="Linker flags" superClass="gnu.cpp.link.option.flags" useByScannerDiscovery="false" value="-Os -Wl,--gc-sections -Wl,--fatal-warnings -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -T${workspace_loc:/${CoreName}/variants/same70/linker_scripts/gcc/flash.ld} -Wl,-Map,${workspace_loc:/${ProjName}/${ConfigName}}/${BuildArtifactFileBaseName}.map" valueType="string"/> + + <inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.1623645672" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input"> + + <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/> + + <additionalInput kind="additionalinput" paths="$(LIBS)"/> + + </inputType> + + </tool> + + <tool command="g++" id="cdt.managedbuild.tool.gnu.cross.cpp.compiler.1243015316" name="Cross G++ Compiler" superClass="cdt.managedbuild.tool.gnu.cross.cpp.compiler"> + + <option id="gnu.cpp.compiler.option.optimization.level.744605431" name="Optimization Level" superClass="gnu.cpp.compiler.option.optimization.level" useByScannerDiscovery="false" value="gnu.cpp.compiler.optimization.level.more" valueType="enumerated"/> + + <option id="gnu.cpp.compiler.option.debugging.level.1247470383" name="Debug Level" superClass="gnu.cpp.compiler.option.debugging.level" useByScannerDiscovery="false" value="gnu.cpp.compiler.debugging.level.default" valueType="enumerated"/> + + <option id="gnu.cpp.compiler.option.other.verbose.1130347909" name="Verbose (-v)" superClass="gnu.cpp.compiler.option.other.verbose" useByScannerDiscovery="false" value="false" valueType="boolean"/> + + <option id="gnu.cpp.compiler.option.other.other.1453375027" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" useByScannerDiscovery="false" value="-c -std=gnu++14 -mcpu=cortex-m7 -mthumb -mfpu=fpv5-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections -fno-threadsafe-statics -fno-rtti -fno-exceptions -nostdlib -Wdouble-promotion -fsingle-precision-constant "-Wa,-ahl=$*.s"" valueType="string"/> + + <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.cpp.compiler.option.include.paths.633679617" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath"> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/cores/arduino}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Flash}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/SharedSpi}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Storage}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Wire}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/utils}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/services/clock}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/services/ioport}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/drivers}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/drivers/gmac}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/services/flash_efc}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/cmsis/same70/include}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/header_files}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/preprocessor}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/thirdparty/CMSIS/Include}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/variants/same70}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/SAME70_TEST}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Networking}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Networking/LwipEthernet}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Networking/LwipEthernet/Lwip/src/include}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/DuetWiFiSocketServer/src/include}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/FreeRTOS/src/include}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/FreeRTOS/src/portable/GCC/ARM_CM7/r0p1}""/> + + </option> + + <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.cpp.compiler.option.preprocessor.def.315745995" name="Defined symbols (-D)" superClass="gnu.cpp.compiler.option.preprocessor.def" useByScannerDiscovery="false" valueType="definedSymbols"> + + <listOptionValue builtIn="false" value="__SAME70Q21__"/> + + <listOptionValue builtIn="false" value="RTOS"/> + + <listOptionValue builtIn="false" value="SAME70_TEST_BOARD"/> + + <listOptionValue builtIn="false" value="_XOPEN_SOURCE"/> + + </option> + + <option id="gnu.cpp.compiler.option.dialect.std.815297330" name="Language standard" superClass="gnu.cpp.compiler.option.dialect.std" useByScannerDiscovery="true" value="gnu.cpp.compiler.dialect.default" valueType="enumerated"/> + + <inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.2035099195" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/> + + </tool> + + </toolChain> + + </folderInfo> + + <sourceEntries> + + <entry excluding="src/Networking/ESP8266WiFi|src/Pccb|src/DuetNG/DuetWiFi|src/Duet|src/DuetNG/DuetEthernet/Wiznet/Internet/SNTP|src/DuetNG|src/Networking/LwipEthernet/Lwip/test|src/DuetNG/DuetEthernet/Wiznet/Internet/DNS|src/DuetNG/DuetEthernet/Wiznet/Application|src/Networking/W5500Ethernet|src/DuetNG/DuetEthernet/Wiznet/Internet/MQTT|src/Alligator|src/Display|src/Networking/LwipEthernet/Lwip/src/apps/mqtt|src/Networking/LwipEthernet/Lwip/doc|src/DuetNG/DuetEthernet/Wiznet/Internet/TFTP|src/DuetNG/DuetEthernet/Ethernet3|src/Networking/LwipEthernet/Lwip/src/apps/snmp|src/Networking/LwipEthernet/Lwip/src/apps/httpd|src/DuetNG/DuetEthernet/Wiznet/Internet/FTPServer|src/DuetNG/DuetEthernet/Ethernet3/examples|src/Networking/LwipEthernet/Lwip/src/apps/tftp|src/Networking/LwipEthernet/Lwip/src/netif/ppp|src/Networking/LwipEthernet/Lwip/src/apps/lwiperf|src/DuetNG/DuetEthernet/Wiznet/Internet/FTPClient|src/Networking/LwipEthernet/Lwip/src/apps/sntp|src/DuetNG/DuetEthernet/Wiznet/Internet/httpServer|src/DuetNG/DuetEthernet/Wiznet/Internet/SNMP|src/DuetM|src/RADDS" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/> + + </sourceEntries> + + </configuration> + + </storageModule> + + <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/> + + </cconfiguration> + + <cconfiguration id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.241502451.170574622.649587786.1798324396"> + + <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.241502451.170574622.649587786.1798324396" moduleId="org.eclipse.cdt.core.settings" name="PCCB"> + + <macros> + + <stringMacro name="LinkFlags2" type="VALUE_TEXT" value="-Wl,--end-group -lm"/> + + <stringMacro name="LinkFlags1" type="VALUE_TEXT" value="-mthumb -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--entry=Reset_Handler -Wl,--unresolved-symbols=report-all -Wl,--warn-common -Wl,--warn-section-align -Wl,--warn-unresolved-symbols -Wl,--start-group"/> + + <stringMacro name="CoreName" type="VALUE_TEXT" value="CoreNG"/> + + <stringMacro name="GccPath" type="VALUE_TEXT" value="/home/christian/duet/gcc-arm-none-eabi-7-2018-q2-update/bin"/> + + </macros> + + <externalSettings/> + + <extensions> + + <extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/> + + <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 artifactExtension="elf" artifactName="PccbFirmware" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.241502451.170574622.649587786.1798324396" name="PCCB" optionalBuildProperties="" parent="cdt.managedbuild.config.gnu.cross.exe.release" postannouncebuildStep="Generating binary file" postbuildStep="arm-none-eabi-objcopy -O binary ${workspace_loc:/${ProjName}/${ConfigName}}/${BuildArtifactFileBaseName}.elf ${workspace_loc:/${ProjName}/${ConfigName}}/${BuildArtifactFileBaseName}.bin"> + + <folderInfo id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.241502451.170574622.649587786.1798324396." name="/" resourcePath=""> + + <toolChain id="cdt.managedbuild.toolchain.gnu.cross.exe.release.1017317107" name="Cross GCC" superClass="cdt.managedbuild.toolchain.gnu.cross.exe.release"> + + <option id="cdt.managedbuild.option.gnu.cross.path.1932906636" name="Path" superClass="cdt.managedbuild.option.gnu.cross.path" useByScannerDiscovery="false" value="${GccPath}" valueType="string"/> + + <option id="cdt.managedbuild.option.gnu.cross.prefix.1572241044" name="Prefix" superClass="cdt.managedbuild.option.gnu.cross.prefix" useByScannerDiscovery="false" value="arm-none-eabi-" valueType="string"/> + + <targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="cdt.managedbuild.targetPlatform.gnu.cross.185324036" isAbstract="false" osList="all" superClass="cdt.managedbuild.targetPlatform.gnu.cross"/> + + <builder buildPath="${workspace_loc:/RepRapFirmware}/Release" id="cdt.managedbuild.builder.gnu.cross.1082169056" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="cdt.managedbuild.builder.gnu.cross"/> + + <tool id="cdt.managedbuild.tool.gnu.cross.assembler.1148717304" name="Cross GCC Assembler" superClass="cdt.managedbuild.tool.gnu.cross.assembler"> + + <inputType id="cdt.managedbuild.tool.gnu.assembler.input.2143813580" superClass="cdt.managedbuild.tool.gnu.assembler.input"/> + + </tool> + + <tool commandLinePattern="${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}" id="cdt.managedbuild.tool.gnu.cross.c.compiler.1981974117" name="Cross GCC Compiler" superClass="cdt.managedbuild.tool.gnu.cross.c.compiler"> + + <option defaultValue="gnu.c.optimization.level.most" id="gnu.c.compiler.option.optimization.level.1510743318" name="Optimization Level" superClass="gnu.c.compiler.option.optimization.level" useByScannerDiscovery="false" value="gnu.c.optimization.level.more" valueType="enumerated"/> + + <option id="gnu.c.compiler.option.debugging.level.1424949241" name="Debug Level" superClass="gnu.c.compiler.option.debugging.level" useByScannerDiscovery="false" value="gnu.c.debugging.level.none" valueType="enumerated"/> + + <option id="gnu.c.compiler.option.misc.verbose.623464210" name="Verbose (-v)" superClass="gnu.c.compiler.option.misc.verbose" useByScannerDiscovery="false" value="false" valueType="boolean"/> + + <option id="gnu.c.compiler.option.misc.other.1167454821" name="Other flags" superClass="gnu.c.compiler.option.misc.other" useByScannerDiscovery="false" value="-c -std=gnu99 -mcpu=cortex-m4 -mthumb -ffunction-sections -fdata-sections -nostdlib -Wdouble-promotion -fsingle-precision-constant "-Wa,-ahl=$*.s"" valueType="string"/> + + <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.compiler.option.include.paths.531615654" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath"> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/cores/arduino}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Storage}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/utils}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/services/ioport}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/drivers}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/cmsis/sam4s/include}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/header_files}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/preprocessor}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/thirdparty/CMSIS/Include}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/variants/sam4s}""/> + + </option> + + <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.compiler.option.preprocessor.def.symbols.507583566" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" useByScannerDiscovery="false" valueType="definedSymbols"> + + <listOptionValue builtIn="false" value="__SAM4S8C__"/> + + <listOptionValue builtIn="false" value="RTOS"/> + + <listOptionValue builtIn="false" value="PCCB"/> + + </option> + + <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.562849016" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/> + + </tool> + + <tool id="cdt.managedbuild.tool.gnu.cross.c.linker.1448735774" name="Cross GCC Linker" superClass="cdt.managedbuild.tool.gnu.cross.c.linker"/> + + <tool id="cdt.managedbuild.tool.gnu.cross.archiver.886333230" name="Cross GCC Archiver" superClass="cdt.managedbuild.tool.gnu.cross.archiver"/> + + <tool command="gcc" commandLinePattern="${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${LinkFlags1} "${workspace_loc:/${CoreName}/SAM4S_RTOS/cores/arduino/syscalls.o}" ${INPUTS} ${LinkFlags2}" id="cdt.managedbuild.tool.gnu.cross.cpp.linker.687537254" name="Cross G++ Linker" superClass="cdt.managedbuild.tool.gnu.cross.cpp.linker"> + + <option id="gnu.cpp.link.option.nostdlibs.1719677032" name="No startup or default libs (-nostdlib)" superClass="gnu.cpp.link.option.nostdlibs" useByScannerDiscovery="false" value="false" valueType="boolean"/> + + <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.cpp.link.option.paths.2028936348" name="Library search path (-L)" superClass="gnu.cpp.link.option.paths" useByScannerDiscovery="false" valueType="libPaths"> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/SAM4S_RTOS_PCCB/}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/FreeRTOS/SAM4S}""/> + + </option> + + <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.cpp.link.option.libs.1421214818" name="Libraries (-l)" superClass="gnu.cpp.link.option.libs" useByScannerDiscovery="false" valueType="libs"> + + <listOptionValue builtIn="false" value="${CoreName}"/> + + <listOptionValue builtIn="false" value="FreeRTOS"/> + + </option> + + <option id="gnu.cpp.link.option.flags.633609481" name="Linker flags" superClass="gnu.cpp.link.option.flags" useByScannerDiscovery="false" value="-Os --specs=nano.specs -Wl,--gc-sections -Wl,--fatal-warnings -mcpu=cortex-m4 -T${workspace_loc:/${CoreName}/variants/sam4s/linker_scripts/gcc/flash.ld} -Wl,-Map,${workspace_loc:/${ProjName}/${ConfigName}}/${BuildArtifactFileBaseName}.map" valueType="string"/> + + <inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.96746585" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input"> + + <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/> + + <additionalInput kind="additionalinput" paths="$(LIBS)"/> + + </inputType> + + </tool> + + <tool command="g++" id="cdt.managedbuild.tool.gnu.cross.cpp.compiler.972255361" name="Cross G++ Compiler" superClass="cdt.managedbuild.tool.gnu.cross.cpp.compiler"> + + <option id="gnu.cpp.compiler.option.optimization.level.820933483" name="Optimization Level" superClass="gnu.cpp.compiler.option.optimization.level" useByScannerDiscovery="false" value="gnu.cpp.compiler.optimization.level.more" valueType="enumerated"/> + + <option id="gnu.cpp.compiler.option.debugging.level.1785551954" name="Debug Level" superClass="gnu.cpp.compiler.option.debugging.level" useByScannerDiscovery="false" value="gnu.cpp.compiler.debugging.level.none" valueType="enumerated"/> + + <option id="gnu.cpp.compiler.option.other.verbose.1038790030" name="Verbose (-v)" superClass="gnu.cpp.compiler.option.other.verbose" useByScannerDiscovery="false" value="false" valueType="boolean"/> + + <option id="gnu.cpp.compiler.option.other.other.1212511140" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" useByScannerDiscovery="false" value="-c -std=gnu++14 -mcpu=cortex-m4 -mthumb -ffunction-sections -fdata-sections -fno-threadsafe-statics -fno-rtti -fno-exceptions -nostdlib -Wdouble-promotion -fsingle-precision-constant "-Wa,-ahl=$*.s"" valueType="string"/> + + <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.cpp.compiler.option.include.paths.1648844124" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath"> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/cores/arduino}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Flash}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/SharedSpi}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Storage}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/libraries/Wire}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/utils}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/services/clock}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/common/services/ioport}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/drivers}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/services/flash_efc}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/cmsis/sam4s/include}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/header_files}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/sam/utils/preprocessor}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/asf/thirdparty/CMSIS/Include}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${CoreName}/variants/sam4s}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src/Pccb}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/DuetWiFiSocketServer/src/include}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/FreeRTOS/src/include}""/> + + <listOptionValue builtIn="false" value=""${workspace_loc:/FreeRTOS/src/portable/GCC/ARM_CM3}""/> + + </option> + + <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.cpp.compiler.option.preprocessor.def.249074867" name="Defined symbols (-D)" superClass="gnu.cpp.compiler.option.preprocessor.def" useByScannerDiscovery="false" valueType="definedSymbols"> + + <listOptionValue builtIn="false" value="__SAM4S8C__"/> + + <listOptionValue builtIn="false" value="RTOS"/> + + <listOptionValue builtIn="false" value="PCCB"/> + + <listOptionValue builtIn="false" value="_XOPEN_SOURCE"/> + + </option> + + <inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.58883174" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/> + + </tool> + + </toolChain> + + </folderInfo> + + <sourceEntries> + + <entry excluding="src/DuetM|src/Display|src/Networking|src/Alligator|src/SAME70_TEST|src/Duet|src/Networking/ESP8266WiFi|src/Networking/LwipEthernet|src/DuetNG|src/RADDS" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/> + + </sourceEntries> + + </configuration> + + </storageModule> + + <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/> + + </cconfiguration> + + </storageModule> + + <storageModule moduleId="cdtBuildSystem" version="4.0.0"> + + <project id="RepRapFirmware.cdt.managedbuild.target.gnu.cross.exe.1494358155" name="Executable" projectType="cdt.managedbuild.target.gnu.cross.exe"/> + + </storageModule> + + <storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/> + + <storageModule moduleId="refreshScope" versionNumber="2"> + + <configuration configurationName="DuetM_RTOS"/> + + <configuration configurationName="Alligator"/> + + <configuration configurationName="SAME70_RTOS"/> + + <configuration configurationName="SAME70"/> + + <configuration configurationName="RADDS"/> + + <configuration configurationName="Duet2_RTOS"/> + + <configuration configurationName="Duet2"/> + + <configuration configurationName="PCCB"/> + + <configuration configurationName="DuetM"/> + + <configuration configurationName="Duet085"/> + + </storageModule> + + <storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/> + + <storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/> + + <storageModule moduleId="scannerConfiguration"> + + <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/> + + <scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.cross.exe.release.516195201;cdt.managedbuild.config.gnu.cross.exe.release.516195201.;cdt.managedbuild.tool.gnu.cross.cpp.compiler.1703390221;cdt.managedbuild.tool.gnu.cpp.compiler.input.111814721"> + + <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP"/> + + </scannerConfigBuildInfo> + + <scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.cross.exe.release.516195201;cdt.managedbuild.config.gnu.cross.exe.release.516195201.;cdt.managedbuild.tool.gnu.cross.c.compiler.220085372;cdt.managedbuild.tool.gnu.c.compiler.input.1345445195"> + + <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/> + + </scannerConfigBuildInfo> + + </storageModule> + </cproject> diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml index 1998c537..f6440b45 100644 --- a/.settings/language.settings.xml +++ b/.settings/language.settings.xml @@ -1,69 +1,158 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <project> - <configuration id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850" name="Duet085"> - <extension point="org.eclipse.cdt.core.LanguageSettingsProvider"> - <provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/> - <provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/> - <provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/> - <provider class="org.eclipse.cdt.internal.build.crossgcc.CrossGCCBuiltinSpecsDetector" console="false" env-hash="-114279925955362495" id="org.eclipse.cdt.build.crossgcc.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT Cross GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true"> - <language-scope id="org.eclipse.cdt.core.gcc"/> - <language-scope id="org.eclipse.cdt.core.g++"/> - </provider> - </extension> - </configuration> - <configuration id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.1027429289" name="RADDS"> - <extension point="org.eclipse.cdt.core.LanguageSettingsProvider"> - <provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/> - <provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/> - <provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/> - <provider class="org.eclipse.cdt.internal.build.crossgcc.CrossGCCBuiltinSpecsDetector" console="false" env-hash="-114279925955362495" id="org.eclipse.cdt.build.crossgcc.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT Cross GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true"> - <language-scope id="org.eclipse.cdt.core.gcc"/> - <language-scope id="org.eclipse.cdt.core.g++"/> - </provider> - </extension> - </configuration> - <configuration id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.1745168887" name="Alligator"> - <extension point="org.eclipse.cdt.core.LanguageSettingsProvider"> - <provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/> - <provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/> - <provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/> - <provider class="org.eclipse.cdt.internal.build.crossgcc.CrossGCCBuiltinSpecsDetector" console="false" env-hash="-114279925955362495" id="org.eclipse.cdt.build.crossgcc.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT Cross GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true"> - <language-scope id="org.eclipse.cdt.core.gcc"/> - <language-scope id="org.eclipse.cdt.core.g++"/> - </provider> - </extension> - </configuration> - <configuration id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.241502451.170574622" name="Duet2_RTOS"> - <extension point="org.eclipse.cdt.core.LanguageSettingsProvider"> - <provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/> - <provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/> - <provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/> - <provider class="org.eclipse.cdt.internal.build.crossgcc.CrossGCCBuiltinSpecsDetector" console="false" env-hash="-114279925955362495" id="org.eclipse.cdt.build.crossgcc.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT Cross GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true"> - <language-scope id="org.eclipse.cdt.core.gcc"/> - <language-scope id="org.eclipse.cdt.core.g++"/> - </provider> - </extension> - </configuration> - <configuration id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.241502451.1275216290.274082366.1645191116.1726130161" name="SAME70_RTOS"> - <extension point="org.eclipse.cdt.core.LanguageSettingsProvider"> - <provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/> - <provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/> - <provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/> - <provider class="org.eclipse.cdt.internal.build.crossgcc.CrossGCCBuiltinSpecsDetector" console="false" env-hash="-114279925955362495" id="org.eclipse.cdt.build.crossgcc.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT Cross GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true"> - <language-scope id="org.eclipse.cdt.core.gcc"/> - <language-scope id="org.eclipse.cdt.core.g++"/> - </provider> - </extension> - </configuration> - <configuration id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.241502451.1275216290.274082366.1645191116.1852610203" name="SAME70_RTOS"> - <extension point="org.eclipse.cdt.core.LanguageSettingsProvider"> - <provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/> - <provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/> - <provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/> - <provider class="org.eclipse.cdt.internal.build.crossgcc.CrossGCCBuiltinSpecsDetector" console="false" env-hash="-114279925955362495" id="org.eclipse.cdt.build.crossgcc.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT Cross GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true"> - <language-scope id="org.eclipse.cdt.core.gcc"/> - <language-scope id="org.eclipse.cdt.core.g++"/> - </provider> - </extension> - </configuration> + + <configuration id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850" name="Duet085"> + + <extension point="org.eclipse.cdt.core.LanguageSettingsProvider"> + + <provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/> + + <provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/> + + <provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/> + + <provider class="org.eclipse.cdt.internal.build.crossgcc.CrossGCCBuiltinSpecsDetector" console="false" env-hash="-1426937548715061090" id="org.eclipse.cdt.build.crossgcc.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT Cross GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true"> + + <language-scope id="org.eclipse.cdt.core.gcc"/> + + <language-scope id="org.eclipse.cdt.core.g++"/> + + </provider> + + </extension> + + </configuration> + + <configuration id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.1027429289" name="RADDS"> + + <extension point="org.eclipse.cdt.core.LanguageSettingsProvider"> + + <provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/> + + <provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/> + + <provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/> + + <provider class="org.eclipse.cdt.internal.build.crossgcc.CrossGCCBuiltinSpecsDetector" console="false" env-hash="-1426937548715061090" id="org.eclipse.cdt.build.crossgcc.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT Cross GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true"> + + <language-scope id="org.eclipse.cdt.core.gcc"/> + + <language-scope id="org.eclipse.cdt.core.g++"/> + + </provider> + + </extension> + + </configuration> + + <configuration id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.1745168887" name="Alligator"> + + <extension point="org.eclipse.cdt.core.LanguageSettingsProvider"> + + <provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/> + + <provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/> + + <provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/> + + <provider class="org.eclipse.cdt.internal.build.crossgcc.CrossGCCBuiltinSpecsDetector" console="false" env-hash="-1426937548715061090" id="org.eclipse.cdt.build.crossgcc.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT Cross GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true"> + + <language-scope id="org.eclipse.cdt.core.gcc"/> + + <language-scope id="org.eclipse.cdt.core.g++"/> + + </provider> + + </extension> + + </configuration> + + <configuration id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.241502451.170574622" name="Duet2_RTOS"> + + <extension point="org.eclipse.cdt.core.LanguageSettingsProvider"> + + <provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/> + + <provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/> + + <provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/> + + <provider class="org.eclipse.cdt.internal.build.crossgcc.CrossGCCBuiltinSpecsDetector" console="false" env-hash="-1426937548715061090" id="org.eclipse.cdt.build.crossgcc.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT Cross GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true"> + + <language-scope id="org.eclipse.cdt.core.gcc"/> + + <language-scope id="org.eclipse.cdt.core.g++"/> + + </provider> + + </extension> + + </configuration> + + <configuration id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.241502451.170574622.649587786" name="DuetM_RTOS"> + + <extension point="org.eclipse.cdt.core.LanguageSettingsProvider"> + + <provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/> + + <provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/> + + <provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/> + + <provider class="org.eclipse.cdt.internal.build.crossgcc.CrossGCCBuiltinSpecsDetector" console="false" env-hash="-1426937548715061090" id="org.eclipse.cdt.build.crossgcc.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT Cross GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true"> + + <language-scope id="org.eclipse.cdt.core.gcc"/> + + <language-scope id="org.eclipse.cdt.core.g++"/> + + </provider> + + </extension> + + </configuration> + + <configuration id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.241502451.1275216290.274082366.1645191116.1852610203" name="SAME70_RTOS"> + + <extension point="org.eclipse.cdt.core.LanguageSettingsProvider"> + + <provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/> + + <provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/> + + <provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/> + + <provider class="org.eclipse.cdt.internal.build.crossgcc.CrossGCCBuiltinSpecsDetector" console="false" env-hash="-1426937548715061090" id="org.eclipse.cdt.build.crossgcc.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT Cross GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true"> + + <language-scope id="org.eclipse.cdt.core.gcc"/> + + <language-scope id="org.eclipse.cdt.core.g++"/> + + </provider> + + </extension> + + </configuration> + + <configuration id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.241502451.170574622.649587786.1798324396" name="PCCB"> + + <extension point="org.eclipse.cdt.core.LanguageSettingsProvider"> + + <provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/> + + <provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/> + + <provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/> + + <provider class="org.eclipse.cdt.internal.build.crossgcc.CrossGCCBuiltinSpecsDetector" console="false" env-hash="-1426937548715061090" id="org.eclipse.cdt.build.crossgcc.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT Cross GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true"> + + <language-scope id="org.eclipse.cdt.core.gcc"/> + + <language-scope id="org.eclipse.cdt.core.g++"/> + + </provider> + + </extension> + + </configuration> + </project> diff --git a/src/Alligator/Pins_Alligator.h b/src/Alligator/Pins_Alligator.h index 120e475b..ba7d0c35 100644 --- a/src/Alligator/Pins_Alligator.h +++ b/src/Alligator/Pins_Alligator.h @@ -4,12 +4,9 @@ #define FIRMWARE_NAME "RepRapFirmware for Alligator" // Features definition -#define HAS_LWIP_NETWORKING 1 -#define HAS_WIFI_NETWORKING 0 +#define HAS_LEGACY_NETWORKING 1 #define HAS_CPU_TEMP_SENSOR 1 #define HAS_HIGH_SPEED_SD 0 -#define HAS_SMART_DRIVERS 0 -#define HAS_STALL_DETECT 0 #define HAS_VOLTAGE_MONITOR 0 #define HAS_VREF_MONITOR 0 #define ACTIVE_LOW_HEAT_ON 0 @@ -37,16 +34,16 @@ const size_t MaxDriversPerAxis = 4; // The maximum number of stepper drivers #define AXES_(a,b,c,d,e,f,g,h,i) { a,b,c,d,e,f } // Alligator + Piggy module max 5 heaters -const int8_t Heaters = 5; // The number of heaters in the machine; 0 is the heated bed even if there isn't one -#define HEATERS_(a,b,c,d,e,f,g,h) { a,b,c,d,e } +constexpr size_t Heaters = 5; // The number of heaters in the machine; 0 is the heated bed even if there isn't one -const size_t NumExtraHeaterProtections = 4; // The number of extra heater protection instances +constexpr size_t NumExtraHeaterProtections = 4; // The number of extra heater protection instances +constexpr size_t NumThermistorInputs = 5; -const size_t MaxAxes = 7; // The maximum number of movement axes in the machine, usually just X, Y and Z, <= DRIVES -const size_t MinAxes = 3; // The minimum and default number of axes -const size_t MaxExtruders = DRIVES - MinAxes; // The maximum number of extruders +constexpr size_t MaxAxes = 7; // The maximum number of movement axes in the machine, usually just X, Y and Z, <= DRIVES +constexpr size_t MinAxes = 3; // The minimum and default number of axes +constexpr size_t MaxExtruders = DRIVES - MinAxes; // The maximum number of extruders -const size_t NUM_SERIAL_CHANNELS = 3; // The number of serial IO channels (USB and two auxiliary UARTs) +constexpr size_t NUM_SERIAL_CHANNELS = 3; // The number of serial IO channels (USB and two auxiliary UARTs) #define SERIAL_MAIN_DEVICE SerialUSB #define SERIAL_AUX_DEVICE Serial #define SERIAL_AUX2_DEVICE Serial1 @@ -69,19 +66,18 @@ const Pin MotorFaultDetectPin = 22; // Alligator End-stop pinout mapping for RepRapFirmware: // 5V SIGN SIGN GND , 5V SIGN SIGN GND, 5V SIGN SIGN GND // X E0 Y E1 Z E2-Zprobe -const Pin END_STOP_PINS[DRIVES] = { 33, 35, 38, 34, 37, 39 ,NoPin }; +const Pin END_STOP_PINS[DRIVES] = { 33, 35, 38, 34, 37, 39, NoPin }; // SPI DAC Motor for Current Vref const size_t MaxSpiDac = 2; const Pin SPI_DAC_CS[MaxSpiDac] = { 53, 6 }; // HEATERS -const Pin TEMP_SENSE_PINS[Heaters] = HEATERS_(1, 0, 2, 3, 4, f, g, h); // Analogue pin numbers +const Pin TEMP_SENSE_PINS[NumThermistorInputs] = { 1, 0, 2, 3, 4 }; // Analogue pin numbers // h1,h2,h3,h4: X2,8,9,X8 is hardware PWM // b: X3 is not hardware PWM -const Pin HEAT_ON_PINS[Heaters] = HEATERS_(X3, X2, 8, 9, X8, f, g, h); // b,h1,h2,h3,h4 - +const Pin HEAT_ON_PINS[Heaters] = { X3, X2, 8, 9, X8 }; // Default thermistor parameters // Bed thermistor: http://uk.farnell.com/epcos/b57863s103f040/sensor-miniature-ntc-10k/dp/1299930?Ntt=129-9930 @@ -112,11 +108,11 @@ const Pin ATX_POWER_PIN = NoPin; // Arduino Due pin number that control const Pin Z_PROBE_PIN = 39; // Z min pin ,Last signal of the end-stop connectors // Digital pin number to turn the IR LED on (high) or off (low) -const Pin Z_PROBE_MOD_PIN = NoPin; // Digital pin number to turn the IR LED on (high) or off (low) on Duet v0.6 and v1.0 (PB21) +const Pin Z_PROBE_MOD_PIN = NoPin; // Digital pin number to turn the IR LED on (high) or off (low) on Duet v0.6 and v1.0 (PB21) const Pin DiagPin = NoPin; // Pin number that the DAC that controls the second extruder motor current on the Duet 0.8.5 is connected to -const int Dac0DigitalPin = NoPin; // Arduino Due pin number corresponding to DAC0 output pin +const int Dac0DigitalPin = NoPin; // Arduino Due pin number corresponding to DAC0 output pin // COOLING FANS const size_t NUM_FANS = 4; @@ -124,7 +120,8 @@ const size_t NUM_FANS = 4; // Fan2: 31 is not hardware PWM // J5 pin1 black connector ha hardware PWM, attached to FANS const Pin COOLING_FAN_PINS[NUM_FANS] = { X0, 31, X17}; -const Pin COOLING_FAN_RPM_PIN = NoPin; // Pin PA15 +constexpr size_t NumTachos = 0; +constexpr Pin TachoPins[NumTachos] = { }; // SD cards const size_t NumSdCards = 1; diff --git a/src/BugList.txt b/src/BugList.txt index e920e51f..92b4b235 100644 --- a/src/BugList.txt +++ b/src/BugList.txt @@ -195,7 +195,7 @@ WiFi: - [resolve library incompatibility] New ESP8266 SDK - [done] check what's new in Arduino ESP 2.4.1 -Bug fixes/investigations: +Done in 2.01beta1: - [done, test] sqrt(2) error factor in extrusion-only moves, see Michael's email - [done] Homing wrong if axes not labeled sequentially, see Christian's email of 18/6/18 - [done, test] Fix "2dtstc2diva=u" in debug printout, https://forum.duet3d.com/topic/3139/high-level-of-steperrors-what-can-cause-them/5 @@ -212,30 +212,50 @@ Bug fixes/investigations: - [done] Add SW_ENC pin on CONN_SD to available GPIO ports - [done] Increased M999 delay to 1 second - [done] If M911 resume threshold is set too high, save-on-power-off never primes itself +- [done] display mutex owners in task diagnostics + +Done in 2.02beta2: +- [done, test] GCode queue overflow, see https://forum.duet3d.com/topic/5821/major-performance-problem. Suspend processing until queue space is available. +- [done, test M28/M29 and M559/M560 file uploads] M28 and M29 in a macro, https://forum.duet3d.com/topic/5642/filament-load-macro-writing-to-file-in-sys. Move fileBeingWritten to GCodeBuffer, get rid of writingFileDirectory. +- [done, test] we get a Pop underflow message when you send DWC jog commands and axes are not homed +- [done, test] clear bed compensation not working properly, https://forum.duet3d.com/topic/5978/dwc-ui-position-updates-are-behind-causing-leveling-problems/6 +- [done] Duet Maestro default to TMC2224 drivers on expansion +- [done] bltouch now uses unfiltered digital probe mode +- [done] Reset/retry after SD card error - we have confirmation that fatfs is reporting a low-level error (error 1) +- [increased retries, test detection] Doesn't find DueX5 after M999 reset? https://forum.duet3d.com/topic/5713/duet2-with-2-0-rtos-looses-duex5-on-reset +- [made some changes] Test Duet 06/085 DHCP problem again, see https://forum.duet3d.com/topic/5572/it-s-out-reprapfirmware-2-0-and-1-21-1-released/16 for config.g files +- [done, test] resurrect.g to include G92 commands to set head position to the power fail position +- [done] Software watchdog to watch Heat task +- [done, test] When an under-voltage event occurs, spurious driver status warnings/error were sometimes reported +- [done, test] When an under- or over-voltage event occurred, the VIN voltage reported was the current voltage, not the voltage when the event was recorded +- [done, test] Software reset data now includes which task was active +- [done, test] Step errors on a drive corresponding to an invisible axis, https://forum.duet3d.com/topic/3139/high-level-of-steperrors-what-can-cause-them/5 + +Bug fixes/investigations for 2.02beta3: +- [done, ok] Chrishamm's changes to allow fans to be named +- [done] Initial assumed Z position could be strange because babystepping wasn't cleared early enough at startup +- [done] allow Z probe mod pin to be accessed as a GP output pin (but some Z probe modes will still change it) +- [done] allow up to 5 drivers/axis on Duet 2 WiFi/Ethernet instead of 4 +- [done, test] M28/M29 in macro still doesn't work if the M29 is right at the end of the file. Also test the case of no M29. +- [done, ok] Fix tacho RPM readings +- Pressure advance with high K and low microstepping, see https://forum.duet3d.com/topic/1935/more-strange-pressure-advance-behaviour/95 +- Do we need to defer stall detection when a motor is starting from rest? +- [awaiting reply] Step errors when using Nimble and pressure advance, https://forum.duet3d.com/topic/3139/high-level-of-steperrors-what-can-cause-them/5 +- [awaiting reply] GCode file that pauses between parts, https://forum.duet3d.com/topic/5702/printer-keeps-pausing-during-print/15 +- [looks like it was a temperature sensing error] Is there a kink during auto tuning? https://forum.duet3d.com/topic/5582/hot-end-auto-tuning-failed-due. Could explain oddly low dead times from auto tuning. +- Stuck in spin loop, https://forum.duet3d.com/topic/5674/damned-crash-stuck-in-spin-loop +- Report that if you use FileZilla to upload several short files, some of them are written blank, https://forum.duet3d.com/topic/5992/files-uploaded-over-ftp-occasionally-blank -- Test gcode file that pauses between parts, https://forum.duet3d.com/topic/5702/printer-keeps-pausing-during-print/15 -- Doesn't find DueX5 after M999 reset? https://forum.duet3d.com/topic/5713/duet2-with-2-0-rtos-looses-duex5-on-reset -- stuck in spin loop, https://forum.duet3d.com/topic/5674/damned-crash-stuck-in-spin-loop -- step errors, see https://forum.duet3d.com/topic/3139/high-level-of-steperrors-what-can-cause-them/5 - Investigate failed .BMP conversion, https://forum.duet3d.com/topic/5623/boot-logo-corruption-in-1-21/2 -- Duet Maestro default to TMC2224 drivers on expansion? How to detect them? -- M28 and M29 in a macro, https://forum.duet3d.com/topic/5642/filament-load-macro-writing-to-file-in-sys. Move fileBeingWritten to GCodeBuffer, get rid of writingFileDirectory. -- Is there a kink during auto tuning? https://forum.duet3d.com/topic/5582/hot-end-auto-tuning-failed-due. Could explain oddly low dead times from auto tuning. -- Does bltouch need a default recovery time to allow it to deploy? (probably not) -- Should bltouch use digital probe mode? Some users having problems with P25 in G31 command. -- Test Duet 06/085 DHCP problem again, see https://forum.duet3d.com/topic/5572/it-s-out-reprapfirmware-2-0-and-1-21-1-released/16 for config.g files -- Retry after SD card error? Other: -- @wilriker PR for M106 PWM limit -- [done, test] display mutex owners in task diagnostics Planned for 2.02: -- WiFi continuous auto reconnect, or extra M552 parameter? See https://forum.duet3d.com/topic/5765/wifi-module-auto-reconnect +- @wilriker PR for M106 PWM limit +- WiFi continuous auto reconnect in client mode, or extra M552 parameter? See https://forum.duet3d.com/topic/5765/wifi-module-auto-reconnect - Better dead time measurement during auto tuning. Measure both turn-on and turn-off? - Bezier speed curves or other S-curve acceleration, e.g. look at https://github.com/MarlinFirmware/Marlin/pull/10373/files - Option to send M280 servo commands just a few times instead of continuously, for E3D -- Recovery from SD card errors during a print (Dan) - Danny's modified SCARA kinematics (workpiece is on a plate, extruder is fixed) - Laser support via G1 S parameter, see https://forum.duet3d.com/topic/4702/laser-cnc-support-in-rrf-gcode-semantics/4 - Look at pushover notification support, https://forum.duet3d.com/topic/169/notification-via-pushover-or-other-service/45 @@ -244,11 +264,10 @@ Planned for 2.02: - M584 when assigning a drive, unmap any existing assignment. Also allow an axis to be mapped to driver -1. - Add S4 option to G1 command, like S1 but no endstop checks (needed for CoreXY, CoreXZ) - CNC: look at G17/18/19, see https://forum.duet3d.com/topic/4669/ooznest-workbee-screw-driven -- M569 command to allow selection of smart/dumb driver, also allow all 12 drivers to be smart +- M569 command to allow selection of smart/dumb driver (including on Duet M), also allow all 12 drivers to be smart - M569 TOFF parameter, https://forum.duet3d.com/topic/5392/does-m906-set-rms-or-peak-current/28 - Apostrophe in quoted filename: can we make apostrophe special in SSIDs/passwords but not filenames? - If wifi module gets stuck in starting or changing mode state, reset it again -- If wifi disconnects when in client mode, keep retrying the connection - M140 command to set default bed heaters for M140 S commands (e.g. M140 P0:1:2) Other (some of these may be in 2.02): @@ -260,7 +279,6 @@ Other (some of these may be in 2.02): - support M205 for setting jerk - support G12 clean tool? - Add fan PWM limit, https://forum.duet3d.com/topic/5370/m106-feature-request-limit-max-pwm-parameter/4 -- M116 extra "close enough" parameter - after homing, warn if outside M208 movement limits on SCARA, polar etc. - Unexpected heaters off/tool selection behaviour, https://www.duet3d.com/forum/thread.php?pid=43059#p43059 - warn when using : where ; was probably meant @@ -271,7 +289,6 @@ Other (some of these may be in 2.02): - Auto mount main SD card when inserted - Workplace offsets are supposed to be persistant (check NIST), https://www.duet3d.com/forum/thread.php?pid=43755#p43755 - At the end of a simulation, restore the original workplace coordinate selection -- looks like we get a Pop underflow message when you send DWC jog commands and axes are not homed - Add warning message when print exceeds bounds - When uploading while a file is being printed, don't allow the currently-printing file to be replaced @@ -288,7 +305,6 @@ Other (some of these may be in 2.02): - laser control, https://www.duet3d.com/forum/thread.php?pid=37891#p37891 - slow DWC but fast FTP, https://www.duet3d.com/forum/thread.php?pid=38345#p38345 - no stall detect on Z axis, https://www.duet3d.com/forum/thread.php?pid=38504#p38504, https://www.duet3d.com/forum/thread.php?pid=39484#p39484 -- Pressure advance, see https://www.duet3d.com/forum/thread.php?pid=38036#p38036 - check that we never enable the drivers before we set vsense - [don't do] Don't report the motor current for a non-existent extruder diff --git a/src/Configuration.h b/src/Configuration.h index 726a6c19..a6bef8d5 100644 --- a/src/Configuration.h +++ b/src/Configuration.h @@ -74,19 +74,34 @@ constexpr float DefaultHotEndHeaterGain = 340.0; constexpr float DefaultHotEndHeaterTimeConstant = 140.0; constexpr float DefaultHotEndHeaterDeadTime = 5.5; -#if SAM4E || SAME70 +#ifdef PCCB + +constexpr size_t NumBedHeaters = 1; +constexpr size_t NumChamberHeaters = 1; +constexpr int8_t DefaultBedHeaters[NumBedHeaters] = { -1 }; +constexpr int8_t DefaultChamberHeaters[NumChamberHeaters] = { -1 }; + +constexpr int8_t DefaultE0Heater = 0; // Index of the default first extruder heater, used only for the legacy status response + +#elif SAM4E || SAME70 + constexpr size_t NumBedHeaters = 4; constexpr size_t NumChamberHeaters = 2; constexpr int8_t DefaultBedHeaters[NumBedHeaters] = { 0, -1, -1, -1 }; constexpr int8_t DefaultChamberHeaters[NumChamberHeaters] = { -1, -1 }; + +constexpr int8_t DefaultE0Heater = 1; // Index of the default first extruder heater, used only for the legacy status response + #else + constexpr size_t NumBedHeaters = 1; constexpr size_t NumChamberHeaters = 2; constexpr int8_t DefaultBedHeaters[NumBedHeaters] = { 0 }; constexpr int8_t DefaultChamberHeaters[NumChamberHeaters] = { -1, -1 }; -#endif -constexpr int8_t DefaultE0Heater = 1; // Index of the default first extruder heater +constexpr int8_t DefaultE0Heater = 1; // Index of the default first extruder heater, used only for the legacy status response + +#endif constexpr unsigned int FirstVirtualHeater = 100; // the heater number at which virtual heaters start constexpr unsigned int MaxVirtualHeaters = 10; // the number of virtual heaters supported @@ -155,6 +170,8 @@ static_assert(MaxCalibrationPoints <= MaxProbePoints, "MaxCalibrationPoints must // SD card constexpr uint32_t SdCardDetectDebounceMillis = 200; // How long we give the SD card to settle in the socket +constexpr unsigned int MaxSdCardTries = 3; // Number of read or write attempts before giving up +constexpr uint32_t SdCardRetryDelay = 10; // Number of milliseconds delay between SD transfer retries // Z probing constexpr float DefaultZDive = 5.0; // Millimetres @@ -178,8 +195,10 @@ constexpr size_t PASSWORD_LENGTH = 20; #if SAM4E || SAM4S || SAME70 // Increased GCODE_LENGTH on the SAM4 because M587 and M589 commands on the Duet WiFi can get very long constexpr size_t GCODE_LENGTH = 161; // maximum number of non-comment characters in a line of GCode including the null terminator +constexpr size_t SHORT_GCODE_LENGTH = 61; // maximum length of a GCode that we can queue to synchronise it to a move #else constexpr size_t GCODE_LENGTH = 101; // maximum number of non-comment characters in a line of GCode including the null terminator +constexpr size_t SHORT_GCODE_LENGTH = 61; // maximum length of a GCode that we can queue to synchronise it to a move #endif constexpr size_t MaxMessageLength = 256; @@ -209,6 +228,8 @@ constexpr size_t RESERVED_OUTPUT_BUFFERS = 2; // Number of reserved output buf # error #endif +const size_t maxQueuedCodes = 16; // How many codes can be queued? + // Move system constexpr float DefaultFeedRate = 3000.0; // The initial requested feed rate after resetting the printer, in mm/min constexpr float DefaultG0FeedRate = 18000; // The initial feed rate for G0 commands after resetting the printer, in mm/min diff --git a/src/Display/MenuItem.h b/src/Display/MenuItem.h index 28402c7e..6817322a 100644 --- a/src/Display/MenuItem.h +++ b/src/Display/MenuItem.h @@ -10,7 +10,7 @@ #include "Libraries/General/FreelistManager.h" #include "RepRapFirmware.h" -#include "ST7920/Lcd7920.h" +#include "ST7920/lcd7920.h" // Menu item class hierarchy class MenuItem diff --git a/src/Duet/Lwip/contrib/apps/mdns/mdns_responder.c b/src/Duet/Lwip/contrib/apps/mdns/mdns_responder.c index 5353b367..167b38e7 100644 --- a/src/Duet/Lwip/contrib/apps/mdns/mdns_responder.c +++ b/src/Duet/Lwip/contrib/apps/mdns/mdns_responder.c @@ -544,7 +544,11 @@ static void setup_hostnames(struct mdns_state *ms, struct netif *netif) sprintf(ms->hostnames[1], "%c%s-%02X%s", hostlen+3, netif->hostname, netif->hwaddr[5], dotlocal); +#if 1 // DC42 + char macaddr[13]; +#else char macaddr[12]; +#endif sprintf(macaddr, "%02X%02X%02X%02X%02X%02X", netif->hwaddr[0], netif->hwaddr[1], netif->hwaddr[2], netif->hwaddr[3], netif->hwaddr[4], netif->hwaddr[5]); diff --git a/src/Duet/Network.cpp b/src/Duet/Network.cpp index a0ddfaa5..7713c2d8 100644 --- a/src/Duet/Network.cpp +++ b/src/Duet/Network.cpp @@ -160,8 +160,11 @@ static void ethernet_rx_callback(uint32_t ul_status) static void conn_err(void *arg, err_t err) { - // Report the error to the monitor - reprap.GetPlatform().MessageF(UsbMessage, "Network: Connection error, code %d\n", err); + if (reprap.Debug(moduleNetwork) && !inInterrupt()) + { + // Report the error to the monitor + reprap.GetPlatform().MessageF(UsbMessage, "Network: Connection error, code %d\n", err); + } // Tell the higher levels about the error ConnectionState *cs = (ConnectionState*)arg; @@ -179,7 +182,10 @@ static err_t conn_recv(void *arg, tcp_pcb *pcb, pbuf *p, err_t err) { if (cs->pcb != pcb) { - reprap.GetPlatform().Message(UsbMessage, "Network: Mismatched pcb in conn_recv!\n"); + if (reprap.Debug(moduleNetwork) && !inInterrupt()) + { + reprap.GetPlatform().Message(UsbMessage, "Network: Mismatched pcb in conn_recv!\n"); + } tcp_abort(pcb); return ERR_ABRT; } diff --git a/src/Duet/Pins_Duet.h b/src/Duet/Pins_Duet.h index 8f17abdf..5d9e193a 100644 --- a/src/Duet/Pins_Duet.h +++ b/src/Duet/Pins_Duet.h @@ -4,12 +4,9 @@ #define FIRMWARE_NAME "RepRapFirmware for Duet" // Features definition -#define HAS_LWIP_NETWORKING 1 -#define HAS_WIFI_NETWORKING 0 +#define HAS_LEGACY_NETWORKING 1 #define HAS_CPU_TEMP_SENSOR 1 #define HAS_HIGH_SPEED_SD 1 -#define HAS_SMART_DRIVERS 0 -#define HAS_STALL_DETECT 0 #define HAS_VOLTAGE_MONITOR 0 #define HAS_VREF_MONITOR 0 #define ACTIVE_LOW_HEAT_ON 1 @@ -32,9 +29,8 @@ constexpr size_t DRIVES = 9; // The number of drives in the machine, includ #define DRIVES_(a,b,c,d,e,f,g,h,i,j,k,l) { a,b,c,d,e,f,g,h,i } constexpr size_t Heaters = 7; // The number of heaters in the machine; 0 is the heated bed even if there isn't one -#define HEATERS_(a,b,c,d,e,f,g,h) { a,b,c,d,e,f,g } - constexpr size_t NumExtraHeaterProtections = 4; // The number of extra heater protection instances +constexpr size_t NumThermistorInputs = 7; constexpr size_t MinAxes = 3; // The minimum and default number of axes constexpr size_t MaxAxes = 6; // The maximum number of movement axes in the machine, usually just X, Y and Z, <= DRIVES @@ -73,7 +69,7 @@ constexpr float STEPPER_DAC_VOLTAGE_RANGE = 2.02; // Stepper motor current constexpr float STEPPER_DAC_VOLTAGE_OFFSET = -0.025; // Stepper motor current offset voltage for E1 if using a DAC // HEATERS -constexpr Pin TEMP_SENSE_PINS[Heaters] = { 5, 4, 0, 7, 8, 9, 11 }; // Analogue pin numbers +constexpr Pin TEMP_SENSE_PINS[NumThermistorInputs] = { 5, 4, 0, 7, 8, 9, 11 }; // Analogue pin numbers constexpr Pin HEAT_ON_PINS[Heaters] = { 6, X5, X7, 7, 8, 9, X17 }; // Heater Channel 7 (pin X17) is shared with Fan1 // Default thermistor parameters @@ -127,7 +123,8 @@ constexpr int Dac0DigitalPin = 66; // Arduino Due pin number correspon // COOLING FANS constexpr size_t NUM_FANS = 2; constexpr Pin COOLING_FAN_PINS[NUM_FANS] = { X6, X17 }; // Pin D34 is PWM capable but not an Arduino PWM pin - use X6 instead -constexpr Pin COOLING_FAN_RPM_PIN = 23; // Pin PA15 +constexpr size_t NumTachos = 1; +constexpr Pin TachoPins[NumTachos] = { 23 }; // Pin PA15 // SD cards constexpr size_t NumSdCards = 2; diff --git a/src/DuetM/Pins_DuetM.h b/src/DuetM/Pins_DuetM.h index 3825e32b..f59ec75c 100644 --- a/src/DuetM/Pins_DuetM.h +++ b/src/DuetM/Pins_DuetM.h @@ -12,6 +12,7 @@ # define DEFAULT_BOARD_TYPE BoardType::DuetM_10 constexpr size_t NumFirmwareUpdateModules = 1; // 1 module # define IAP_FIRMWARE_FILE "DuetMaestroFirmware.bin" +#define IAP_UPDATE_FILE "iap4s.bin" // Features definition #define HAS_LWIP_NETWORKING 0 @@ -20,14 +21,12 @@ constexpr size_t NumFirmwareUpdateModules = 1; // 1 module #define HAS_CPU_TEMP_SENSOR 1 #define HAS_HIGH_SPEED_SD 1 -#define HAS_SMART_DRIVERS 1 -#define HAS_STALL_DETECT 0 +#define SUPPORT_TMC22xx 1 +#define TMC22xx_HAS_MUX 1 #define HAS_VOLTAGE_MONITOR 1 #define HAS_VREF_MONITOR 1 #define ACTIVE_LOW_HEAT_ON 1 -#define IAP_UPDATE_FILE "iap4s.bin" - #define SUPPORT_INKJET 0 // set nonzero to support inkjet control #define SUPPORT_ROLAND 0 // set nonzero to support Roland mill #define SUPPORT_SCANNER 0 // set zero to disable support for FreeLSS scanners @@ -42,10 +41,9 @@ constexpr size_t DRIVES = 7; // The maximum number of drives supported by t constexpr size_t MaxSmartDrivers = 7; // The maximum number of smart drivers #define DRIVES_(a,b,c,d,e,f,g,h,i,j,k,l) { a,b,c,d,e,f,g } -constexpr size_t Heaters = 4; // The number of heaters/thermistors in the machine. Duet M has 3 heaters but 4 thermistors. -#define HEATERS_(a,b,c,d,e,f,g,h) { a,b,c } - +constexpr size_t Heaters = 3; // The number of heaters/thermistors in the machine. Duet M has 3 heaters but 4 thermistors. constexpr size_t NumExtraHeaterProtections = 4; // The number of extra heater protection instances +constexpr size_t NumThermistorInputs = 4; constexpr size_t MinAxes = 3; // The minimum and default number of axes constexpr size_t MaxAxes = 6; // The maximum number of movement axes in the machine, usually just X, Y and Z, <= DRIVES @@ -69,6 +67,24 @@ constexpr Pin GlobalTmcEnablePin = 1; // The pin that drives ENN of all drive constexpr Pin ENABLE_PINS[DRIVES] = { NoPin, NoPin, NoPin, NoPin, NoPin, 63, 61 }; constexpr Pin STEP_PINS[DRIVES] = { 56, 38, 64, 40, 41, 67, 57 }; constexpr Pin DIRECTION_PINS[DRIVES] = { 54, 8, 30, 33, 42, 18, 60 }; + +// UART interface to stepper drivers +Uart * const UART_TMC_DRV = UART0; +const IRQn UART_TMC_DRV_IRQn = UART0_IRQn; +const uint32_t ID_UART_TMC_DRV = ID_UART0; +const uint8_t UART_TMC_DRV_PINS = APINS_UART0; + +#define UART_TMC_DRV_Handler UART0_Handler + +// Define the baud rate used to send/receive data to/from the drivers. +// If we assume a worst case clock frequency of 8MHz then the maximum baud rate is 8MHz/16 = 500kbaud. +// We send data via a 1K series resistor. Even if we assume a 200pF load on the shared UART line, this gives a 200ns time constant, which is much less than the 2us bit time @ 500kbaud. +// To write a register we need to send 8 bytes. To read a register we send 4 bytes and receive 8 bytes after a programmable delay. +// So at 500kbaud it takes about 128us to write a register, and 192us+ to read a register. +// In testing I found that 500kbaud was not reliable, so now using 200kbaud. +const uint32_t DriversBaudRate = 200000; +const uint32_t TransferTimeout = 10; // any transfer should complete within 10 ticks @ 1ms/tick + constexpr Pin DriverMuxPins[3] = { 50, 52, 53 }; // Pins that control the UART multiplexer, LSB first // Endstops @@ -77,8 +93,8 @@ constexpr Pin DriverMuxPins[3] = { 50, 52, 53 }; // Pins that control the UART m constexpr Pin END_STOP_PINS[DRIVES] = { 24, 32, 46, 25, 43, NoPin, NoPin }; // Heaters and thermistors -constexpr Pin HEAT_ON_PINS[Heaters] = { 36, 37, 16, NoPin }; // Heater pin numbers -constexpr Pin TEMP_SENSE_PINS[Heaters] = { 20, 26, 66, 27 }; // Thermistor pin numbers +constexpr Pin HEAT_ON_PINS[Heaters] = { 36, 37, 16 }; // Heater pin numbers +constexpr Pin TEMP_SENSE_PINS[NumThermistorInputs] = { 20, 26, 66, 27 }; // Thermistor pin numbers constexpr Pin VssaSensePin = 19; constexpr Pin VrefSensePin = 17; @@ -117,7 +133,8 @@ constexpr Pin DiagPin = Z_PROBE_MOD_PIN; // Cooling fans constexpr size_t NUM_FANS = 3; constexpr Pin COOLING_FAN_PINS[NUM_FANS] = { 59, 58, 65 }; -constexpr Pin COOLING_FAN_RPM_PIN = 21; +constexpr size_t NumTachos = 1; +constexpr Pin TachoPins[NumTachos] = { 21 }; // SD cards constexpr size_t NumSdCards = 2; diff --git a/src/DuetNG/DueXn.cpp b/src/DuetNG/DueXn.cpp index 1e3418b2..3a642559 100644 --- a/src/DuetNG/DueXn.cpp +++ b/src/DuetNG/DueXn.cpp @@ -59,12 +59,15 @@ namespace DuetExpansion { reprap.GetPlatform().InitI2c(); // initialise I2C - bool ret = dueXnExpander.begin(DueXnAddress); - if (!ret) + // DC 2018-07-12: occasionally the SX1509B isn't found after doing a software reset, so try a few more attempts + bool ret; + unsigned int attempts = 0; + do { - delay(100); // wait a little while - ret = dueXnExpander.begin(DueXnAddress); // do 1 retry - } + ++attempts; + delay(50); + ret = dueXnExpander.begin(DueXnAddress); + } while (!ret && attempts < 5); if (ret) { @@ -102,12 +105,15 @@ namespace DuetExpansion void AdditionalOutputInit() { reprap.GetPlatform().InitI2c(); // initialise I2C - bool ret = additionalIoExpander.begin(AdditionalIoExpanderAddress); - if (!ret) + + bool ret; + unsigned int attempts = 0; + do { - delay(100); // wait a little while - ret = additionalIoExpander.begin(AdditionalIoExpanderAddress); // do 1 retry - } + ++attempts; + delay(50); + ret = additionalIoExpander.begin(AdditionalIoExpanderAddress); + } while (!ret && attempts < 5); if (ret) { diff --git a/src/DuetNG/Pins_DuetNG.h b/src/DuetNG/Pins_DuetNG.h index 3aa83879..8d4f7334 100644 --- a/src/DuetNG/Pins_DuetNG.h +++ b/src/DuetNG/Pins_DuetNG.h @@ -5,6 +5,7 @@ # define DEFAULT_BOARD_TYPE BoardType::DuetWiFi_10 constexpr size_t NumFirmwareUpdateModules = 4; // 3 modules, plus one for manual upload to WiFi module (module 2 is now unused) # define IAP_FIRMWARE_FILE "Duet2CombinedFirmware.bin" +#define IAP_UPDATE_FILE "iap4e.bin" // using the same IAP file for both Duet WiFi and Duet Ethernet # define WIFI_FIRMWARE_FILE "DuetWiFiServer.bin" // Features definition @@ -15,14 +16,11 @@ constexpr size_t NumFirmwareUpdateModules = 4; // 3 modules, plus one for manua #define HAS_CPU_TEMP_SENSOR 1 #define HAS_HIGH_SPEED_SD 1 -#define HAS_SMART_DRIVERS 1 -#define HAS_STALL_DETECT 1 +#define SUPPORT_TMC2660 1 #define HAS_VOLTAGE_MONITOR 1 #define HAS_VREF_MONITOR 0 #define ACTIVE_LOW_HEAT_ON 1 -#define IAP_UPDATE_FILE "iap4e.bin" // using the same IAP file for both Duet WiFi and Duet Ethernet - #define SUPPORT_INKJET 0 // set nonzero to support inkjet control #define SUPPORT_ROLAND 0 // set nonzero to support Roland mill #define SUPPORT_SCANNER 1 // set zero to disable support for FreeLSS scanners @@ -39,9 +37,8 @@ constexpr size_t MaxSmartDrivers = 10; // The maximum number of smart drivers #define DRIVES_(a,b,c,d,e,f,g,h,i,j,k,l) { a,b,c,d,e,f,g,h,i,j,k,l } constexpr size_t Heaters = 8; // The number of heaters in the machine; 0 is the heated bed even if there isn't one -#define HEATERS_(a,b,c,d,e,f,g,h) { a,b,c,d,e,f,g,h } - constexpr size_t NumExtraHeaterProtections = 8; // The number of extra heater protection instances +constexpr size_t NumThermistorInputs = 8; constexpr size_t MinAxes = 3; // The minimum and default number of axes constexpr size_t MaxAxes = 9; // The maximum number of movement axes in the machine, usually just X, Y and Z, <= DRIVES @@ -49,7 +46,7 @@ constexpr size_t MaxAxes = 9; // The maximum number of movement axes in the #define AXES_(a,b,c,d,e,f,g,h,i) { a,b,c,d,e,f,g,h,i } constexpr size_t MaxExtruders = DRIVES - MinAxes; // The maximum number of extruders -constexpr size_t MaxDriversPerAxis = 4; // The maximum number of stepper drivers assigned to one axis +constexpr size_t MaxDriversPerAxis = 5; // The maximum number of stepper drivers assigned to one axis constexpr size_t NUM_SERIAL_CHANNELS = 2; // The number of serial IO channels (USB and one auxiliary UART) #define SERIAL_MAIN_DEVICE SerialUSB @@ -79,7 +76,7 @@ constexpr Pin END_STOP_PINS[DRIVES] = { 46, 02, 93, 74, 48, 96, 97, 98, 99, 17, constexpr Pin DUEX_END_STOP_PINS[5] = { 200, 203, 202, 201, 213 }; // these replace endstops 5-9 if a DueX is present // HEATERS -constexpr Pin TEMP_SENSE_PINS[Heaters] = { 45, 47, 44, 61, 62, 63, 59, 18 }; // Thermistor pin numbers +constexpr Pin TEMP_SENSE_PINS[NumThermistorInputs] = { 45, 47, 44, 61, 62, 63, 59, 18 }; // Thermistor pin numbers constexpr Pin HEAT_ON_PINS[Heaters] = { 19, 20, 16, 35, 37, 40, 43, 15 }; // Heater pin numbers (heater 7 pin TBC) // Default thermistor parameters @@ -131,7 +128,8 @@ constexpr Pin DiagPin = Z_PROBE_MOD_PIN; // Cooling fans constexpr size_t NUM_FANS = 9; constexpr Pin COOLING_FAN_PINS[NUM_FANS] = { 55, 58, 00, 212, 207, 206, 205, 204, 215 }; -constexpr Pin COOLING_FAN_RPM_PIN = 102; // PB6 on expansion connector +constexpr size_t NumTachos = 1; +constexpr Pin TachoPins[NumTachos] = { 102 }; // PB6 on expansion connector // SD cards constexpr size_t NumSdCards = 2; @@ -158,12 +156,12 @@ constexpr Pin ROLAND_RTS_PIN = xx; // Expansion pin 12, PA13_RXD1 #endif // M42 and M208 commands now use logical pin numbers, not firmware pin numbers. -// This next definition defines the highest one. // This is the mapping from logical pins 60+ to firmware pin numbers constexpr Pin SpecialPinMap[] = { 24, 97, 98, 99, // We allow CS5-CS8 to be used because few users need >4 thermocouples or RTDs - 7 // SW_ENC on CONN_SD + 7, // SW_ENC on CONN_SD + Z_PROBE_MOD_PIN }; constexpr Pin DueX5GpioPinMap[] = { 211, 210, 209, 208 }; // Pins 100-103 map to GPIO 1-4 on DueX5 // We also allow pins 120-135 to be used if there is an additional SX1509B expander diff --git a/src/DuetNG/SX1509.cpp b/src/DuetNG/SX1509.cpp index 9b7a54d7..3c601e28 100644 --- a/src/DuetNG/SX1509.cpp +++ b/src/DuetNG/SX1509.cpp @@ -21,11 +21,10 @@ local, and you've found our code helpful, please buy us a round! Distributed as-is; no warranty is given. ******************************************************************************/ -#include "Core.h" +#include "RepRapFirmware.h" #include "Wire.h" #include "SX1509.h" #include "SX1509Registers.h" -#include "Pins.h" SX1509::SX1509() : _clkX(0), errorCount(0) { @@ -38,6 +37,7 @@ bool SX1509::begin(uint8_t address) deviceAddress = address; reset(); + delay(2); // not sure this is needed, but it may help pwmPins = 0; diff --git a/src/Fans/DotStarLed.cpp b/src/Fans/DotStarLed.cpp new file mode 100644 index 00000000..d8854c74 --- /dev/null +++ b/src/Fans/DotStarLed.cpp @@ -0,0 +1,107 @@ +/* + * DotStarLed.cpp + * + * Created on: 18 Jul 2018 + * Author: David + */ + +#include "DotStarLed.h" + +#if SUPPORT_DOTSTAR_LED + +#include "GCodes/GCodeBuffer.h" +#include "sam/drivers/pdc/pdc.h" +#include "sam/drivers/usart/usart.h" + +namespace DotStarLed +{ + const unsigned int MaxChunkSize = 30; // maximum number of LEDs we DMA to in one go (most strips have 30 LEDs/metre) + + static unsigned int numRemaining = 0; // how much of the current request remains after the current transfer + static bool busy = false; + static uint8_t chunkBuffer[3 * MaxChunkSize]; // BGR values for each LED in the chunk + + void Init() + { + // Set up the USART pins for SPI mode + // The pins are already set up for SPI in the pins table + ConfigurePin(GetPinDescription(DotStarMosiPin)); + ConfigurePin(GetPinDescription(DotStarSclkPin)); + + // Enable the clock to the USART + pmc_enable_periph_clk(DotStarUsartId); + + // Set the USART in SPI mode, with the clock high when inactive, data changing on the falling edge of the clock + DotStarUsart->US_IDR = ~0u; + DotStarUsart->US_CR = US_CR_RSTRX | US_CR_RSTTX | US_CR_RXDIS | US_CR_TXDIS; + DotStarUsart->US_MR = US_MR_USART_MODE_SPI_MASTER + | US_MR_USCLKS_MCK + | US_MR_CHRL_8_BIT + | US_MR_CHMODE_NORMAL + | US_MR_CPOL + | US_MR_CLKO; + DotStarUsart->US_BRGR = VARIANT_MCK/DotStarSpiClockFrequency; // set SPI clock frequency + DotStarUsart->US_CR = US_CR_RSTRX | US_CR_RSTTX | US_CR_RXDIS | US_CR_TXDIS | US_CR_RSTSTA; + + // Initialise variables + numRemaining = 0; + busy = false; + } + + GCodeResult SetColours(GCodeBuffer& gb, const StringRef& reply) + { + if (busy) // if we sent something + { + if ((DotStarUsart->US_CSR & US_CSR_ENDTX) == 0) // if we are still sending + { + return GCodeResult::notFinished; + } + busy = false; // we finished the last transfer + } + + bool seen = false; + uint32_t red = 0, green = 0, blue = 0, numLeds = MaxChunkSize; + gb.TryGetUIValue('R', red, seen); + gb.TryGetUIValue('U', green, seen); + gb.TryGetUIValue('B', blue, seen); + gb.TryGetUIValue('S', numLeds, seen); + if (!seen || numLeds == 0) + { + return GCodeResult::ok; + } + + if (numRemaining != 0) + { + numLeds = numRemaining; // we have come back to do another chunk + } + + // Set up the data in the DMA buffer + unsigned int thisChunk = min<unsigned int>(numLeds, MaxChunkSize); + uint8_t *p = chunkBuffer; + for (unsigned int i = 0; i < thisChunk; ++i) + { + // According to the Adafruit web site, current production uses the order BGR + *p++ = (uint8_t)blue; + *p++ = (uint8_t)green; + *p++ = (uint8_t)red; + } + + // DMA the data + DotStarUsart->US_CR = US_CR_RSTRX | US_CR_RSTTX | US_CR_TXDIS; // reset transmitter and receiver, disable transmitter + Pdc * const usartPdc = usart_get_pdc_base(DotStarUsart); + usartPdc->PERIPH_PTCR = PERIPH_PTCR_RXTDIS | PERIPH_PTCR_TXTDIS; // disable the PDC + usartPdc->PERIPH_TPR = reinterpret_cast<uint32_t>(&chunkBuffer); + usartPdc->PERIPH_TCR = 3 * thisChunk; + usartPdc->PERIPH_PTCR = PERIPH_PTCR_TXTEN; // enable the PDC to send data + + DotStarUsart->US_CR = US_CR_TXEN; // enable transmitter + + numRemaining = numLeds - thisChunk; + busy = true; + return (numRemaining == 0) ? GCodeResult::ok : GCodeResult::notFinished; + } +}; + +#endif + +// End diff --git a/src/Fans/DotStarLed.h b/src/Fans/DotStarLed.h new file mode 100644 index 00000000..902918ec --- /dev/null +++ b/src/Fans/DotStarLed.h @@ -0,0 +1,22 @@ +/* + * DotStarLed.h + * + * Created on: 18 Jul 2018 + * Author: David + */ + +#ifndef SRC_FANS_DOTSTARLED_H_ +#define SRC_FANS_DOTSTARLED_H_ + +#include "RepRapFirmware.h" +#include "GCodes/GCodeResult.h" + +class GCodeBuffer; + +namespace DotStarLed +{ + void Init(); + GCodeResult SetColours(GCodeBuffer& gb, const StringRef& reply); +}; + +#endif /* SRC_FANS_DOTSTARLED_H_ */ diff --git a/src/Fan.cpp b/src/Fans/Fan.cpp index 0351abce..65ab5ba9 100644 --- a/src/Fan.cpp +++ b/src/Fans/Fan.cpp @@ -11,13 +11,13 @@ #include "GCodes/GCodeBuffer.h" #include "Heating/Heat.h" -void Fan::Init(Pin p_pin, bool hwInverted) +void Fan::Init(Pin p_pin, bool hwInverted, PwmFrequency p_freq) { isConfigured = false; val = lastVal = 0.0; minVal = 0.1; // 10% minimum fan speed blipTime = 100; // 100ms fan blip - freq = DefaultFanPwmFreq; + freq = p_freq; pin = p_pin; hardwareInverted = hwInverted; inverted = blipping = false; diff --git a/src/Fan.h b/src/Fans/Fan.h index f0e5598f..371b1264 100644 --- a/src/Fan.h +++ b/src/Fans/Fan.h @@ -29,7 +29,7 @@ public: bool IsEnabled() const { return pin != NoPin; } float GetConfiguredPwm() const { return val; } // returns the configured PWM. Actual PWM may be different, e.g. due to blipping or for thermostatic fans. - void Init(Pin p_pin, bool hwInverted); + void Init(Pin p_pin, bool hwInverted, PwmFrequency p_freq); void SetPwm(float speed); bool HasMonitoredHeaters() const { return heatersMonitored != 0; } void SetHeatersMonitored(HeatersMonitoredBitmap h); diff --git a/src/Fans/Tacho.cpp b/src/Fans/Tacho.cpp new file mode 100644 index 00000000..60d6e920 --- /dev/null +++ b/src/Fans/Tacho.cpp @@ -0,0 +1,53 @@ +/* + * Tacho.cpp + * + * Created on: 16 Jul 2018 + * Author: David + */ + +#include "Tacho.h" +#include "Platform.h" + +void FanInterrupt(CallbackParameter cb) +{ + static_cast<Tacho *>(cb.vp)->Interrupt(); +} + +Tacho::Tacho() : fanInterruptCount(0), fanLastResetTime(0), fanInterval(0), pin(NoPin) +{ +} + +void Tacho::Init(Pin p_pin) +{ + pin = p_pin; + if (pin != NoPin) + { + pinModeDuet(pin, INPUT_PULLUP, 1500); // enable pullup and 1500Hz debounce filter (500Hz only worked up to 7000RPM) + attachInterrupt(pin, FanInterrupt, INTERRUPT_MODE_FALLING, this); + } +} + +uint32_t Tacho::GetRPM() const +{ + // The ISR sets fanInterval to the number of step interrupt clocks it took to get fanMaxInterruptCount interrupts. + // We get 2 tacho pulses per revolution, hence 2 interrupts per revolution. + // However, if the fan stops then we get no interrupts and fanInterval stops getting updated. + // We must recognise this and return zero. + return (fanInterval != 0 && Platform::GetInterruptClocks() - fanLastResetTime < 3 * StepClockRate) // if we have a reading and it is less than 3 second old + ? (StepClockRate * fanMaxInterruptCount * (60/2))/fanInterval // then calculate RPM assuming 2 interrupts per rev + : 0; // else assume fan is off or tacho not connected +} + +void Tacho::Interrupt() +{ + ++fanInterruptCount; + if (fanInterruptCount == fanMaxInterruptCount) + { + const uint32_t now = Platform::GetInterruptClocks(); + fanInterval = now - fanLastResetTime; + fanLastResetTime = now; + fanInterruptCount = 0; + } +} + +// End diff --git a/src/Fans/Tacho.h b/src/Fans/Tacho.h new file mode 100644 index 00000000..279f0d91 --- /dev/null +++ b/src/Fans/Tacho.h @@ -0,0 +1,32 @@ +/* + * Tacho.h + * + * Created on: 16 Jul 2018 + * Author: David + */ + +#ifndef SRC_FANS_TACHO_H_ +#define SRC_FANS_TACHO_H_ + +#include "RepRapFirmware.h" + +class Tacho +{ +public: + Tacho(); + void Init(Pin p_pin); + uint32_t GetRPM() const; + + void Interrupt(); + +private: + static constexpr uint32_t fanMaxInterruptCount = 32; // number of fan interrupts that we average over + + uint32_t fanInterruptCount; // accessed only in ISR, so no need to declare it volatile + volatile uint32_t fanLastResetTime; // time (microseconds) at which we last reset the interrupt count, accessed inside and outside ISR + volatile uint32_t fanInterval; // written by ISR, read outside the ISR + + Pin pin; +}; + +#endif /* SRC_FANS_TACHO_H_ */ diff --git a/src/GCodes/GCodeBuffer.cpp b/src/GCodes/GCodeBuffer.cpp index df5b0044..817c66a8 100644 --- a/src/GCodes/GCodeBuffer.cpp +++ b/src/GCodes/GCodeBuffer.cpp @@ -8,13 +8,16 @@ //************************************************************************************* #include "GCodeBuffer.h" +#include "GCodes.h" #include "GCodeInput.h" #include "Platform.h" #include "RepRap.h" +static constexpr char eofString[] = EOF_STRING; // What's at the end of an HTML file? + // Create a default GCodeBuffer GCodeBuffer::GCodeBuffer(const char* id, MessageType mt, bool usesCodeQueue) - : machineState(new GCodeMachineState()), identity(id), writingFileDirectory(nullptr), + : machineState(new GCodeMachineState()), identity(id), fileBeingWritten(nullptr), writingFileSize(0), eofStringCounter(0), toolNumberAdjust(0), responseMessageType(mt), checksumRequired(false), queueCodes(usesCodeQueue), binaryWriting(false) { Init(); @@ -252,7 +255,7 @@ bool GCodeBuffer::LineFinished() gcodeBuffer[gcodeLineEnd] = 0; const bool badChecksum = (hadChecksum && computedChecksum != declaredChecksum); const bool missingChecksum = (checksumRequired && !hadChecksum && machineState->previous == nullptr); - if (reprap.Debug(moduleGcodes) && !writingFileDirectory) + if (reprap.Debug(moduleGcodes) && fileBeingWritten == nullptr) { reprap.GetPlatform().MessageF(DebugMessage, "%s%s: %s\n", identity, ((badChecksum) ? "(bad-csum)" : (missingChecksum) ? "(no-csum)" : ""), gcodeBuffer); } @@ -759,6 +762,28 @@ void GCodeBuffer::TryGetBValue(char c, bool& val, bool& seen) } } +// Try to get an int array exactly 'numVals' long after parameter letter 'c'. +// If the wrong number of values is provided, generate an error message and return true. +// Else set 'seen' if we saw the letter and value, and return false. +bool GCodeBuffer::TryGetUIArray(char c, size_t numVals, uint32_t vals[], const StringRef& reply, bool& seen, bool doPad) +{ + if (Seen(c)) + { + size_t count = numVals; + GetUnsignedArray(vals, count, doPad); + if (count == numVals) + { + seen = true; + } + else + { + reply.printf("Wrong number of values after '\''%c'\'', expected %d", c, numVals); + return true; + } + } + return false; +} + // Try to get a float array exactly 'numVals' long after parameter letter 'c'. // If the wrong number of values is provided, generate an error message and return true. // Else set 'seen' if we saw the letter and value, and return false. @@ -961,16 +986,20 @@ bool GCodeBuffer::PopState() } // Abort execution of any files or macros being executed, returning true if any files were closed +// We now avoid popping the state if we were not executing from a file, so that if DWC or PanelDue is used to jog the axes before they are homed, we don't report stack underflow. void GCodeBuffer::AbortFile(FileGCodeInput* fileInput) { - do + if (machineState->fileState.IsLive()) { - if (machineState->fileState.IsLive()) + do { - fileInput->Reset(machineState->fileState); - machineState->fileState.Close(); - } - } while (PopState()); // abandon any macros + if (machineState->fileState.IsLive()) + { + fileInput->Reset(machineState->fileState); + machineState->fileState.Close(); + } + } while (PopState()); // abandon any macros + } } // Return true if this source is executing a file macro @@ -1010,4 +1039,134 @@ void GCodeBuffer::PrintCommand(const StringRef& s) const } } +// Open a file to write to +bool GCodeBuffer::OpenFileToWrite(const char* directory, const char* fileName, const FilePosition size, const bool binaryWrite, const uint32_t fileCRC32) +{ + fileBeingWritten = reprap.GetPlatform().OpenFile(directory, fileName, OpenMode::write); + eofStringCounter = 0; + writingFileSize = size; + if (fileBeingWritten == nullptr) + { + return false; + } + + crc32 = fileCRC32; + binaryWriting = binaryWrite; + return true; +} + +// Write the current GCode to file +void GCodeBuffer::WriteToFile() +{ + if (GetCommandLetter() == 'M') + { + if (GetCommandNumber() == 29) // end of file? + { + fileBeingWritten->Close(); + fileBeingWritten = nullptr; + SetFinished(true); + const char* const r = (reprap.GetPlatform().Emulating() == Compatibility::marlin) ? "Done saving file." : ""; + reprap.GetGCodes().HandleReply(*this, GCodeResult::ok, r); + return; + } + } + else if (GetCommandLetter() == 'G' && GetCommandNumber() == 998) // resend request? + { + if (Seen('P')) + { + SetFinished(true); + String<ShortScratchStringLength> scratchString; + scratchString.printf("%" PRIi32 "\n", GetIValue()); + reprap.GetGCodes().HandleReply(*this, GCodeResult::ok, scratchString.c_str()); + return; + } + } + + fileBeingWritten->Write(Buffer()); + fileBeingWritten->Write('\n'); + SetFinished(true); +} + +void GCodeBuffer::WriteBinaryToFile(char b) +{ + if (b == eofString[eofStringCounter] && writingFileSize == 0) + { + eofStringCounter++; + if (eofStringCounter < ARRAY_SIZE(eofString) - 1) + { + return; // not reached end of input yet + } + } + else + { + if (eofStringCounter != 0) + { + for (uint8_t i = 0; i < eofStringCounter; i++) + { + fileBeingWritten->Write(eofString[i]); + } + eofStringCounter = 0; + } + fileBeingWritten->Write(b); // writing one character at a time isn't very efficient, but uploading HTML files via USB is rarely done these days + if (writingFileSize == 0 || fileBeingWritten->Length() < writingFileSize) + { + return; // not reached end of input yet + } + } + + FinishWritingBinary(); +} + +void GCodeBuffer::FinishWritingBinary() +{ + // If we get here then we have come to the end of the data + fileBeingWritten->Close(); + const bool crcOk = (crc32 == fileBeingWritten->GetCRC32() || crc32 == 0); + fileBeingWritten = nullptr; + binaryWriting = false; + if (crcOk) + { + const char* const r = (reprap.GetPlatform().Emulating() == Compatibility::marlin) ? "Done saving file." : ""; + reprap.GetGCodes().HandleReply(*this, GCodeResult::ok, r); + } + else + { + reprap.GetGCodes().HandleReply(*this, GCodeResult::error, "CRC32 checksum doesn't match"); + } +} + +// This is called when we reach the end of the file we are reading from +void GCodeBuffer::FileEnded() +{ + if (IsWritingBinary()) + { + // We are in the middle of writing a binary file but the input stream has ended + FinishWritingBinary(); + } + else + { + Put('\n'); // append a newline in case the file didn't end with one + if (IsWritingFile()) + { + bool gotM29 = false; + if (IsReady()) // if we have a complete command + { + gotM29 = (GetCommandLetter() == 'M' && GetCommandNumber() == 29); + if (!gotM29) // if it wasn't M29, write it to file + { + fileBeingWritten->Write(Buffer()); + fileBeingWritten->Write('\n'); + } + } + + // Close the file whether or not we saw M29 + fileBeingWritten->Close(); + fileBeingWritten = nullptr; + SetFinished(true); + const char* const r = (reprap.GetPlatform().Emulating() == Compatibility::marlin) ? "Done saving file." : ""; + reprap.GetGCodes().HandleReply(*this, GCodeResult::ok, r); + } + } +} + // End diff --git a/src/GCodes/GCodeBuffer.h b/src/GCodes/GCodeBuffer.h index 6675cf2a..f35ec003 100644 --- a/src/GCodes/GCodeBuffer.h +++ b/src/GCodes/GCodeBuffer.h @@ -23,6 +23,7 @@ public: bool Put(char c) __attribute__((hot)); // Add a character to the end void Put(const char *str, size_t len); // Add an entire string, overwriting any existing content void Put(const char *str); // Add a null-terminated string, overwriting any existing content + void FileEnded(); // Called when we reach the end of the file we are reading from bool Seen(char c) __attribute__((hot)); // Is a character present? char GetCommandLetter() const { return commandLetter; } @@ -48,7 +49,8 @@ public: void TryGetUIValue(char c, uint32_t& val, bool& seen); void TryGetBValue(char c, bool& val, bool& seen); bool TryGetFloatArray(char c, size_t numVals, float vals[], const StringRef& reply, bool& seen, bool doPad = false); - bool TryGetQuotedString(char c, const StringRef& str, bool& seen); + bool TryGetUIArray(char c, size_t numVals, uint32_t vals[], const StringRef& reply, bool& seen, bool doPad = false); + bool TryGetQuotedString(char c, const StringRef& str, bool& seen); bool TryGetPossiblyQuotedString(char c, const StringRef& str, bool& seen); const char* Buffer() const; @@ -57,8 +59,6 @@ public: bool IsReady() const; // Return true if a gcode is ready but hasn't been started yet bool IsExecuting() const; // Return true if a gcode has been started and is not paused void SetFinished(bool f); // Set the G Code executed (or not) - const char* WritingFileDirectory() const; // If we are writing the G Code to a file, where that file is - void SetWritingFileDirectory(const char* wfd); // Set the directory for the file to write the GCode in int GetToolNumberAdjust() const { return toolNumberAdjust; } void SetToolNumberAdjust(int arg) { toolNumberAdjust = arg; } void SetCommsProperties(uint32_t arg) { checksumRequired = (arg & 1); } @@ -79,10 +79,17 @@ public: bool CanQueueCodes() const; void MessageAcknowledged(bool cancelled); FilePosition GetFilePosition(size_t bytesCached) const; // Get the file position at the start of the current command - bool IsWritingBinary() const; // returns true if writing binary - void SetBinaryWriting(bool state); // set true if writing binary - uint32_t GetCRC32() const; - void SetCRC32(uint32_t newCRC32); + + bool OpenFileToWrite(const char* directory, const char* fileName, const FilePosition size, const bool binaryWrite, const uint32_t fileCRC32); // open a file to write to + bool IsWritingFile() const { return fileBeingWritten != nullptr; } // returns true if writing a file + void WriteToFile(); // write the current GCode to file + + bool IsWritingBinary() const { return IsWritingFile() && binaryWriting; } // returns true if writing binary + void WriteBinaryToFile(char b); // write a byte to the file + void FinishWritingBinary(); + + size_t CommandLength() const { return commandEnd - commandStart; } // get the length of the current command + const char* CommandStart() const { return gcodeBuffer + commandStart; } // get the start of the current command void PrintCommand(const StringRef& s) const; @@ -123,7 +130,11 @@ private: unsigned int gcodeLineEnd; // Number of characters in the entire line of gcode int readPointer; // Where in the buffer to read next GCodeBufferState bufferState; // Idle, executing or paused - const char* writingFileDirectory; // If the G Code is going into a file, where that is + + FileStore *fileBeingWritten; // If we are copying GCodes to a file, which file it is + FilePosition writingFileSize; // Size of the file being written, or zero if not known + uint8_t eofStringCounter; // Check the... + int toolNumberAdjust; // The adjustment to tool numbers in commands we receive const MessageType responseMessageType; // The message type we use for responses to commands coming from this channel unsigned int lineNumber; @@ -145,26 +156,6 @@ private: bool binaryWriting; // Executing gcode or writing binary file? }; -inline uint32_t GCodeBuffer::GetCRC32() const -{ - return crc32; -} - -inline void GCodeBuffer::SetCRC32(uint32_t newCRC32) -{ - crc32 = newCRC32; -} - -inline bool GCodeBuffer::IsWritingBinary() const -{ - return binaryWriting; -} - -inline void GCodeBuffer::SetBinaryWriting(bool state) -{ - binaryWriting = state; -} - inline const char* GCodeBuffer::Buffer() const { return gcodeBuffer; @@ -190,16 +181,6 @@ inline bool GCodeBuffer::IsExecuting() const return bufferState == GCodeBufferState::executing; } -inline const char* GCodeBuffer::WritingFileDirectory() const -{ - return writingFileDirectory; -} - -inline void GCodeBuffer::SetWritingFileDirectory(const char* wfd) -{ - writingFileDirectory = wfd; -} - inline GCodeState GCodeBuffer::GetState() const { return machineState->state; diff --git a/src/GCodes/GCodeInput.cpp b/src/GCodes/GCodeInput.cpp index 2e7383db..d8e159e8 100644 --- a/src/GCodes/GCodeInput.cpp +++ b/src/GCodes/GCodeInput.cpp @@ -21,18 +21,16 @@ bool GCodeInput::FillBuffer(GCodeBuffer *gb) if (gb->IsWritingBinary()) { // HTML uploads are handled by the GCodes class - reprap.GetGCodes().WriteHTMLToFile(*gb, c); + gb->WriteBinaryToFile(c); } else if (gb->Put(c)) { - // Check if we can finish a file upload - if (gb->WritingFileDirectory() != nullptr) + if (gb->IsWritingFile()) { - reprap.GetGCodes().WriteGCodeToFile(*gb); - gb->SetFinished(true); + gb->WriteToFile(); } - // Code is complete, stop here + // Code is complete or has been written to file, so stop here return true; } } @@ -116,7 +114,7 @@ void NetworkGCodeInput::Put(MessageType mtype, char c) return; } - state = (c == 'M') ? GCodeInputState::doingMCode : GCodeInputState::doingCode; + state = (c == 'M' || c == 'm') ? GCodeInputState::doingMCode : GCodeInputState::doingCode; break; case GCodeInputState::doingCode: diff --git a/src/GCodes/GCodeQueue.cpp b/src/GCodes/GCodeQueue.cpp index 207bfd17..97240d36 100644 --- a/src/GCodes/GCodeQueue.cpp +++ b/src/GCodes/GCodeQueue.cpp @@ -32,118 +32,94 @@ GCodeQueue::GCodeQueue() : freeItems(nullptr), queuedItems(nullptr) } #endif - switch (gb.GetCommandLetter()) + // Don't queue anything if no moves are being performed + const uint32_t scheduledMoves = reprap.GetMove().GetScheduledMoves(); + if (scheduledMoves != reprap.GetMove().GetCompletedMoves()) { - case 'G': + switch (gb.GetCommandLetter()) { - const int code = gb.GetCommandNumber(); - return code == 10 && gb.Seen('P'); // Set active/standby temperatures - } + case 'G': + { + const int code = gb.GetCommandNumber(); + return code == 10 && gb.Seen('P'); // Set active/standby temperatures + } - case 'M': - { - switch (gb.GetCommandNumber()) + case 'M': { - case 3: // spindle control - case 4: // spindle control - case 5: // spindle control - case 42: // set IO pin - case 106: // fan control - case 107: // fan off - case 104: // set temperatures and return immediately - case 140: // set bed temperature and return immediately - case 141: // set chamber temperature and return immediately - case 144: // bed standby - case 117: // display message - case 280: // set servo - case 300: // beep - case 420: // set RGB colour - return true; - - case 291: + switch (gb.GetCommandNumber()) { - bool seen = false; - int32_t sParam = 1; - gb.TryGetIValue('S', sParam, seen); - return sParam < 2; // queue non-blocking messages only + case 3: // spindle control + case 4: // spindle control + case 5: // spindle control + case 42: // set IO pin + case 106: // fan control + case 107: // fan off + case 104: // set temperatures and return immediately + case 140: // set bed temperature and return immediately + case 141: // set chamber temperature and return immediately + case 144: // bed standby + case 117: // display message + case 280: // set servo + case 300: // beep + case 420: // set RGB colour + return true; + + case 291: + { + bool seen = false; + int32_t sParam = 1; + gb.TryGetIValue('S', sParam, seen); + return sParam < 2; // queue non-blocking messages only + } + + default: + break; } - - default: - break; } - } - break; + break; - default: - break; + default: + break; + } } return false; } -// If moves are scheduled and a command can be queued, try to queue the command in the passed GCodeBuffer. -// If successful, return true to indicate it has been queued and the caller should not execute it. -// If the queue is full, free up the oldest queued entry by copying its command to our own gcode buffer so that we have room to queue the original command. +// Try to queue the command in the passed GCodeBuffer. +// If successful, return true to indicate it has been queued. +// If the queue is full or the command is too long to be queued, return false. bool GCodeQueue::QueueCode(GCodeBuffer &gb) { - // Don't queue anything if no moves are being performed - const uint32_t scheduledMoves = reprap.GetMove().GetScheduledMoves(); - bool queueCode = (scheduledMoves != reprap.GetMove().GetCompletedMoves()); - - if (queueCode) + // Can we queue this code somewhere? + if (freeItems == nullptr || gb.CommandLength() > SHORT_GCODE_LENGTH - 1) { - char codeToRun[GCODE_LENGTH]; - size_t codeToRunLength; - - // Can we queue this code somewhere? - if (freeItems == nullptr) - { - // No - we've run out of free items. Run the first outstanding code - queueCode = false; - codeToRunLength = strlen(queuedItems->code) + 1; - SafeStrncpy(codeToRun, queuedItems->code, ARRAY_SIZE(codeToRun)); - - // Release the first queued item so that it can be reused later - QueuedCode * const item = queuedItems; - queuedItems = item->next; - item->next = nullptr; - freeItems = item; - } - - // Unlink a free element and assign gb's code to it - QueuedCode * const code = freeItems; - freeItems = code->next; - code->AssignFrom(gb); - code->executeAtMove = scheduledMoves; - code->next = nullptr; + return false; + } - // Append it to the list of queued codes - if (queuedItems == nullptr) - { - queuedItems = code; - } - else - { - QueuedCode *last = queuedItems; - while (last->Next() != nullptr) - { - last = last->Next(); - } - last->next = code; - } + // Unlink a free element and assign gb's code to it + QueuedCode * const code = freeItems; + freeItems = code->next; + code->AssignFrom(gb); + code->executeAtMove = reprap.GetMove().GetScheduledMoves(); + code->next = nullptr; - // Overwrite the passed gb's content if we could not store its original code - if (!queueCode) + // Append it to the list of queued codes + if (queuedItems == nullptr) + { + queuedItems = code; + } + else + { + QueuedCode *last = queuedItems; + while (last->Next() != nullptr) { - if (reprap.Debug(moduleGcodes)) - { - reprap.GetPlatform().Message(DebugMessage, "(swap) "); - } - gb.Put(codeToRun, codeToRunLength); + last = last->Next(); } + last->next = code; } - return queueCode; + return true; } bool GCodeQueue::FillBuffer(GCodeBuffer *gb) @@ -237,7 +213,9 @@ void GCodeQueue::Diagnostics(MessageType mtype) void QueuedCode::AssignFrom(GCodeBuffer &gb) { toolNumberAdjust = gb.GetToolNumberAdjust(); - SafeStrncpy(code, gb.Buffer(), ARRAY_SIZE(code)); + const size_t length = min<size_t>(gb.CommandLength(), ARRAY_SIZE(code) - 1); + memcpy(code, gb.CommandStart(), length); + code[length] = 0; } void QueuedCode::AssignTo(GCodeBuffer *gb) diff --git a/src/GCodes/GCodeQueue.h b/src/GCodes/GCodeQueue.h index 26f6e065..a366218f 100644 --- a/src/GCodes/GCodeQueue.h +++ b/src/GCodes/GCodeQueue.h @@ -10,8 +10,6 @@ #include "RepRapFirmware.h" #include "GCodeBuffer.h" -const size_t maxQueuedCodes = 8; // How many codes can be queued? - class QueuedCode; class GCodeQueue @@ -44,7 +42,7 @@ public: private: QueuedCode *next; - char code[GCODE_LENGTH]; + char code[SHORT_GCODE_LENGTH]; uint32_t executeAtMove; int toolNumberAdjust; diff --git a/src/GCodes/GCodes.cpp b/src/GCodes/GCodes.cpp index 812d4eef..170e35ea 100644 --- a/src/GCodes/GCodes.cpp +++ b/src/GCodes/GCodes.cpp @@ -43,6 +43,10 @@ # include "SAME70_TEST/LinuxComm.h" #endif +#if SUPPORT_DOTSTAR_LED +# include "Fans/DotStarLed.h" +#endif + const size_t gcodeReplyLength = 2048; // long enough to pass back a reasonable number of files in response to M20 // Set up some default values for special moves, e.g. for Z probing and firmware retraction @@ -65,26 +69,37 @@ GCodes::GCodes(Platform& p) : #endif isFlashing(false), fileBeingHashed(nullptr), lastWarningMillis(0) { - httpInput = new NetworkGCodeInput(); - telnetInput = new NetworkGCodeInput(); fileInput = new FileGCodeInput(); serialInput = new StreamGCodeInput(SERIAL_MAIN_DEVICE); +#ifdef SERIAL_AUX_DEVICE auxInput = new StreamGCodeInput(SERIAL_AUX_DEVICE); -#if HAS_LINUX_INTERFACE - spiInput = new NetworkGCodeInput(); #endif - +#if HAS_NETWORKING + httpInput = new NetworkGCodeInput(); + telnetInput = new NetworkGCodeInput(); httpGCode = new GCodeBuffer("http", HttpMessage, false); telnetGCode = new GCodeBuffer("telnet", TelnetMessage, true); +#else + httpGCode = telnetGCode = nullptr; +#endif fileGCode = new GCodeBuffer("file", GenericMessage, true); serialGCode = new GCodeBuffer("serial", UsbMessage, true); +#ifdef SERIAL_AUX_DEVICE auxGCode = new GCodeBuffer("aux", LcdMessage, false); +#else + auxGCode = nullptr; +#endif daemonGCode = new GCodeBuffer("daemon", GenericMessage, false); #if SUPPORT_12864_LCD lcdGCode = new GCodeBuffer("lcd", GenericMessage, false); +#else + lcdGCode = nullptr; #endif #if HAS_LINUX_INTERFACE + spiInput = new NetworkGCodeInput(); spiGCode = new GCodeBuffer("spi", SpiMessage, false); +#else + spiGCode = nullptr; #endif queuedGCode = new GCodeBuffer("queue", GenericMessage, false); autoPauseGCode = new GCodeBuffer("autopause", GenericMessage, false); @@ -114,16 +129,14 @@ void GCodes::Init() { rawExtruderTotalByDrive[extruder] = 0.0; } - eofString = EOF_STRING; - eofStringCounter = 0; - eofStringLength = strlen(eofString); + runningConfigFile = false; m501SeenInConfigFile = false; doingToolChange = false; active = true; - fileSize = 0; limitAxes = noMovesBeforeHoming = true; SetAllAxesNotHomed(); + for (size_t i = 0; i < NUM_FANS; ++i) { pausedFanSpeeds[i] = 0.0; @@ -132,7 +145,7 @@ void GCodes::Init() retractLength = DefaultRetractLength; retractExtra = 0.0; - currentZHop = retractHop = 0.0; + retractHop = 0.0; retractSpeed = unRetractSpeed = DefaultRetractSpeed * SecondsToMinutes; isRetracted = false; lastAuxStatusReportType = -1; // no status reports requested yet @@ -146,6 +159,11 @@ void GCodes::Init() #if SUPPORT_SCANNER reprap.GetScanner().SetGCodeBuffer(serialGCode); #endif + +#if SUPPORT_DOTSTAR_LED + DotStarLed::Init(); +#endif + #if HAS_LINUX_INTERFACE reprap.GetLinuxComm().SetGCodeInput(spiInput); #endif @@ -156,26 +174,22 @@ void GCodes::Reset() { // Here we could reset the input sources as well, but this would mess up M122\nM999 // because both codes are sent at once from the web interface. Hence we don't do this here. - httpGCode->Reset(); - telnetGCode->Reset(); - fileGCode->Reset(); - serialGCode->Reset(); - auxGCode->Reset(); - auxGCode->SetCommsProperties(1); // by default, we require a checksum on the aux port - daemonGCode->Reset(); -#if SUPPORT_12864_LCD - lcdGCode->Reset(); -#endif -#if HAS_LINUX_INTERFACE - spiGCode->Reset(); -#endif - queuedGCode->Reset(); - autoPauseGCode->Reset(); + for (GCodeBuffer *gb : gcodeSources) + { + if (gb != nullptr) + { + gb->Reset(); + } + } + + if (auxGCode != nullptr) + { + auxGCode->SetCommsProperties(1); // by default, we require a checksum on the aux port + } nextGcodeSource = 0; fileToPrint.Close(); - fileBeingWritten = nullptr; speedFactor = SecondsToMinutes; // default is just to convert from mm/minute to mm/second for (size_t i = 0; i < MaxExtruders; ++i) @@ -206,7 +220,8 @@ void GCodes::Reset() } ClearMove(); - ClearBabyStepping(); + ClearBabyStepping(); // clear this before calling ToolOffsetInverseTransform + currentZHop = 0.0; // clear this before calling ToolOffsetInverseTransform moveBuffer.xAxes = DefaultXAxisMapping; moveBuffer.yAxes = DefaultYAxisMapping; moveBuffer.virtualExtruderPosition = 0.0; @@ -258,7 +273,7 @@ bool GCodes::DoingFileMacro() const { for (const GCodeBuffer *gb : gcodeSources) { - if (gb->IsDoingFileMacro()) + if (gb != nullptr && gb->IsDoingFileMacro()) { return true; } @@ -314,9 +329,12 @@ bool GCodes::IsDaemonBusy() const // Copy the feed rate etc. from the daemon to the input channels void GCodes::CopyConfigFinalValues(GCodeBuffer& gb) { - for (size_t i = 0; i < ARRAY_SIZE(gcodeSources); ++i) + for (GCodeBuffer *gb2 : gcodeSources) { - gcodeSources[i]->MachineState().CopyStateFrom(gb.MachineState()); + if (gb2 != nullptr) + { + gb2->MachineState().CopyStateFrom(gb.MachineState()); + } } } @@ -343,12 +361,15 @@ void GCodes::Spin() GCodeBuffer *gbp = autoPauseGCode; if (gbp->IsCompletelyIdle() && !(gbp->MachineState().fileState.IsLive())) { - gbp = gcodeSources[nextGcodeSource]; - ++nextGcodeSource; // move on to the next gcode source ready for next time - if (nextGcodeSource == ARRAY_SIZE(gcodeSources) - 1) // the last one is autoPauseGCode, so don't do it again + do { - nextGcodeSource = 0; - } + gbp = gcodeSources[nextGcodeSource]; + ++nextGcodeSource; // move on to the next gcode source ready for next time + if (nextGcodeSource == ARRAY_SIZE(gcodeSources) - 1) // the last one is autoPauseGCode, so don't do it again + { + nextGcodeSource = 0; + } + } while (gbp == nullptr); // we must have at least one GCode source, so this can't loop indefinitely } GCodeBuffer& gb = *gbp; @@ -1415,6 +1436,7 @@ void GCodes::StartNextGCode(GCodeBuffer& gb, const StringRef& reply) // Code queue codeQueue->FillBuffer(queuedGCode); } +#if HAS_NETWORKING else if (&gb == httpGCode) { // Webserver @@ -1425,6 +1447,7 @@ void GCodes::StartNextGCode(GCodeBuffer& gb, const StringRef& reply) // Telnet telnetInput->FillBuffer(telnetGCode); } +#endif else if ( &gb == serialGCode #if SUPPORT_SCANNER && !reprap.GetScanner().IsRegistered() @@ -1434,6 +1457,7 @@ void GCodes::StartNextGCode(GCodeBuffer& gb, const StringRef& reply) // USB interface. This line may be shared with a 3D scanner serialInput->FillBuffer(serialGCode); } +#ifdef SERIAL_AUX_DEVICE else if (&gb == auxGCode) { // Aux serial port (typically PanelDue) @@ -1443,6 +1467,7 @@ void GCodes::StartNextGCode(GCodeBuffer& gb, const StringRef& reply) platform.SetAuxDetected(); } } +#endif #if HAS_LINUX_INTERFACE else if (&gb == spiGCode) { @@ -1463,7 +1488,11 @@ void GCodes::DoFilePrint(GCodeBuffer& gb, const StringRef& reply) // Yes - fill up the GCodeBuffer and run the next code if (fileInput->FillBuffer(&gb)) { - gb.SetFinished(ActOnCode(gb, reply)); + // We read some data, but we don't necessarily have a command available because we may be executing M28 within a file + if (gb.IsReady()) + { + gb.SetFinished(ActOnCode(gb, reply)); + } } break; @@ -1475,7 +1504,8 @@ void GCodes::DoFilePrint(GCodeBuffer& gb, const StringRef& reply) // We have reached the end of the file. Check for the last line of gcode not ending in newline. if (!gb.StartingNewCode()) // if there is something in the buffer { - if (gb.Put('\n')) // in case there wasn't a newline ending the file + gb.FileEnded(); // append a newline and deal with any pending file write + if (gb.IsReady()) { gb.SetFinished(ActOnCode(gb, reply)); return; @@ -1981,6 +2011,17 @@ void GCodes::SaveResumeInfo(bool wasPowerFailure) && reprap.GetMove().WriteResumeSettings(f); // load grid, if we are using one if (ok) { + // Write a G92 command to say where the head is. This is useful if we can't Z-home the printer with a print on the bed and the Z steps/mm is high. + buf.copy("G92"); + for (size_t axis = 0; axis < numVisibleAxes; ++axis) + { + buf.catf(" %c%.3f", axisLetters[axis], (double)pauseRestorePoint.moveCoords[axis]); + } + buf.cat('\n'); + ok = f->Write(buf.c_str()); + } + if (ok) + { buf.printf("M98 P%s\n", RESUME_PROLOGUE_G); // call the prologue - must contain at least M116 ok = f->Write(buf.c_str()) && platform.WriteFanSettings(f); // set the speeds of non-thermostatic fans @@ -2029,7 +2070,7 @@ void GCodes::SaveResumeInfo(bool wasPowerFailure) { if (axis != Z_AXIS) { - buf.catf(" %c%.2f", axisLetters[axis], (double)pauseRestorePoint.moveCoords[axis]); + buf.catf(" %c%.3f", axisLetters[axis], (double)pauseRestorePoint.moveCoords[axis]); } } @@ -2069,9 +2110,12 @@ void GCodes::Diagnostics(MessageType mtype) const GCodeBuffer * const movementOwner = resourceOwners[MoveResource]; platform.MessageF(mtype, "Movement lock held by %s\n", (movementOwner == nullptr) ? "null" : movementOwner->GetIdentity()); - for (size_t i = 0; i < ARRAY_SIZE(gcodeSources); ++i) + for (GCodeBuffer *gb : gcodeSources) { - gcodeSources[i]->Diagnostics(mtype); + if (gb != nullptr) + { + gb->Diagnostics(mtype); + } } codeQueue->Diagnostics(mtype); @@ -3080,6 +3124,7 @@ bool GCodes::SaveHeightMap(GCodeBuffer& gb, const StringRef& reply) const void GCodes::ClearBedMapping() { reprap.GetMove().SetIdentityTransform(); + reprap.GetMove().GetCurrentUserPosition(moveBuffer.coords, 0, reprap.GetCurrentXAxes(), reprap.GetCurrentYAxes()); ToolOffsetInverseTransform(moveBuffer.coords, currentUserPosition); // update user coordinates to remove any height map offset there was at the current position } @@ -3125,114 +3170,6 @@ void GCodes::GetCurrentCoordinates(const StringRef& s) const } } -bool GCodes::OpenFileToWrite(GCodeBuffer& gb, const char* directory, const char* fileName, const FilePosition size, const bool binaryWrite, const uint32_t fileCRC32) -{ - fileBeingWritten = platform.OpenFile(directory, fileName, OpenMode::write); - eofStringCounter = 0; - fileSize = size; - if (fileBeingWritten == nullptr) - { - platform.MessageF(ErrorMessage, "Failed to open GCode file \"%s\" for writing.\n", fileName); - return false; - } - else - { - gb.SetCRC32(fileCRC32); - gb.SetBinaryWriting(binaryWrite); - gb.SetWritingFileDirectory(directory); - return true; - } -} - -void GCodes::WriteHTMLToFile(GCodeBuffer& gb, char b) -{ - if (fileBeingWritten == nullptr) - { - platform.Message(ErrorMessage, "Attempt to write to a null file.\n"); - return; - } - - if ((b == eofString[eofStringCounter]) && (fileSize == 0)) - { - eofStringCounter++; - if (eofStringCounter >= eofStringLength) - { - FinishWrite(gb); - } - } - else - { - if (eofStringCounter != 0) - { - for (uint8_t i = 0; i < eofStringCounter; i++) - { - fileBeingWritten->Write(eofString[i]); - } - eofStringCounter = 0; - } - fileBeingWritten->Write(b); // writing one character at a time isn't very efficient, but uploading HTML files via USB is rarely done these days - if (fileSize > 0 && fileBeingWritten->Length() >= fileSize) - { - FinishWrite(gb); - } - } -} - -void GCodes::FinishWrite(GCodeBuffer& gb) -{ - const char* r; - fileBeingWritten->Close(); - if ((gb.GetCRC32() != fileBeingWritten->GetCRC32()) && (gb.GetCRC32() != 0)) - { - r = "Error: CRC32 checksum doesn't match"; - } - else - { - r = (platform.Emulating() == Compatibility::marlin) ? "Done saving file." : ""; - } - fileBeingWritten = nullptr; - gb.SetBinaryWriting(false); - gb.SetWritingFileDirectory(nullptr); - - HandleReply(gb, GCodeResult::ok, r); -} - -void GCodes::WriteGCodeToFile(GCodeBuffer& gb) -{ - if (fileBeingWritten == nullptr) - { - platform.Message(ErrorMessage, "Attempt to write to a null file.\n"); - return; - } - - if (gb.GetCommandLetter() == 'M') - { - if (gb.GetCommandNumber() == 29) // end of file? - { - fileBeingWritten->Close(); - fileBeingWritten = nullptr; - gb.SetWritingFileDirectory(nullptr); - const char* r = (platform.Emulating() == Compatibility::marlin) ? "Done saving file." : ""; - HandleReply(gb, GCodeResult::ok, r); - return; - } - } - else if (gb.GetCommandLetter() == 'G' && gb.GetCommandNumber() == 998) // resend request? - { - if (gb.Seen('P')) - { - String<ShortScratchStringLength> scratchString; - scratchString.printf("%" PRIi32 "\n", gb.GetIValue()); - HandleReply(gb, GCodeResult::ok, scratchString.c_str()); - return; - } - } - - fileBeingWritten->Write(gb.Buffer()); - fileBeingWritten->Write('\n'); - HandleReply(gb, GCodeResult::ok, ""); -} - // Set up a file to print, but don't print it yet. // If successful return true, else write an error message to reply and return false bool GCodes::QueueFileToPrint(const char* fileName, const StringRef& reply) @@ -3556,8 +3493,8 @@ bool GCodes::ManageTool(GCodeBuffer& gb, const StringRef& reply) } // Check if filament support is being enforced - const bool forceFilament = (gb.Seen('L') && gb.GetIValue() > 0); - + const int filamentDrive = gb.Seen('L') ? gb.GetIValue() + : ((dCount == 1) ? drives[0] : -1); if (seen) { // Add or delete tool, so start by deleting the old one with this number, if any @@ -3570,7 +3507,7 @@ bool GCodes::ManageTool(GCodeBuffer& gb, const StringRef& reply) } else { - Tool* const tool = Tool::Create(toolNumber, name.c_str(), drives, dCount, heaters, hCount, xMap, yMap, fanMap, forceFilament, reply); + Tool* const tool = Tool::Create(toolNumber, name.c_str(), drives, dCount, heaters, hCount, xMap, yMap, fanMap, filamentDrive, reply); if (tool == nullptr) { return true; @@ -4936,7 +4873,7 @@ const char* GCodes::GetMachineModeString() const } // Respond to a heater fault. The heater has already been turned off and its status set to 'fault' when this is called from the Heat module. -// The Heat module will generate an appropriate error message, so on need to do that here. +// The Heat module will generate an appropriate error message, so no need to do that here. void GCodes::HandleHeaterFault(int heater) { if (heaterFaultState == HeaterFaultState::noFault && fileGCode->OriginalMachineState().fileState.IsLive()) @@ -4978,11 +4915,12 @@ void GCodes::CheckHeaterFault() reprap.GetHeat().SwitchOffAll(true); platform.MessageF(ErrorMessage, "Shutting down due to un-cleared heater fault after %lu seconds\n", heaterFaultTimeout/1000); heaterFaultState = HeaterFaultState::stopping; + heaterFaultTime = millis(); } break; case HeaterFaultState::stopping: - if (millis() - heaterFaultTime >= 2000) // wait 2 seconds for the message to be picked up by DWC and PanelDue + if (millis() - heaterFaultTime >= 1000) // wait 1 second for the message to be picked up by DWC and PanelDue { platform.AtxPowerOff(false); heaterFaultState = HeaterFaultState::stopped; diff --git a/src/GCodes/GCodes.h b/src/GCodes/GCodes.h index 334da7ff..c3ed2977 100644 --- a/src/GCodes/GCodes.h +++ b/src/GCodes/GCodes.h @@ -169,11 +169,10 @@ public: float GetBabyStepOffset() const { return currentBabyStepZOffset; } // Get the current baby stepping Z offset const float *GetUserPosition() const { return currentUserPosition; } // Return the current user position +#if HAS_NETWORKING NetworkGCodeInput *GetHTTPInput() const { return httpInput; } NetworkGCodeInput *GetTelnetInput() const { return telnetInput; } - - void WriteGCodeToFile(GCodeBuffer& gb); // Write this GCode into a file - void WriteHTMLToFile(GCodeBuffer& gb, char b); // Save an HTML file (usually to upload a new web interface) +#endif bool IsFlashing() const { return isFlashing; } // Is a new firmware binary going to be flashed? @@ -223,6 +222,7 @@ public: #endif void SetMappedFanSpeed(float f); // Set the mapped fan speed + void HandleReply(GCodeBuffer& gb, GCodeResult rslt, const char *reply); // Handle G-Code replies private: GCodes(const GCodes&); // private copy constructor to prevent copying @@ -262,7 +262,6 @@ private: bool HandleMcode(GCodeBuffer& gb, const StringRef& reply); // Do an M code bool HandleTcode(GCodeBuffer& gb, const StringRef& reply); // Do a T code bool HandleResult(GCodeBuffer& gb, GCodeResult rslt, const StringRef& reply); - void HandleReply(GCodeBuffer& gb, GCodeResult rslt, const char *reply); // Handle G-Code replies void HandleReply(GCodeBuffer& gb, bool error, OutputBuffer *reply); const char* DoStraightMove(GCodeBuffer& gb, bool isCoordinated) __attribute__((hot)); // Execute a straight move returning any error message @@ -291,9 +290,7 @@ private: bool Push(GCodeBuffer& gb); // Push feedrate etc on the stack void Pop(GCodeBuffer& gb); // Pop feedrate etc void DisableDrives(); // Turn the motors off - bool OpenFileToWrite(GCodeBuffer& gb, const char* directory, const char* fileName, const FilePosition size, const bool binaryWrite, const uint32_t fileCRC32); // Start saving GCodes in a file - void FinishWrite(GCodeBuffer& gb); // Finish writing to the file and respond bool SendConfigToLine(); // Deal with M503 GCodeResult OffsetAxes(GCodeBuffer& gb, const StringRef& reply); // Set/report offsets @@ -381,37 +378,32 @@ private: Platform& platform; // The RepRap machine - NetworkGCodeInput* httpInput; // These cache incoming G-codes... - NetworkGCodeInput* telnetInput; // ... FileGCodeInput* fileInput; // ... StreamGCodeInput* serialInput; // ... - StreamGCodeInput* auxInput; // ... + +#if HAS_NETWORKING + NetworkGCodeInput* httpInput; // These cache incoming G-codes... + NetworkGCodeInput* telnetInput; // ... +#endif +#ifdef SERIAL_AUX_DEVICE + StreamGCodeInput* auxInput; // ...for the GCodeBuffers below +#endif #if HAS_LINUX_INTERFACE NetworkGCodeInput* spiInput; // ...for the GCodeBuffers below #endif -#if SUPPORT_12864_LCD || HAS_LINUX_INTERFACE - GCodeBuffer* gcodeSources[9]; // The various sources of gcodes -#else - GCodeBuffer* gcodeSources[8]; // The various sources of gcodes -#endif + GCodeBuffer* gcodeSources[10]; // The various sources of gcodes GCodeBuffer*& httpGCode = gcodeSources[0]; GCodeBuffer*& telnetGCode = gcodeSources[1]; GCodeBuffer*& fileGCode = gcodeSources[2]; GCodeBuffer*& serialGCode = gcodeSources[3]; - GCodeBuffer*& auxGCode = gcodeSources[4]; // This one is for the LCD display on the async serial interface + GCodeBuffer*& auxGCode = gcodeSources[4]; // This one is for the PanelDue on the async serial interface GCodeBuffer*& daemonGCode = gcodeSources[5]; // Used for executing config.g and trigger macro files GCodeBuffer*& queuedGCode = gcodeSources[6]; -#if SUPPORT_12864_LCD - GCodeBuffer*& lcdGCode = gcodeSources[7]; // This one for the internally-supported LCD - GCodeBuffer*& autoPauseGCode = gcodeSources[8]; // ***THIS ONE MUST BE LAST*** GCode state machine used to run macros on power fail, heater faults and filament out -#elif HAS_LINUX_INTERFACE - GCodeBuffer*& spiGCode = gcodeSources[7]; - GCodeBuffer*& autoPauseGCode = gcodeSources[8]; // ***THIS ONE MUST BE LAST*** GCode state machine used to run macros on power fail, heater faults and filament out -#else - GCodeBuffer*& autoPauseGCode = gcodeSources[7]; // ***THIS ONE MUST BE LAST*** GCode state machine used to run macros on power fail, heater faults and filament out -#endif + GCodeBuffer*& lcdGCode = gcodeSources[7]; // This one for the 12864 LCD + GCodeBuffer*& spiGCode = gcodeSources[8]; + GCodeBuffer*& autoPauseGCode = gcodeSources[9]; // ***THIS ONE MUST BE LAST*** GCode state machine used to run macros on power fail, heater faults and filament out size_t nextGcodeSource; // The one to check next @@ -485,13 +477,6 @@ private: FileData fileToPrint; // The next file to print FilePosition fileOffsetToPrint; // The offset to print from - FileStore* fileBeingWritten; // A file to write G Codes (or sometimes HTML) to - FilePosition fileSize; // Size of the file being written - - const char* eofString; // What's at the end of an HTML file? - uint8_t eofStringCounter; // Check the... - uint8_t eofStringLength; // ... EoF string as we read. - char axisLetters[MaxAxes + 1]; // The names of the axes, with a null terminator bool limitAxes; // Don't think outside the box bool noMovesBeforeHoming; // Don't allow movement prior to homing the associates axes diff --git a/src/GCodes/GCodes2.cpp b/src/GCodes/GCodes2.cpp index da2056da..e4c5e33c 100644 --- a/src/GCodes/GCodes2.cpp +++ b/src/GCodes/GCodes2.cpp @@ -30,16 +30,22 @@ # include "FirmwareUpdater.h" #endif -#if defined(DUET_NG) -# include "TMC2660.h" -#elif defined(DUET_M) -# include "TMC22xx.h" +#if SUPPORT_TMC2660 +# include "StepperDrivers/TMC2660/TMC2660.h" +#endif + +#if SUPPORT_TMC22xx +# include "StepperDrivers/TMC22xx/TMC22xx.h" #endif #if SUPPORT_12864_LCD # include "Display/Display.h" #endif +#if SUPPORT_DOTSTAR_LED +# include "Fans/DotStarLed.h" +#endif + #include <utility> // for std::swap // If the code to act on is completed, this returns true, otherwise false. @@ -61,6 +67,8 @@ bool GCodes::ActOnCode(GCodeBuffer& gb, const StringRef& reply) HandleReply(gb, GCodeResult::ok, ""); return true; } + + return false; // we should queue this code but we can't, so wait until we can either execute it or queue it } switch (gb.GetCommandLetter()) @@ -230,9 +238,13 @@ bool GCodes::HandleGcode(GCodeBuffer& gb, const StringRef& reply) result = LoadHeightMap(gb, reply); break; - default: // clear height map + case 2: // clear height map ClearBedMapping(); break; + + default: + result = GCodeResult::badOrMissingParameter; + break; } } break; @@ -850,7 +862,7 @@ bool GCodes::HandleMcode(GCodeBuffer& gb, const StringRef& reply) String<MaxFilenameLength> filename; if (gb.GetUnprecedentedString(filename.GetRef())) { - const bool ok = OpenFileToWrite(gb, platform.GetGCodeDir(), filename.c_str(), 0, false, 0); + const bool ok = gb.OpenFileToWrite(platform.GetGCodeDir(), filename.c_str(), 0, false, 0); if (ok) { reply.printf("Writing to file: %s", filename.c_str()); @@ -1730,6 +1742,12 @@ bool GCodes::HandleMcode(GCodeBuffer& gb, const StringRef& reply) } break; +#if SUPPORT_DOTSTAR_LED + case 150: + result = DotStarLed::SetColours(gb, reply); + break; +#endif + case 190: // Set bed temperature and wait case 191: // Set chamber temperature and wait if ( !LockMovementAndWaitForStandstill(gb) // wait until movement has finished @@ -2016,13 +2034,16 @@ bool GCodes::HandleMcode(GCodeBuffer& gb, const StringRef& reply) { // Update the feed rate for ALL input sources, and all feed rates on the stack const float speedFactorRatio = newSpeedFactor / speedFactor; - for (size_t i = 0; i < ARRAY_SIZE(gcodeSources); ++i) + for (GCodeBuffer *gb2 : gcodeSources) { - GCodeMachineState *ms = &gcodeSources[i]->MachineState(); - while (ms != nullptr) + if (gb2 != nullptr) { - ms->feedRate *= speedFactorRatio; - ms = ms->previous; + GCodeMachineState *ms = &gb2->MachineState(); + while (ms != nullptr) + { + ms->feedRate *= speedFactorRatio; + ms = ms->previous; + } } } // If the last move hasn't gone yet, update its feed rate too if it is not a firmware retraction @@ -2257,13 +2278,13 @@ bool GCodes::HandleMcode(GCodeBuffer& gb, const StringRef& reply) case 303: // Run PID tuning if (gb.Seen('H')) { - const int heater = gb.GetIValue(); + const unsigned int heater = gb.GetUIValue(); const float temperature = (gb.Seen('S')) ? gb.GetFValue() : reprap.GetHeat().IsBedHeater(heater) ? 75.0 : reprap.GetHeat().IsChamberHeater(heater) ? 50.0 : 200.0; const float maxPwm = (gb.Seen('P')) ? gb.GetFValue() : reprap.GetHeat().GetHeaterModel(heater).GetMaxPwm(); - if (heater < 0 || heater >= (int)Heaters) + if (heater >= Heaters) { reply.copy("Bad heater number in M303 command"); } @@ -2297,8 +2318,8 @@ bool GCodes::HandleMcode(GCodeBuffer& gb, const StringRef& reply) case 307: // Set heater process model parameters if (gb.Seen('H')) { - const int heater = gb.GetIValue(); - if (heater >= 0 && heater < (int)Heaters) + const unsigned int heater = gb.GetUIValue(); + if (heater < Heaters) { const FopDt& model = reprap.GetHeat().GetHeaterModel(heater); bool seen = false; @@ -2963,7 +2984,7 @@ bool GCodes::HandleMcode(GCodeBuffer& gb, const StringRef& reply) } const FilePosition size = (gb.Seen('S') ? (FilePosition)gb.GetIValue() : 0); const uint32_t crc32 = (gb.Seen('C') ? gb.GetUIValue() : 0); - const bool ok = OpenFileToWrite(gb, folder, filename.c_str(), size, true, crc32); + const bool ok = gb.OpenFileToWrite(folder, filename.c_str(), size, true, crc32); if (ok) { reply.printf("Writing to file: %s", filename.c_str()); @@ -2976,15 +2997,19 @@ bool GCodes::HandleMcode(GCodeBuffer& gb, const StringRef& reply) } break; - case 561: // Set identity transform (also clears bed probe grid) + case 561: // Set identity transform and disable height map + if (!LockMovementAndWaitForStandstill(gb)) + { + return false; + } ClearBedMapping(); break; case 562: // Reset temperature fault - use with great caution if (gb.Seen('P')) { - const int heater = gb.GetIValue(); - if (heater >= 0 && heater < (int)Heaters) + const unsigned int heater = gb.GetUIValue(); + if (heater < Heaters) { reprap.ClearTemperatureFault(heater); } @@ -2997,7 +3022,7 @@ bool GCodes::HandleMcode(GCodeBuffer& gb, const StringRef& reply) else { // Clear all heater faults - for (int heater = 0; heater < (int)Heaters; ++heater) + for (unsigned int heater = 0; heater < Heaters; ++heater) { reprap.ClearTemperatureFault(heater); } @@ -3198,8 +3223,8 @@ bool GCodes::HandleMcode(GCodeBuffer& gb, const StringRef& reply) } if (gb.Seen('H')) { - const int heater = gb.GetIValue(); - if (heater >= 0 && heater < (int)Heaters) + const unsigned heater = gb.GetUIValue(); + if (heater < Heaters) { bool seenValue = false; float maxTempExcursion, maxFaultTime; @@ -3296,10 +3321,10 @@ bool GCodes::HandleMcode(GCodeBuffer& gb, const StringRef& reply) case 573: // Report heater average PWM if (gb.Seen('P')) { - const int heater = gb.GetIValue(); - if (heater >= 0 && heater < (int)Heaters) + const unsigned int heater = gb.GetUIValue(); + if (heater < Heaters) { - reply.printf("Average heater %d PWM: %.3f", heater, (double)reprap.GetHeat().GetAveragePWM(heater)); + reply.printf("Average heater %u PWM: %.3f", heater, (double)reprap.GetHeat().GetAveragePWM(heater)); } } break; @@ -3373,8 +3398,11 @@ bool GCodes::HandleMcode(GCodeBuffer& gb, const StringRef& reply) serialGCode->SetCommsProperties(val); break; case 1: - auxGCode->SetCommsProperties(val); - platform.SetAuxDetected(); + if (auxGCode != nullptr) + { + auxGCode->SetCommsProperties(val); + platform.SetAuxDetected(); + } break; default: break; diff --git a/src/Heating/Heat.cpp b/src/Heating/Heat.cpp index d56fbb83..3f819d62 100644 --- a/src/Heating/Heat.cpp +++ b/src/Heating/Heat.cpp @@ -102,6 +102,10 @@ void Heat::Init() for (size_t heater : ARRAY_INDICES(pids)) { heaterSensors[heater] = nullptr; // no temperature sensor assigned yet +#ifdef PCCB + // PCCB has no heaters by default, but we pretend that the LED outputs are heaters. So disable the PID controllers. + pids[heater]->Init(-1.0, -1.0, -1.0, true, false); +#else if (IsBedOrChamberHeater(heater)) { pids[heater]->Init(DefaultBedHeaterGain, DefaultBedHeaterTimeConstant, DefaultBedHeaterDeadTime, false, false); @@ -117,6 +121,7 @@ void Heat::Init() { pids[heater]->Init(DefaultHotEndHeaterGain, DefaultHotEndHeaterTimeConstant, DefaultHotEndHeaterDeadTime, true, false); } +#endif lastStandbyTools[heater] = nullptr; } @@ -134,8 +139,10 @@ void Heat::Init() #endif #if HAS_SMART_DRIVERS virtualHeaterSensors[1] = TemperatureSensor::Create(FirstTmcDriversSenseChannel); +#ifndef PCCB virtualHeaterSensors[2] = TemperatureSensor::Create(FirstTmcDriversSenseChannel + 1); #endif +#endif #if SUPPORT_DHT_SENSOR // Initialise static fields of the DHT sensor @@ -185,6 +192,8 @@ void Heat::Task() heaterBeingTuned = -1; } + reprap.KickHeatTaskWatchdog(); + // Delay until it is time again vTaskDelayUntil(&lastWakeTime, platform.HeatSampleInterval()); } @@ -630,8 +639,6 @@ HeaterProtection& Heat::AccessHeaterProtection(size_t index) const return *heaterProtections[index]; } - - // Updates the PIDs and HeaterProtection items after a heater change void Heat::UpdateHeaterProtection() { diff --git a/src/Heating/Sensors/TemperatureSensor.cpp b/src/Heating/Sensors/TemperatureSensor.cpp index 2f97a41a..12b45866 100644 --- a/src/Heating/Sensors/TemperatureSensor.cpp +++ b/src/Heating/Sensors/TemperatureSensor.cpp @@ -86,11 +86,11 @@ void TemperatureSensor::TryConfigureHeaterName(GCodeBuffer& gb, bool& seen) TemperatureSensor *TemperatureSensor::Create(unsigned int channel) { TemperatureSensor *ts = nullptr; - if (channel < Heaters) + if (channel < NumThermistorInputs) { ts = new Thermistor(channel, false); } - else if (FirstPT1000Channel <= channel && channel < FirstPT1000Channel + Heaters) + else if (FirstPT1000Channel <= channel && channel < FirstPT1000Channel + NumThermistorInputs) { ts = new Thermistor(channel, true); } diff --git a/src/Libraries/Fatfs/diskio.cpp b/src/Libraries/Fatfs/diskio.cpp index 6ee696eb..70656778 100644 --- a/src/Libraries/Fatfs/diskio.cpp +++ b/src/Libraries/Fatfs/diskio.cpp @@ -52,6 +52,15 @@ #include <cstring> +static unsigned int highestSdRetriesDone = 0; + +unsigned int DiskioGetAndClearMaxRetryCount() +{ + const unsigned int ret = highestSdRetriesDone; + highestSdRetriesDone = 0; + return ret; +} + //void debugPrintf(const char*, ...); //#if (SAM3S || SAM3U || SAM3N || SAM3XA_SERIES || SAM4S) @@ -161,22 +170,35 @@ DRESULT disk_read(BYTE drv, BYTE *buff, DWORD sector, BYTE count) #if ACCESS_MEM_TO_RAM MutexLocker lock((drv >= SD_MMC_HSMCI_MEM_CNT) ? Tasks::GetSpiMutex() : nullptr); - uint8_t uc_sector_size = mem_sector_size(drv); - uint32_t ul_last_sector_num; - - if (uc_sector_size == 0) { + const uint8_t uc_sector_size = mem_sector_size(drv); + if (uc_sector_size == 0) + { return RES_ERROR; } /* Check valid address */ + uint32_t ul_last_sector_num; mem_read_capacity(drv, &ul_last_sector_num); - if ((sector + count * uc_sector_size) > (ul_last_sector_num + 1) * uc_sector_size) { + if ((sector + count * uc_sector_size) > (ul_last_sector_num + 1) * uc_sector_size) + { return RES_PARERR; } /* Read the data */ - if (memory_2_ram(drv, sector, buff, count) != CTRL_GOOD) { - return RES_ERROR; + unsigned int retryNumber = 0; + while (memory_2_ram(drv, sector, buff, count) != CTRL_GOOD) + { + ++retryNumber; + if (retryNumber == MaxSdCardTries) + { + return RES_ERROR; + } + delay(SdCardRetryDelay); + } + + if (retryNumber > highestSdRetriesDone) + { + highestSdRetriesDone = retryNumber; } return RES_OK; @@ -208,23 +230,36 @@ DRESULT disk_write(BYTE drv, BYTE const *buff, DWORD sector, BYTE count) #if ACCESS_MEM_TO_RAM MutexLocker lock((drv >= SD_MMC_HSMCI_MEM_CNT) ? Tasks::GetSpiMutex() : nullptr); - uint8_t uc_sector_size = mem_sector_size(drv); - uint32_t ul_last_sector_num; + const uint8_t uc_sector_size = mem_sector_size(drv); - if (uc_sector_size == 0) { + if (uc_sector_size == 0) + { return RES_ERROR; } /* Check valid address */ + uint32_t ul_last_sector_num; mem_read_capacity(drv, &ul_last_sector_num); - if ((sector + count * uc_sector_size) > - (ul_last_sector_num + 1) * uc_sector_size) { + if ((sector + count * uc_sector_size) > (ul_last_sector_num + 1) * uc_sector_size) + { return RES_PARERR; } /* Write the data */ - if (ram_2_memory(drv, sector, buff, count) != CTRL_GOOD) { - return RES_ERROR; + unsigned int retryNumber = 0; + while (ram_2_memory(drv, sector, buff, count) != CTRL_GOOD) + { + ++retryNumber; + if (retryNumber == MaxSdCardTries) + { + return RES_ERROR; + } + delay(SdCardRetryDelay); + } + + if (retryNumber > highestSdRetriesDone) + { + highestSdRetriesDone = retryNumber; } return RES_OK; diff --git a/src/Libraries/Fatfs/diskio.h b/src/Libraries/Fatfs/diskio.h index 40817bc5..43e5966c 100644 --- a/src/Libraries/Fatfs/diskio.h +++ b/src/Libraries/Fatfs/diskio.h @@ -5,6 +5,7 @@ #ifndef _DISKIO #ifdef __cplusplus +unsigned int DiskioGetAndClearMaxRetryCount(); extern "C" { #endif diff --git a/src/Libraries/Fatfs/ff.h b/src/Libraries/Fatfs/ff.h index 7f0d91ab..9e89aa4f 100644 --- a/src/Libraries/Fatfs/ff.h +++ b/src/Libraries/Fatfs/ff.h @@ -193,7 +193,7 @@ typedef enum { FR_NO_FILESYSTEM, /* (13) There is no valid FAT volume */ FR_MKFS_ABORTED, /* (14) The f_mkfs() aborted due to any parameter error */ FR_TIMEOUT, /* (15) Could not get a grant to access the volume within defined period */ - FR_LOCKED, /* (16) The operation is rejected according to the file shareing policy */ + FR_LOCKED, /* (16) The operation is rejected according to the file sharing policy */ FR_NOT_ENOUGH_CORE, /* (17) LFN working buffer could not be allocated */ FR_TOO_MANY_OPEN_FILES, /* (18) Number of open files > _FS_SHARE */ FR_INVALID_PARAMETER /* (19) Given parameter is invalid */ diff --git a/src/Movement/BedProbing/RotaryCompensation.cpp b/src/Movement/BedProbing/RotaryCompensation.cpp deleted file mode 100644 index c7b48816..00000000 --- a/src/Movement/BedProbing/RotaryCompensation.cpp +++ /dev/null @@ -1,10 +0,0 @@ -/* - * RotaryCompensation.cpp - * - * Created on: Jul 4, 2018 - * Author: Christian - */ - - - - diff --git a/src/Movement/BedProbing/RotaryCompensation.h b/src/Movement/BedProbing/RotaryCompensation.h deleted file mode 100644 index 749c09d4..00000000 --- a/src/Movement/BedProbing/RotaryCompensation.h +++ /dev/null @@ -1,15 +0,0 @@ -/* - * RotaryCompensation.h - * - * Created on: Jul 4, 2018 - * Author: Christian - */ - -#ifndef SRC_MOVEMENT_BEDPROBING_ROTARYCOMPENSATION_H_ -#define SRC_MOVEMENT_BEDPROBING_ROTARYCOMPENSATION_H_ - - - - - -#endif /* SRC_MOVEMENT_BEDPROBING_ROTARYCOMPENSATION_H_ */ diff --git a/src/Movement/DDA.cpp b/src/Movement/DDA.cpp index f63c78fb..4e0caa91 100644 --- a/src/Movement/DDA.cpp +++ b/src/Movement/DDA.cpp @@ -248,8 +248,17 @@ void DDA::Init() // Either way, return the amount of extrusion we didn't do in the extruder coordinates of nextMove bool DDA::Init(GCodes::RawMove &nextMove, bool doMotorMapping) { - // 1. Compute the new endpoints and the movement vector + // 0. If there are more total axes than visible axes, then we must ignore any movement data in nextMove for the invisible axes. + // The call to CartesianToMotorSteps may adjust the invisible axis endpoints for architectures such as CoreXYU, so set them up here. + const size_t numTotalAxes = reprap.GetGCodes().GetTotalAxes(); + const size_t numVisibleAxes = reprap.GetGCodes().GetVisibleAxes(); const int32_t * const positionNow = prev->DriveCoordinates(); + for (size_t axis = numVisibleAxes; axis < numTotalAxes; ++axis) + { + endPoint[axis] = positionNow[axis]; + } + + // 1. Compute the new endpoints and the movement vector const Move& move = reprap.GetMove(); if (doMotorMapping) { @@ -271,20 +280,19 @@ bool DDA::Init(GCodes::RawMove &nextMove, bool doMotorMapping) bool realMove = false; float accelerations[DRIVES]; const float * const normalAccelerations = reprap.GetPlatform().Accelerations(); - const size_t numAxes = reprap.GetGCodes().GetTotalAxes(); const Kinematics& k = move.GetKinematics(); for (size_t drive = 0; drive < DRIVES; drive++) { accelerations[drive] = normalAccelerations[drive]; - if (drive >= numAxes || !doMotorMapping) + if (drive >= numTotalAxes || (!doMotorMapping && drive < numVisibleAxes)) { endPoint[drive] = Move::MotorEndPointToMachine(drive, nextMove.coords[drive]); } endCoordinates[drive] = nextMove.coords[drive]; int32_t delta; - if (drive < numAxes) + if (drive < numTotalAxes) { delta = endPoint[drive] - positionNow[drive]; if (k.IsContinuousRotationAxis(drive) && nextMove.moveType != 1 && nextMove.moveType != 2) @@ -305,7 +313,7 @@ bool DDA::Init(GCodes::RawMove &nextMove, bool doMotorMapping) delta = endPoint[drive]; } - if (drive < numAxes && doMotorMapping) + if (drive < numTotalAxes && doMotorMapping) { const float positionDelta = nextMove.coords[drive] - prev->GetEndCoordinate(drive, false); directionVector[drive] = positionDelta; @@ -317,7 +325,7 @@ bool DDA::Init(GCodes::RawMove &nextMove, bool doMotorMapping) else { directionVector[drive] = (float)delta/reprap.GetPlatform().DriveStepsPerUnit(drive); - if (drive >= numAxes && nextMove.coords[drive] > 0.0) + if (drive >= numTotalAxes && nextMove.coords[drive] > 0.0) { extruding = true; } @@ -331,14 +339,14 @@ bool DDA::Init(GCodes::RawMove &nextMove, bool doMotorMapping) pdm->totalSteps = labs(delta); // for now this is the number of net steps, but gets adjusted later if there is a reverse in direction pdm->direction = (delta >= 0); // for now this is the direction of net movement, but gets adjusted later if it is a delta movement - if (drive >= numAxes) + if (drive >= numTotalAxes) { // It's an extruder movement nextMove.coords[drive] -= directionVector[drive]; // subtract the amount of extrusion we actually did to leave the residue outstanding if (xyMoving && nextMove.usePressureAdvance) { - const float compensationTime = reprap.GetPlatform().GetPressureAdvance(drive - numAxes); + const float compensationTime = reprap.GetPlatform().GetPressureAdvance(drive - numTotalAxes); if (compensationTime > 0.0) { // Compensation causes instant velocity changes equal to acceleration * k, so we may need to limit the acceleration @@ -359,7 +367,7 @@ bool DDA::Init(GCodes::RawMove &nextMove, bool doMotorMapping) // Update the end position in the previous move, so that on the next move we don't think there is XY movement when the user didn't ask for any if (doMotorMapping) { - for (size_t drive = 0; drive < numAxes; ++drive) + for (size_t drive = 0; drive < numTotalAxes; ++drive) { prev->endCoordinates[drive] = nextMove.coords[drive]; } @@ -423,7 +431,7 @@ bool DDA::Init(GCodes::RawMove &nextMove, bool doMotorMapping) else if (axesMoving) { // Some axes are moving, but not axes that X or Y are mapped to. Normalise the movement to the vector sum of the axes that are moving. - totalDistance = Normalise(directionVector, DRIVES, numAxes); + totalDistance = Normalise(directionVector, DRIVES, numTotalAxes); } else { diff --git a/src/Movement/Kinematics/HangprinterKinematics.cpp b/src/Movement/Kinematics/HangprinterKinematics.cpp index a77d377c..f7c066a0 100644 --- a/src/Movement/Kinematics/HangprinterKinematics.cpp +++ b/src/Movement/Kinematics/HangprinterKinematics.cpp @@ -12,19 +12,14 @@ #include "Movement/Move.h" //#include "Movement/BedProbing/RandomProbePointSet.h" -// Default anchor coordinates, copied from https://github.com/tobbelobb/hangprinter/blob/fabf19bf4653d1d1daf72d53217ba5962c9aca6e/firmware/HangprinterMarlin/Configuration.h -constexpr float DefaultAnchorA[3] = { 0.0, -2163.0, -75.5}; -constexpr float DefaultAnchorB[3] = {-1841.0, 741.0, -75.5}; -constexpr float DefaultAnchorC[3] = { 1639.0, 1404.0, -75.5}; -constexpr float DefaultAnchorDz = 3250.5; +// Default anchor coordinates +// These are only placeholders. Each machine must have these values calibrated in order to work correctly. +constexpr float DefaultAnchorA[3] = { 0.0, -2000.0, -100.0}; +constexpr float DefaultAnchorB[3] = { 2000.0, 1000.0, -100.0}; +constexpr float DefaultAnchorC[3] = {-2000.0, 1000.0, -100.0}; +constexpr float DefaultAnchorDz = 3000.0; constexpr float DefaultPrintRadius = 1500.0; -constexpr size_t HANGPRINTER_AXES = 4; -constexpr size_t A_AXIS = 0; -constexpr size_t B_AXIS = 1; -constexpr size_t C_AXIS = 2; -constexpr size_t D_AXIS = 3; - // Constructor HangprinterKinematics::HangprinterKinematics() : Kinematics(KinematicsType::scara, DefaultSegmentsPerSecond, DefaultMinSegmentSize, true) @@ -39,7 +34,7 @@ void HangprinterKinematics::Init() ARRAY_INIT(anchorA, DefaultAnchorA); ARRAY_INIT(anchorB, DefaultAnchorB); ARRAY_INIT(anchorC, DefaultAnchorC); - doneAutoCalibration = false; + doneAutoCalibration = false; Recalc(); } @@ -140,7 +135,7 @@ bool HangprinterKinematics::Configure(unsigned int mCode, GCodeBuffer& gb, const } // Calculate the square of the line length from a spool from a Cartesian coordinate -inline float HangprinterKinematics::LineLengthASquared(const float machinePos[3], const float anchor[3]) const +inline float HangprinterKinematics::LineLengthSquared(const float machinePos[3], const float anchor[3]) const { return fsquare(anchor[Z_AXIS] - machinePos[Z_AXIS]) + fsquare(anchor[Y_AXIS] - machinePos[Y_AXIS]) + fsquare(anchor[X_AXIS] - machinePos[X_AXIS]); } @@ -148,15 +143,13 @@ inline float HangprinterKinematics::LineLengthASquared(const float machinePos[3] // Convert Cartesian coordinates to motor coordinates, returning true if successful bool HangprinterKinematics::CartesianToMotorSteps(const float machinePos[], const float stepsPerMm[], size_t numVisibleAxes, size_t numTotalAxes, int32_t motorPos[], bool isCoordinated) const { - // Geometry of hangprinter makes fsquare(anchorABC[Z_AXIS] - machinePos[Z_AXIS]) the smallest term in the sum. - // Starting sum with smallest number gives smallest roundoff error. - const float aSquared = LineLengthASquared(machinePos, anchorA); - const float bSquared = LineLengthASquared(machinePos, anchorB); - const float cSquared = LineLengthASquared(machinePos, anchorC); + const float aSquared = LineLengthSquared(machinePos, anchorA); + const float bSquared = LineLengthSquared(machinePos, anchorB); + const float cSquared = LineLengthSquared(machinePos, anchorC); const float dSquared = fsquare(machinePos[X_AXIS]) + fsquare(machinePos[Y_AXIS]) + fsquare(anchorDz - machinePos[Z_AXIS]); - if (aSquared < 0.0 && bSquared < 0.0 && cSquared < 0.0 && dSquared < 0.0) + if (aSquared > 0.0 && bSquared > 0.0 && cSquared > 0.0 && dSquared > 0.0) { motorPos[A_AXIS] = lrintf(sqrtf(aSquared) * stepsPerMm[A_AXIS]); motorPos[B_AXIS] = lrintf(sqrtf(bSquared) * stepsPerMm[B_AXIS]); @@ -372,9 +365,9 @@ bool HangprinterKinematics::DoAutoCalibration(size_t numFactors, const RandomPro const floatc_t zp = reprap.GetMove().GetProbeCoordinates(i, machinePos[X_AXIS], machinePos[Y_AXIS], probePoints.PointWasCorrected(i)); machinePos[Z_AXIS] = 0.0; - probeMotorPositions(i, A_AXIS) = sqrtf(LineLengthASquared(machinePos, anchorA)); - probeMotorPositions(i, B_AXIS) = sqrtf(LineLengthASquared(machinePos, anchorB)); - probeMotorPositions(i, C_AXIS) = sqrtf(LineLengthASquared(machinePos, anchorC)); + probeMotorPositions(i, A_AXIS) = sqrtf(LineLengthSquared(machinePos, anchorA)); + probeMotorPositions(i, B_AXIS) = sqrtf(LineLengthSquared(machinePos, anchorB)); + probeMotorPositions(i, C_AXIS) = sqrtf(LineLengthSquared(machinePos, anchorC)); initialSumOfSquares += fcsquare(zp); } diff --git a/src/Movement/Kinematics/HangprinterKinematics.h b/src/Movement/Kinematics/HangprinterKinematics.h index 60a342d9..96ceb9ef 100644 --- a/src/Movement/Kinematics/HangprinterKinematics.h +++ b/src/Movement/Kinematics/HangprinterKinematics.h @@ -43,9 +43,16 @@ private: static constexpr float DefaultSegmentsPerSecond = 100.0; static constexpr float DefaultMinSegmentSize = 0.2; + // Basic facts about movement system + static constexpr size_t HANGPRINTER_AXES = 4; + static constexpr size_t A_AXIS = 0; + static constexpr size_t B_AXIS = 1; + static constexpr size_t C_AXIS = 2; + static constexpr size_t D_AXIS = 3; + void Init(); void Recalc(); - float LineLengthASquared(const float machinePos[3], const float anchor[3]) const; // Calculate the square of the line length from a spool from a Cartesian coordinate + float LineLengthSquared(const float machinePos[3], const float anchor[3]) const; // Calculate the square of the line length from a spool from a Cartesian coordinate void InverseTransform(float La, float Lb, float Lc, float machinePos[3]) const; floatc_t ComputeDerivative(unsigned int deriv, float La, float Lb, float Lc) const; // Compute the derivative of height with respect to a parameter at a set of motor endpoints diff --git a/src/Movement/Move.cpp b/src/Movement/Move.cpp index 9abc8d80..d7f17232 100644 --- a/src/Movement/Move.cpp +++ b/src/Movement/Move.cpp @@ -104,6 +104,7 @@ void Move::Init() idleTimeout = DefaultIdleTimeout; moveState = MoveState::idle; + lastStateChangeTime = millis(); idleCount = 0; simulationMode = 0; @@ -601,7 +602,7 @@ void Move::Diagnostics(MessageType mtype) { Platform& p = reprap.GetPlatform(); p.Message(mtype, "=== Move ===\n"); - p.MessageF(mtype, "Hiccups: %" PRIu32 ", StepErrors: %u, LaErrors: %u, FreeDm: %d, MinFreeDm %d, MaxWait: %" PRIu32 "ms, Underruns: %u, %u\n", + p.MessageF(mtype, "Hiccups: %" PRIu32 ", StepErrors: %u, LaErrors: %u, FreeDm: %d, MinFreeDm: %d, MaxWait: %" PRIu32 "ms, Underruns: %u, %u\n", DDA::numHiccups, stepErrors, numLookaheadErrors, DriveMovement::NumFree(), DriveMovement::MinFree(), longestGcodeWaitInterval, numLookaheadUnderruns, numPrepareUnderruns); DDA::numHiccups = 0; numLookaheadUnderruns = numPrepareUnderruns = numLookaheadErrors = 0; @@ -920,14 +921,14 @@ bool Move::SaveHeightMapToFile(FileStore *f) const float Move::GetTopSpeed() const { - const DDA *currDda = currentDda; - return (currDda == nullptr) ? 0.0f : currDda->GetTopSpeed(); + const DDA * const currDda = currentDda; + return (currDda == nullptr) ? 0.0 : currDda->GetTopSpeed(); } float Move::GetRequestedSpeed() const { - const DDA *currDda = currentDda; - return (currDda == nullptr) ? 0.0f : currDda->GetRequestedSpeed(); + const DDA * const currDda = currentDda; + return (currDda == nullptr) ? 0.0 : currDda->GetRequestedSpeed(); } void Move::SetTaperHeight(float h) diff --git a/src/Pccb/Network.cpp b/src/Pccb/Network.cpp new file mode 100644 index 00000000..0ad6d123 --- /dev/null +++ b/src/Pccb/Network.cpp @@ -0,0 +1,46 @@ +#include "Network.h" +#include "OutputMemory.h" + +const char * const notSupportedText = "Networking is not supported on this hardware"; + +GCodeResult Network::EnableProtocol(unsigned int interface, int protocol, int port, bool secure, const StringRef& reply) +{ + reply.copy(notSupportedText); + return GCodeResult::error; +} + +GCodeResult Network::DisableProtocol(unsigned int interface, int protocol, const StringRef& reply) +{ + reply.copy(notSupportedText); + return GCodeResult::error; +} + +GCodeResult Network::ReportProtocols(unsigned int interface, const StringRef& reply) const +{ + reply.copy(notSupportedText); + return GCodeResult::error; +} + +GCodeResult Network::EnableInterface(unsigned int interface, int mode, const StringRef& ssid, const StringRef& reply) +{ + reply.copy(notSupportedText); + return GCodeResult::error; +} + +GCodeResult Network::GetNetworkState(unsigned int interface, const StringRef& reply) +{ + reply.copy(notSupportedText); + return GCodeResult::error; +} + +void Network::HandleHttpGCodeReply(OutputBuffer *buf) +{ + OutputBuffer::ReleaseAll(buf); +} + +void Network::HandleTelnetGCodeReply(OutputBuffer *buf) +{ + OutputBuffer::ReleaseAll(buf); +} + +// End diff --git a/src/Pccb/Network.h b/src/Pccb/Network.h new file mode 100644 index 00000000..404ebcd2 --- /dev/null +++ b/src/Pccb/Network.h @@ -0,0 +1,50 @@ +#ifndef NETWORK_H +#define NETWORK_H + +#include "RepRapFirmware.h" +#include "MessageType.h" +#include "GCodes/GCodeResult.h" + +const uint8_t DefaultIpAddress[4] = { 0, 0, 0, 0 }; +const uint8_t DefaultNetMask[4] = { 0, 0, 0, 0 }; +const uint8_t DefaultGateway[4] = { 0, 0, 0, 0 }; +const uint8_t macAddress[6] = { 0, 0, 0, 0, 0, 0 }; + +const uint8_t DefaultMacAddress[6] = { 0, 0, 0, 0, 0, 0 }; +const size_t SsidBufferLength = 32; // maximum characters in an SSID + +// The main network class that drives the network. +class Network +{ +public: + Network(Platform& p) { } + void Init() const { } + void Activate() const { } + void Exit() const { } +#ifndef RTOS + void Spin(bool full) const { } +#endif + void Diagnostics(MessageType mtype) const { } + + GCodeResult EnableInterface(unsigned int interface, int mode, const StringRef& ssid, const StringRef& reply); + GCodeResult EnableProtocol(unsigned int interface, int protocol, int port, bool secure, const StringRef& reply); + GCodeResult DisableProtocol(unsigned int interface, int protocol, const StringRef& reply); + GCodeResult ReportProtocols(unsigned int interface, const StringRef& reply) const; + + GCodeResult GetNetworkState(unsigned int interface, const StringRef& reply); + + void SetEthernetIPAddress(const uint8_t p_ipAddress[], const uint8_t p_netmask[], const uint8_t p_gateway[]) { } + void SetMacAddress(unsigned int interface, const uint8_t mac[]) { } + const uint8_t *GetMacAddress(unsigned int interface) const { return macAddress; } + + void SetHostname(const char *name) const { } + bool IsWiFiInterface(unsigned int interface) const { return false; } + + void HandleHttpGCodeReply(const char *msg) { } + void HandleTelnetGCodeReply(const char *msg) { } + void HandleHttpGCodeReply(OutputBuffer *buf); + void HandleTelnetGCodeReply(OutputBuffer *buf); + uint32_t GetHttpReplySeq() { return 0; } +}; + +#endif diff --git a/src/Pccb/Pins_Pccb.h b/src/Pccb/Pins_Pccb.h new file mode 100644 index 00000000..19ad1582 --- /dev/null +++ b/src/Pccb/Pins_Pccb.h @@ -0,0 +1,180 @@ +/* + * Pins_DuetM.h + * + * Created on: 29 Nov 2017 + * Author: David + */ + +#ifndef SRC_DUETM_PINS_DUETM_H_ +#define SRC_DUETM_PINS_DUETM_H_ + +#define FIRMWARE_NAME "RepRapFirmware for PCCB" +#define DEFAULT_BOARD_TYPE BoardType::PCCB_10 +constexpr size_t NumFirmwareUpdateModules = 1; // 1 module +#define IAP_FIRMWARE_FILE "PccbFirmware.bin" +#define IAP_UPDATE_FILE "iap4s.bin" + +// Features definition +#define HAS_LWIP_NETWORKING 0 +#define HAS_WIFI_NETWORKING 0 +#define HAS_W5500_NETWORKING 0 + +#define HAS_CPU_TEMP_SENSOR 1 +#define HAS_HIGH_SPEED_SD 1 // SD card socket is optional +#define SUPPORT_TMC22xx 1 +#define TMC22xx_HAS_MUX 0 +#define HAS_VOLTAGE_MONITOR 1 +#define HAS_VREF_MONITOR 1 +#define ACTIVE_LOW_HEAT_ON 1 // irrelevant because there are no heaters + +#define SUPPORT_INKJET 0 // set nonzero to support inkjet control +#define SUPPORT_ROLAND 0 // set nonzero to support Roland mill +#define SUPPORT_SCANNER 0 // set zero to disable support for FreeLSS scanners +#define SUPPORT_IOBITS 0 // set to support P parameter in G0/G1 commands +#define SUPPORT_DHT_SENSOR 0 // set nonzero to support DHT temperature/humidity sensors (requires RTOS) +#define SUPPORT_WORKPLACE_COORDINATES 1 // set nonzero to support G10 L2 and G53..59 +#define SUPPORT_12864_LCD 0 // set nonzero to support 12864 LCD and rotary encoder +#define SUPPORT_DOTSTAR_LED 1 // set nonzero to support DotStar LED strips + +// The physical capabilities of the machine + +constexpr size_t DRIVES = 8; // The maximum number of drives supported by the electronics +constexpr size_t MaxSmartDrivers = 2; // The maximum number of smart drivers +#define DRIVES_(a,b,c,d,e,f,g,h,i,j,k,l) { a,b,c,d,e,f,g,h } + +constexpr size_t Heaters = 2; // The number of heaters in the machine. PCCB has no heaters, but we pretend that the LED pins are heaters. +constexpr size_t NumExtraHeaterProtections = 4; // The number of extra heater protection instances +constexpr size_t NumThermistorInputs = 2; + +constexpr size_t MinAxes = 3; // The minimum and default number of axes +constexpr size_t MaxAxes = 6; // The maximum number of movement axes in the machine, <= DRIVES +// Initialization macro used in statements needing to initialize values in arrays of size MAX_AXES +#define AXES_(a,b,c,d,e,f,g,h,i) { a,b,c,d,e,f } + +constexpr size_t MaxExtruders = DRIVES - MinAxes; // The maximum number of extruders +constexpr size_t MaxDriversPerAxis = 4; // The maximum number of stepper drivers assigned to one axis + +constexpr size_t NUM_SERIAL_CHANNELS = 1; // The number of serial IO channels (USB only) +#define SERIAL_MAIN_DEVICE SerialUSB + +#define I2C_IFACE Wire // First and only I2C interface +#define I2C_IRQn WIRE_ISR_ID + +// The numbers of entries in each array must correspond with the values of DRIVES, AXES, or HEATERS. Set values to NoPin to flag unavailability. + +// Drivers +constexpr Pin GlobalTmcEnablePin = 1; // The pin that drives ENN of all drivers +constexpr Pin ENABLE_PINS[DRIVES] = { NoPin, NoPin, 61, 35, 41, 55, 0, 64 }; +constexpr Pin STEP_PINS[DRIVES] = { 40, 43, 60, 38, 58, 56, 46, 50 }; +constexpr Pin DIRECTION_PINS[DRIVES] = { 8, 11, 17, 57, 54, 34, 1, 53 }; + +Uart * const DriverUarts[MaxSmartDrivers] = { UART0, UART1 }; +constexpr uint32_t DriverUartIds[MaxSmartDrivers] = { ID_UART0, ID_UART1 }; +constexpr IRQn DriverUartIRQns[MaxSmartDrivers] = { UART0_IRQn, UART1_IRQn }; +constexpr Pin DriverUartPins[MaxSmartDrivers] = { APINS_UART0, APINS_UART1 }; + +// Define the baud rate used to send/receive data to/from the drivers. +// If we assume a worst case clock frequency of 8MHz then the maximum baud rate is 8MHz/16 = 500kbaud. +// We send data via a 1K series resistor. Even if we assume a 200pF load on the shared UART line, this gives a 200ns time constant, which is much less than the 2us bit time @ 500kbaud. +// To write a register we need to send 8 bytes. To read a register we send 4 bytes and receive 8 bytes after a programmable delay. +// So at 500kbaud it takes about 128us to write a register, and 192us+ to read a register. +// On the PCCB we have only 2 drivers, so we use a lower baud rate to reduce the CPU load + +const uint32_t DriversBaudRate = 100000; +const uint32_t TransferTimeout = 10; // any transfer should complete within 10 ticks @ 1ms/tick + +#define UART_TMC_DRV0_Handler UART0_Handler +#define UART_TMC_DRV1_Handler UART1_Handler + +// Endstops +// RepRapFirmware only has a single endstop per axis. +// Gcode defines if it is a max ("high end") or min ("low end") endstop and sets if it is active HIGH or LOW. +constexpr Pin END_STOP_PINS[DRIVES] = { 24, 25, 67, 63, NoPin, NoPin, NoPin, NoPin }; + +// Heaters and thermistors +constexpr Pin HEAT_ON_PINS[Heaters] = { 36, 59 }; // these are actually the LED control pins +constexpr Pin TEMP_SENSE_PINS[NumThermistorInputs] = { 20, 49 }; // Thermistor pin numbers +constexpr Pin VssaSensePin = 19; +constexpr Pin VrefSensePin = 27; + +// Default thermistor parameters - on PCCB we default both thermistors to the same parameters +constexpr float BED_R25 = 100000.0; +constexpr float BED_BETA = 4388.0; +constexpr float BED_SHC = 0.0; +constexpr float EXT_R25 = 100000.0; +constexpr float EXT_BETA = 4388.0; +constexpr float EXT_SHC = 0.0; + +// Thermistor series resistor value in Ohms +constexpr float THERMISTOR_SERIES_RS = 2200.0; + +// Number of SPI temperature sensors to support +constexpr size_t MaxSpiTempSensors = 1; //TODO which SPI channels does PCCB route to the DueX? + +// Digital pins the 31855s have their select lines tied to +constexpr Pin SpiTempSensorCsPins[MaxSpiTempSensors] = { 63 }; // SPI0_CS6 if a DueX5 is connected + +// Pin that controls the ATX power on/off +constexpr Pin ATX_POWER_PIN = NoPin; + +// Analogue pin numbers +constexpr Pin Z_PROBE_PIN = NoPin; // Z probe analog input +constexpr Pin PowerMonitorVinDetectPin = 48; // Vin monitor +constexpr float PowerMonitorVoltageRange = 11.0 * 3.3; // We use an 11:1 voltage divider + +// Digital pin number to turn the IR LED on (high) or off (low), also controls the DIAG LED +constexpr Pin Z_PROBE_MOD_PIN = NoPin; +constexpr Pin DiagPin = NoPin; + +// Cooling fans +constexpr size_t NUM_FANS = 4; +constexpr size_t NumTachos = 2; +constexpr Pin COOLING_FAN_PINS[NUM_FANS] = { 16, 39, 15, 37 }; // PWML2, PWML3, TIOA1, PWML1 +constexpr Pin TachoPins[NumTachos] = { 26, 66 }; + +#if 0 // currently unused +// Main LED control +constexpr size_t NUM_LEDS = 2; // number of main LEDs +constexpr Pin LedOnPins[NUM_LEDS] = { 36, 59 }; // LED control pins +#endif + +// DotStar LED control (USART0 is SharedSPI, +Usart * const DotStarUsart = USART1; +constexpr uint32_t DotStarUsartId = ID_USART1; +constexpr Pin DotStarMosiPin = 22; +constexpr Pin DotStarSclkPin = 23; +constexpr IRQn DotStarUsartIRQn = USART1_IRQn; +const uint32_t DotStarSpiClockFrequency = 100000; // try sending at 100kHz + +// SD cards +constexpr size_t NumSdCards = 1; +constexpr Pin SdCardDetectPins[NumSdCards] = { 44 }; +constexpr Pin SdWriteProtectPins[NumSdCards] = { NoPin }; +constexpr Pin SdSpiCSPins[1] = { NoPin }; +constexpr uint32_t ExpectedSdCardSpeed = 15000000; + +// M42 and M208 commands now use logical pin numbers, not firmware pin numbers. +// This next definition defines the highest one. +// This is the mapping from logical pins 60+ to firmware pin numbers +constexpr Pin SpecialPinMap[] = +{ + 18, 21, 51, 59, 62, 65 // PA18/AD1, PA21/AD8, PC15/AD11, PC22, PC23, PC29 +}; + +constexpr int HighestLogicalPin = 65; // highest logical pin number on this electronics + +// SAM4S Flash locations (may be expanded in the future) +constexpr uint32_t IAP_FLASH_START = 0x00470000; +constexpr uint32_t IAP_FLASH_END = 0x0047FFFF; // we allow a full 64K on the SAM4 + +// Timer allocation +// TC0 channel 0 is used for step pulse generation and software timers +// TC0 channel 1 is currently unused +// TC0 channel 2 is currently unused +#define STEP_TC (TC0) +#define STEP_TC_CHAN (0) +#define STEP_TC_ID ID_TC0 +#define STEP_TC_IRQN TC0_IRQn +#define STEP_TC_HANDLER TC0_Handler + +#endif /* SRC_DUETM_PINS_DUETM_H_ */ @@ -16,8 +16,10 @@ # define PLATFORM DuetNG # elif defined(__SAME70Q21__) # define PLATFORM SAME70_TEST -# elif defined(__SAM4S8C__) +# elif defined(DUET_M) # define PLATFORM DuetM +# elif defined(PCCB) +# define PLATFORM Pccb # else # error Unknown platform # endif @@ -30,8 +32,10 @@ # define P_XSTR(x) P_STR(x) # define P_INCLUDE_FILE P_XSTR(P_CONCAT(PLATFORM,P_CONCAT(/Pins_,P_CONCAT(PLATFORM,.h)))) #endif + #include P_INCLUDE_FILE +// Apply default values to anything not configured #ifndef SUPPORT_NONLINEAR_EXTRUSION # define SUPPORT_NONLINEAR_EXTRUSION 1 // for now this is always enabled #endif @@ -41,11 +45,50 @@ #endif #ifndef SUPPORT_12864_LCD -# define SUPPORT_12864_LCD 0 +# define SUPPORT_12864_LCD 0 +#endif + +#ifndef SUPPORT_DOTSTAR_LED +# define SUPPORT_DOTSTAR_LED 0 #endif #ifndef USE_CACHE -# define USE_CACHE 0 +# define USE_CACHE 0 +#endif + +#ifndef SUPPORT_TMC2660 +# define SUPPORT_TMC2660 0 +#endif + +#ifndef SUPPORT_TMC22xx +# define SUPPORT_TMC22xx 0 +#endif + +#define HAS_SMART_DRIVERS (SUPPORT_TMC2660 || SUPPORT_TMC22xx) +#define HAS_STALL_DETECT SUPPORT_TMC2660 + +// HAS_LWIP_NETWORKING refers to Lwip 2 support in the Networking folder, not legacy SAM3XA networking using Lwip 1 +#ifndef HAS_LWIP_NETWORKING +# define HAS_LWIP_NETWORKING 0 +#endif + +#ifndef HAS_WIFI_NETWORKING +# define HAS_WIFI_NETWORKING 0 +#endif + +#ifndef HAS_W5500_NETWORKING +# define HAS_W5500_NETWORKING 0 +#endif + +// Boards that support legacy SAM3X networking must define HAS_LEGACY_NETWORKING in their specific Pins_xxx.h file +#ifndef HAS_LEGACY_NETWORKING +# define HAS_LEGACY_NETWORKING 0 +#endif + +#define HAS_NETWORKING (HAS_LWIP_NETWORKING || HAS_WIFI_NETWORKING || HAS_W5500_NETWORKING || HAS_LEGACY_NETWORKING) + +#if SUPPORT_DHT_SENSOR && !defined(RTOS) +# error DHT sensor support requires RTOS #endif #endif // PINS_H__ diff --git a/src/Platform.cpp b/src/Platform.cpp index 8c1be54b..2223b018 100644 --- a/src/Platform.cpp +++ b/src/Platform.cpp @@ -41,10 +41,11 @@ #include "sd_mmc.h" -#if defined(DUET_NG) -# include "TMC2660.h" -#elif defined(DUET_M) -# include "TMC22xx.h" +#if SUPPORT_TMC2660 +# include "StepperDrivers/TMC2660/TMC2660.h" +#endif +#if SUPPORT_TMC22xx +# include "StepperDrivers/TMC22xx/TMC22xx.h" #endif #if HAS_WIFI_NETWORKING @@ -110,11 +111,6 @@ constexpr uint16_t driverNormalVoltageAdcReading = PowerVoltageToAdcReading(27.5 #endif -static uint32_t fanInterruptCount = 0; // accessed only in ISR, so no need to declare it volatile -const uint32_t fanMaxInterruptCount = 32; // number of fan interrupts that we average over -static volatile uint32_t fanLastResetTime = 0; // time (microseconds) at which we last reset the interrupt count, accessed inside and outside ISR -static volatile uint32_t fanInterval = 0; // written by ISR, read outside the ISR - const float MinStepPulseTiming = 0.2; // we assume that we always generate step high and low times at least this wide without special action const LogicalPin Heater0LogicalPin = 0; @@ -211,23 +207,31 @@ void Platform::Init() // Comms baudRates[0] = MAIN_BAUD_RATE; +#ifdef SERIAL_AUX_DEVICE baudRates[1] = AUX_BAUD_RATE; +#endif #ifdef SERIAL_AUX2_DEVICE baudRates[2] = AUX2_BAUD_RATE; #endif commsParams[0] = 0; +#ifdef SERIAL_AUX_DEVICE commsParams[1] = 1; // by default we require a checksum on data from the aux port, to guard against overrun errors +#endif #ifdef SERIAL_AUX2_DEVICE commsParams[2] = 0; #endif usbMutex.Create("USB"); +#ifdef SERIAL_AUX_DEVICE auxMutex.Create("Aux"); auxDetected = false; auxSeq = 0; +#endif SERIAL_MAIN_DEVICE.begin(baudRates[0]); +#ifdef SERIAL_AUX_DEVICE SERIAL_AUX_DEVICE.begin(baudRates[1]); // this can't be done in the constructor because the Arduino port initialisation isn't complete at that point +#endif #ifdef SERIAL_AUX2_DEVICE SERIAL_AUX2_DEVICE.begin(baudRates[2]); aux2Mutex.Create("Aux2"); @@ -442,7 +446,9 @@ void Platform::Init() DuetExpansion::AdditionalOutputInit(); #elif defined(DUET_M) - numSmartDrivers = 5; // TODO for now we assume that additional drivers are dumb + numSmartDrivers = MaxSmartDrivers; // for now we assume that expansion drivers are smart too +#elif defined(PCCB) + numSmartDrivers = MaxSmartDrivers; #endif #if HAS_SMART_DRIVERS @@ -496,18 +502,20 @@ void Platform::Init() for (size_t heater = 0; heater < Heaters; heater++) { - if (heatOnPins[heater] != NoPin) - { - pinMode(heatOnPins[heater], + // pinMode is safe to call when the pin is NoPin, so we don't need to check it here + pinMode(heatOnPins[heater], #if ACTIVE_LOW_HEAT_ON OUTPUT_LOW #else OUTPUT_HIGH #endif ); - } - pinMode(tempSensePins[heater], AIN); - filteredAdcChannels[heater] = PinToAdcChannel(tempSensePins[heater]); // translate the pin number to the SAM ADC channel number; + } + + for (size_t thermistor = 0; thermistor < NumThermistorInputs; thermistor++) + { + pinMode(tempSensePins[thermistor], AIN); + filteredAdcChannels[thermistor] = PinToAdcChannel(tempSensePins[thermistor]); // translate the pin number to the SAM ADC channel number; } #if HAS_VREF_MONITOR @@ -531,6 +539,10 @@ void Platform::Init() // Fans InitFans(); + for (size_t i = 0; i < NumTachos; ++i) + { + tachos[i].Init(TachoPins[i]); + } // Hotend configuration nozzleDiameter = NOZZLE_DIAMETER; @@ -657,7 +669,7 @@ void Platform::InitZProbe() int Platform::GetZProbeReading() const { int zProbeVal = 0; // initialised to avoid spurious compiler warning - if (zProbeType == ZProbeType::unfilteredDigital || (zProbeOnFilter.IsValid() && zProbeOffFilter.IsValid())) + if (zProbeType == ZProbeType::unfilteredDigital || zProbeType == ZProbeType::blTouch || (zProbeOnFilter.IsValid() && zProbeOffFilter.IsValid())) { switch (zProbeType) { @@ -667,7 +679,6 @@ int Platform::GetZProbeReading() const case ZProbeType::digital: // Switch connected to Z probe input case ZProbeType::e1Switch: // Switch connected to E1 endstop input case ZProbeType::zSwitch: // Switch connected to Z endstop input - case ZProbeType::blTouch: zProbeVal = (int) ((zProbeOnFilter.GetSum() + zProbeOffFilter.GetSum()) / (8 * Z_PROBE_AVERAGE_READINGS)); break; @@ -678,6 +689,7 @@ int Platform::GetZProbeReading() const break; case ZProbeType::unfilteredDigital: // Switch connected to Z probe input, no filtering + case ZProbeType::blTouch: // blTouch is now unfiltered too zProbeVal = GetRawZProbeReading()/4; break; @@ -1123,6 +1135,7 @@ void Platform::Beep(int freq, int ms) // Send a short message to the aux channel. There is no flow control on this port, so it can't block for long. void Platform::SendAuxMessage(const char* msg) { +#ifdef SERIAL_AUX_DEVICE OutputBuffer *buf; if (OutputBuffer::Allocate(buf)) { @@ -1132,6 +1145,7 @@ void Platform::SendAuxMessage(const char* msg) auxOutput.Push(buf); FlushAuxMessages(); } +#endif } void Platform::Exit() @@ -1150,7 +1164,9 @@ void Platform::Exit() // Close down USB and serial ports SERIAL_MAIN_DEVICE.end(); +#ifdef SERIAL_AUX_DEVICE SERIAL_AUX_DEVICE.end(); +#endif #ifdef SERIAL_AUX2_DEVICE SERIAL_AUX2_DEVICE.end(); #endif @@ -1205,6 +1221,7 @@ void Platform::SetNetMask(uint8_t nm[]) // Flush messages to aux, returning true if there is more to send bool Platform::FlushAuxMessages() { +#ifdef SERIAL_AUX_DEVICE // Write non-blocking data to the AUX line MutexLocker lock(auxMutex); OutputBuffer *auxOutputBuffer = auxOutput.GetFirstItem(); @@ -1223,6 +1240,9 @@ bool Platform::FlushAuxMessages() } } return auxOutput.GetFirstItem() != nullptr; +#else + return false; +#endif } // Flush messages to USB and aux, returning true if there is more to send @@ -1334,13 +1354,15 @@ void Platform::Spin() { if (currentVin < driverPowerOffAdcReading) { - ++numUnderVoltageEvents; driversPowered = false; + ++numUnderVoltageEvents; + lastUnderVoltageValue = currentVin; // save this because the voltage may have changed by the time we report it } else if (currentVin > driverOverVoltageAdcReading) { driversPowered = false; ++numOverVoltageEvents; + lastOverVoltageValue = currentVin; // save this because the voltage may have changed by the time we report it } else { @@ -1514,13 +1536,13 @@ void Platform::Spin() #if HAS_VOLTAGE_MONITOR if (numOverVoltageEvents != previousOverVoltageEvents) { - MessageF(WarningMessage, "VIN over-voltage event (%.1fV)", (double)GetCurrentPowerVoltage()); + MessageF(WarningMessage, "VIN over-voltage event (%.1fV)", (double)AdcReadingToPowerVoltage(lastOverVoltageValue)); previousOverVoltageEvents = numOverVoltageEvents; reported = true; } if (numUnderVoltageEvents != previousUnderVoltageEvents) { - MessageF(WarningMessage, "VIN under-voltage event (%.1fV)", (double)GetCurrentPowerVoltage()); + MessageF(WarningMessage, "VIN under-voltage event (%.1fV)", (double)AdcReadingToPowerVoltage(lastUnderVoltageValue)); previousUnderVoltageEvents = numUnderVoltageEvents; reported = true; } @@ -1744,14 +1766,17 @@ void Platform::SoftwareReset(uint16_t reason, const uint32_t *stk) reason |= (uint16_t)SoftwareResetReason::inLwipSpin; } #endif + +#ifdef SERIAL_AUX_DEVICE if (SERIAL_AUX_DEVICE.canWrite() == 0 -#ifdef SERIAL_AUX2_DEVICE +# ifdef SERIAL_AUX2_DEVICE || SERIAL_AUX2_DEVICE.canWrite() == 0 -#endif +# endif ) { reason |= (uint16_t)SoftwareResetReason::inAuxOutput; // if we are resetting because we are stuck in a Spin function, record whether we are trying to send to aux } +#endif } reason |= (uint8_t)reprap.GetSpinningModule(); reason |= (softwareResetDebugInfo & 0x07) << 5; @@ -1796,6 +1821,10 @@ void Platform::SoftwareReset(uint16_t reason, const uint32_t *stk) srdBuf[slot].cfsr = SCB->CFSR; srdBuf[slot].icsr = SCB->ICSR; srdBuf[slot].bfar = SCB->BFAR; +#ifdef RTOS + srdBuf[slot].taskName = *reinterpret_cast<const uint32_t*>(pcTaskGetName(nullptr)); +#endif + if (stk != nullptr) { srdBuf[slot].sp = reinterpret_cast<uint32_t>(stk); @@ -1836,18 +1865,6 @@ void NETWORK_TC_HANDLER() #endif -static void FanInterrupt(CallbackParameter) -{ - ++fanInterruptCount; - if (fanInterruptCount == fanMaxInterruptCount) - { - const uint32_t now = Platform::GetInterruptClocks(); - fanInterval = now - fanLastResetTime; - fanLastResetTime = now; - fanInterruptCount = 0; - } -} - void Platform::InitialiseInterrupts() { #if SAM4E || SAM7E @@ -1861,17 +1878,23 @@ void Platform::InitialiseInterrupts() NVIC_SetPriority(SysTick_IRQn, NvicPrioritySystick); // set priority for tick interrupts #endif -#if SAM4E || SAME70 + // Set UART interrupt priorities +#ifdef PCCB + NVIC_SetPriority(DriverUartIRQns[0], NvicPriorityDriversSerialTMC); + NVIC_SetPriority(DriverUartIRQns[1], NvicPriorityDriversSerialTMC); +#else +# if SAM4E || SAME70 NVIC_SetPriority(UART0_IRQn, NvicPriorityPanelDueUart); // set priority for UART interrupt NVIC_SetPriority(UART1_IRQn, NvicPriorityWiFiUart); // set priority for WiFi UART interrupt -#elif SAM4S +# elif SAM4S NVIC_SetPriority(UART1_IRQn, NvicPriorityPanelDueUart); // set priority for UART interrupt -#else +# else NVIC_SetPriority(UART_IRQn, NvicPriorityPanelDueUart); // set priority for UART interrupt -#endif +# endif -#if HAS_SMART_DRIVERS - NVIC_SetPriority(SERIAL_TMC_DRV_IRQn, NvicPriorityDriversSerialTMC); +# if HAS_SMART_DRIVERS + NVIC_SetPriority(UART_TMC_DRV_IRQn, NvicPriorityDriversSerialTMC); +# endif #endif // Timer interrupt for stepper motors @@ -1943,12 +1966,6 @@ void Platform::InitialiseInterrupts() NVIC_SetPriority(I2C_IRQn, NvicPriorityTwi); #endif - // Interrupt for 4-pin PWM fan sense line - if (coolingFanRpmPin != NoPin) - { - attachInterrupt(coolingFanRpmPin, FanInterrupt, INTERRUPT_MODE_FALLING, nullptr); - } - // Tick interrupt for ADC conversions tickState = 0; currentFilterNumber = 0; @@ -2097,7 +2114,8 @@ void Platform::Diagnostics(MessageType mtype) : (reason == (uint32_t)SoftwareResetReason::otherFault) ? "Other fault" : (reason == (uint32_t)SoftwareResetReason::stackOverflow) ? "Stack overflow" : (reason == (uint32_t)SoftwareResetReason::assertCalled) ? "Assertion failed" - : "Unknown"; + : (reason == (uint32_t)SoftwareResetReason::heaterWatchdog) ? "Heat task stuck" + : "Unknown"; String<ScratchStringLength> scratchString; if (srdBuf[slot].when != 0) { @@ -2116,8 +2134,15 @@ void Platform::Diagnostics(MessageType mtype) (srdBuf[slot].resetReason & (uint32_t)SoftwareResetReason::deliberate) ? "deliberate " : "", reasonText, moduleName[srdBuf[slot].resetReason & 0x0F], srdBuf[slot].neverUsedRam, slot); // Our format buffer is only 256 characters long, so the next 2 lines must be written separately - MessageF(mtype, "Software reset code 0x%04x HFSR 0x%08" PRIx32 ", CFSR 0x%08" PRIx32 ", ICSR 0x%08" PRIx32 ", BFAR 0x%08" PRIx32 ", SP 0x%08" PRIx32 "\n", - srdBuf[slot].resetReason, srdBuf[slot].hfsr, srdBuf[slot].cfsr, srdBuf[slot].icsr, srdBuf[slot].bfar, srdBuf[slot].sp); + MessageF(mtype, +#ifdef RTOS + "Software reset code 0x%04x HFSR 0x%08" PRIx32 " CFSR 0x%08" PRIx32 " ICSR 0x%08" PRIx32 " BFAR 0x%08" PRIx32 " SP 0x%08" PRIx32 " Task 0x%08" PRIx32 "\n", + srdBuf[slot].resetReason, srdBuf[slot].hfsr, srdBuf[slot].cfsr, srdBuf[slot].icsr, srdBuf[slot].bfar, srdBuf[slot].sp, srdBuf[slot].taskName +#else + "Software reset code 0x%04x HFSR 0x%08" PRIx32 " CFSR 0x%08" PRIx32 " ICSR 0x%08" PRIx32 " BFAR 0x%08" PRIx32 " SP 0x%08" PRIx32 "\n", + srdBuf[slot].resetReason, srdBuf[slot].hfsr, srdBuf[slot].cfsr, srdBuf[slot].icsr, srdBuf[slot].bfar, srdBuf[slot].sp +#endif + ); if (srdBuf[slot].sp != 0xFFFFFFFF) { // We saved a stack dump, so print it @@ -2149,7 +2174,7 @@ void Platform::Diagnostics(MessageType mtype) #endif // Show the longest SD card write time - MessageF(mtype, "SD card longest block write time: %.1fms\n", (double)FileStore::GetAndClearLongestWriteTime()); + MessageF(mtype, "SD card longest block write time: %.1fms, max retries %u\n", (double)FileStore::GetAndClearLongestWriteTime(), FileStore::GetAndClearMaxRetryCount()); #if HAS_CPU_TEMP_SENSOR // Show the MCU temperatures @@ -2811,12 +2836,15 @@ void Platform::DisableDrive(size_t drive) } } -// Disable all drives +// Disable all drives. Called from emergency stop and the tick ISR. void Platform::DisableAllDrives() { for (size_t drive = 0; drive < DRIVES; drive++) { - SetDriverCurrent(drive, 0.0, false); + if (!inInterrupt()) // on the Duet 06/085 we need interrupts running to send the I2C commands to set motor currents + { + SetDriverCurrent(drive, 0.0, false); + } DisableDriver(drive); } } @@ -3196,7 +3224,7 @@ void Platform::SetFanValue(size_t fan, float speed) void Platform::EnableSharedFan(bool enable) { const size_t sharedFanNumber = NUM_FANS - 1; - fans[sharedFanNumber].Init((enable) ? COOLING_FAN_PINS[sharedFanNumber] : NoPin, FansHardwareInverted(sharedFanNumber)); + fans[sharedFanNumber].Init((enable) ? COOLING_FAN_PINS[sharedFanNumber] : NoPin, FansHardwareInverted(sharedFanNumber), DefaultFanPwmFreq); } #endif @@ -3215,15 +3243,9 @@ const char *Platform::GetFanName(size_t fan) const } // Get current fan RPM -float Platform::GetFanRPM() const +uint32_t Platform::GetFanRPM(size_t tachoIndex) const { - // The ISR sets fanInterval to the number of microseconds it took to get fanMaxInterruptCount interrupts. - // We get 2 tacho pulses per revolution, hence 2 interrupts per revolution. - // However, if the fan stops then we get no interrupts and fanInterval stops getting updated. - // We must recognise this and return zero. - return (fanInterval != 0 && Platform::GetInterruptClocks() - fanLastResetTime < 3 * StepClockRate) // if we have a reading and it is less than 3 second old - ? (float)(3 * StepClockRate * fanMaxInterruptCount)/fanInterval // then calculate RPM assuming 2 interrupts per rev - : 0.0; // else assume fan is off or tacho not connected + return (tachoIndex < NumTachos) ? tachos[tachoIndex].GetRPM() : 0; } bool Platform::FansHardwareInverted(size_t fanNumber) const @@ -3241,7 +3263,13 @@ void Platform::InitFans() { for (size_t i = 0; i < NUM_FANS; ++i) { - fans[i].Init(COOLING_FAN_PINS[i], FansHardwareInverted(i)); + fans[i].Init(COOLING_FAN_PINS[i], FansHardwareInverted(i), +#ifdef PCCB + (i == 3) ? 25000 : DefaultFanPwmFreq // PCCB fan 3 has 4-wire fan connectors for Intel-spec PWM fans +#else + DefaultFanPwmFreq +#endif + ); } if (NUM_FANS > 1) @@ -3249,8 +3277,8 @@ void Platform::InitFans() #if defined(DUET_06_085) // Fan 1 on the Duet 0.8.5 shares its control pin with heater 6. Set it full on to make sure the heater (if present) is off. fans[1].SetPwm(1.0); // set it full on -#else - // Set fan 1 to be thermostatic by default, monitoring all heaters except the default bed and chamber heaters +#elif defined(DUET_NG) + // On Duet WiFi/Ethernet we set fan 1 to be thermostatic by default, monitoring all heaters except the default bed and chamber heaters Fan::HeatersMonitoredBitmap bedAndChamberHeaterMask = 0; for (uint8_t bedHeater : DefaultBedHeaters) { @@ -3268,14 +3296,11 @@ void Platform::InitFans() } fans[1].SetHeatersMonitored(LowestNBits<Fan::HeatersMonitoredBitmap>(Heaters) & ~bedAndChamberHeaterMask); fans[1].SetPwm(1.0); // set it full on +#elif defined(PCCB) + // Fan 3 needs to be set explicitly to zero PWM, otherwise it turns on because the MCU output pin isn't set low + fans[3].SetPwm(0.0); #endif } - - coolingFanRpmPin = COOLING_FAN_RPM_PIN; - if (coolingFanRpmPin != NoPin) - { - pinModeDuet(coolingFanRpmPin, INPUT_PULLUP, 1500); // enable pullup and 1500Hz debounce filter (500Hz only worked up to 7000RPM) - } } void Platform::SetEndStopConfiguration(size_t axis, EndStopPosition esPos, EndStopInputType inputType) @@ -3294,6 +3319,7 @@ void Platform::GetEndStopConfiguration(size_t axis, EndStopPosition& esType, End void Platform::AppendAuxReply(const char *msg, bool rawMessage) { +#ifdef SERIAL_AUX_DEVICE // Discard this response if either no aux device is attached or if the response is empty if (msg[0] != 0 && HaveAux()) { @@ -3318,10 +3344,12 @@ void Platform::AppendAuxReply(const char *msg, bool rawMessage) } } } +#endif } void Platform::AppendAuxReply(OutputBuffer *reply, bool rawMessage) { +#ifdef SERIAL_AUX_DEVICE // Discard this response if either no aux device is attached or if the response is empty if (reply == nullptr || reply->Length() == 0 || !HaveAux()) { @@ -3350,6 +3378,9 @@ void Platform::AppendAuxReply(OutputBuffer *reply, bool rawMessage) } } } +#else + OutputBuffer::ReleaseAll(reply); +#endif } // Send the specified message to the specified destinations. The Error and Warning flags have already been handled. @@ -3438,11 +3469,12 @@ void Platform::RawMessage(MessageType type, const char *message) usbOutputBuffer->cat(message); } } - - if ((type & SpiMessage) != 0) +#if HAS_LINUX_COMMS + else if ((type & SpiMessage) != 0) { reprap.GetLinuxComm().HandleGCodeReply(message); } +#endif } // Note: this overload of Platform::Message does not process the special action flags in the MessageType. @@ -3537,10 +3569,12 @@ void Platform::Message(const MessageType type, OutputBuffer *buffer) } } +#if HAS_LINUX_COMMS if ((type & SpiMessage) != 0) { reprap.GetLinuxComm().HandleGCodeReply(buffer); } +#endif } } @@ -3686,12 +3720,11 @@ void Platform::AtxPowerOff(bool defer) deferredPowerDown = defer; if (!defer) { - deferredPowerDown = false; if (logger != nullptr) { logger->LogMessage(realTime, "Power off commanded"); logger->Flush(true); - // We don't call logger->Stop() here because we don't now whether turning off the power will work + // We don't call logger->Stop() here because we don't know whether turning off the power will work } IoPort::WriteDigital(ATX_POWER_PIN, false); } @@ -3770,16 +3803,21 @@ void Platform::ResetChannel(size_t chan) SERIAL_MAIN_DEVICE.end(); SERIAL_MAIN_DEVICE.begin(baudRates[0]); break; + +#ifdef SERIAL_AUX_DEVICE case 1: SERIAL_AUX_DEVICE.end(); SERIAL_AUX_DEVICE.begin(baudRates[1]); break; +#endif + #ifdef SERIAL_AUX2_DEVICE case 2: SERIAL_AUX2_DEVICE.end(); SERIAL_AUX2_DEVICE.begin(baudRates[2]); break; #endif + default: break; } @@ -3833,6 +3871,8 @@ void Platform::SetBoardType(BoardType bt) board = BoardType::RADDS_15; #elif defined(__ALLIGATOR__) board = BoardType::Alligator_2; +#elif defined(PCCB) + board = BoardType::PCCB_10; #else # error Undefined board type #endif @@ -3871,6 +3911,8 @@ const char* Platform::GetElectronicsString() const case BoardType::RADDS_15: return "RADDS 1.5"; #elif defined(__ALLIGATOR__) case BoardType::Alligator_2: return "Alligator r2"; +#elif defined(PCCB) + case BoardType::PCCB_10: return "PCCB 1.0"; #else # error Undefined board type #endif @@ -3900,6 +3942,8 @@ const char* Platform::GetBoardString() const case BoardType::RADDS_15: return "radds15"; #elif defined(__ALLIGATOR__) case BoardType::Alligator_2: return "alligator2"; +#elif defined(PCCB) + case BoardType::PCCB_10: return "pccb10"; #else # error Undefined board type #endif diff --git a/src/Platform.h b/src/Platform.h index d8d65890..ae5c6a60 100644 --- a/src/Platform.h +++ b/src/Platform.h @@ -31,7 +31,8 @@ Licence: GPL #include "RepRapFirmware.h" #include "IoPorts.h" #include "DueFlashStorage.h" -#include "Fan.h" +#include "Fans/Fan.h" +#include "Fans/Tacho.h" #include "Heating/TemperatureError.h" #include "OutputMemory.h" #include "Storage/FileStore.h" @@ -57,19 +58,19 @@ constexpr bool BACKWARDS = !FORWARDS; // Define the number of ADC filters and the indices of the extra ones #if HAS_VREF_MONITOR -constexpr size_t VrefFilterIndex = Heaters; -constexpr size_t VssaFilterIndex = Heaters + 1; +constexpr size_t VrefFilterIndex = NumThermistorInputs; +constexpr size_t VssaFilterIndex = NumThermistorInputs + 1; # if HAS_CPU_TEMP_SENSOR -constexpr size_t CpuTempFilterIndex = Heaters + 2; -constexpr size_t NumAdcFilters = Heaters + 3; +constexpr size_t CpuTempFilterIndex = NumThermistorInputs + 2; +constexpr size_t NumAdcFilters = NumThermistorInputs + 3; # else -constexpr size_t NumAdcFilters = Heaters + 2; +constexpr size_t NumAdcFilters = NumThermistorInputs + 2; # endif #elif HAS_CPU_TEMP_SENSOR -constexpr size_t CpuTempFilterIndex = Heaters; -constexpr size_t NumAdcFilters = Heaters + 1; +constexpr size_t CpuTempFilterIndex = NumThermistorInputs; +constexpr size_t NumAdcFilters = NumThermistorInputs + 1; #else -constexpr size_t NumAdcFilters = Heaters; +constexpr size_t NumAdcFilters = NumThermistorInputs; #endif /**************************************************************************************************/ @@ -129,6 +130,8 @@ enum class BoardType : uint8_t RADDS_15 = 1 #elif defined(__ALLIGATOR__) Alligator_2 = 1 +#elif defined(PCCB) + PCCB_10 = 1 #else # error Unknown board #endif @@ -180,12 +183,13 @@ enum class SoftwareResetReason : uint16_t erase = 0x10, // special M999 command to erase firmware and reset NMI = 0x20, hardFault = 0x30, // most exceptions get escalated to a hard fault - stuckInSpin = 0x40, // we got stuck in a Spin() function for too long + stuckInSpin = 0x40, // we got stuck in a Spin() function in the Main task for too long wdtFault = 0x50, // secondary watchdog usageFault = 0x60, otherFault = 0x70, - stackOverflow = 0x80, - assertCalled = 0x90, + stackOverflow = 0x80, // FreeRTOS detected stack overflow + assertCalled = 0x90, // FreeRTOS assertion failure + heaterWatchdog = 0xA0, // the Heat task didn't kick the watchdog often enough // Bits that are or'ed in inAuxOutput = 0x0800, // this bit is or'ed in if we were in aux output at the time @@ -294,7 +298,7 @@ struct AxisDriversConfig // The main class that defines the RepRap machine for the benefit of the other classes class Platform -{ +{ public: // Enumeration to describe the status of a drive enum class DriverStatus : uint8_t { disabled, idle, enabled }; @@ -522,7 +526,7 @@ public: const char *GetFanName(size_t fan) const; bool WriteFanSettings(FileStore *f) const; // Save some resume information - float GetFanRPM() const; + uint32_t GetFanRPM(size_t tachoIndex) const; // Flash operations void UpdateFirmware(); @@ -663,7 +667,12 @@ private: uint32_t bfar; // bus fault address register uint32_t sp; // stack pointer uint32_t when; // value of the RTC when the software reset occurred +#ifdef RTOS + uint32_t taskName; // first 4 bytes of the task name + uint32_t stack[23]; // stack when the exception occurred, with the program counter at the bottom +#else uint32_t stack[24]; // stack when the exception occurred, with the program counter at the bottom +#endif bool isVacant() const // return true if this struct can be written without erasing it first { @@ -807,7 +816,7 @@ private: static bool WriteAxisLimits(FileStore *f, AxesBitmap axesProbed, const float limits[MaxAxes], int sParam); // Heaters - bed is assumed to be the first - Pin tempSensePins[Heaters]; + Pin tempSensePins[NumThermistorInputs]; Pin heatOnPins[Heaters]; Pin spiTempSenseCsPins[MaxSpiTempSensors]; uint32_t configuredHeaters; // bitmask of all real heaters in use @@ -815,20 +824,25 @@ private: // Fans Fan fans[NUM_FANS]; - Pin coolingFanRpmPin; // we currently support only one fan RPM input uint32_t lastFanCheckTime; void InitFans(); bool FansHardwareInverted(size_t fanNumber) const; + // Fan tachos + Tacho tachos[NumTachos]; + // Serial/USB uint32_t baudRates[NUM_SERIAL_CHANNELS]; uint8_t commsParams[NUM_SERIAL_CHANNELS]; +#ifdef SERIAL_AUX_DEVICE volatile OutputStack auxOutput; Mutex auxMutex; +#endif + OutputBuffer *auxGCodeReply; // G-Code reply for AUX devices (special one because it is actually encapsulated before sending) uint32_t auxSeq; // Sequence number for AUX devices - bool auxDetected; // Have we processed at least one G-Code from an AUX device? + bool auxDetected; // Have we processed at least one G-Code from an AUX device? #ifdef SERIAL_AUX2_DEVICE volatile OutputStack aux2Output; @@ -888,6 +902,7 @@ private: #if HAS_VOLTAGE_MONITOR AnalogChannelNumber vInMonitorAdcChannel; volatile uint16_t currentVin, highestVin, lowestVin; + uint16_t lastUnderVoltageValue, lastOverVoltageValue; uint16_t autoPauseReading, autoResumeReading; uint32_t numUnderVoltageEvents, previousUnderVoltageEvents; volatile uint32_t numOverVoltageEvents, previousOverVoltageEvents; @@ -1247,7 +1262,7 @@ inline OutputBuffer *Platform::GetAuxGCodeReply() // The bitmaps for various controller electronics are organised like this: // Duet WiFi: // All step pins are on port D, so the bitmap is just the map of step bits in port D. -// Duet Maestro: +// Duet Maestro and PCCB: // All step pins are on port C, so the bitmap is just the map of step bits in port C. // Duet 0.6 and 0.8.5: // Step pins are PA0, PC7,9,11,14,25,29 and PD0,3. @@ -1271,9 +1286,7 @@ inline OutputBuffer *Platform::GetAuxGCodeReply() return 0; // TODO assign step pins #else const PinDescription& pinDesc = g_APinDescription[STEP_PINS[driver]]; -#if defined(DUET_NG) - return pinDesc.ulPin; -#elif defined(DUET_M) +#if defined(DUET_NG) || defined(DUET_M) || defined(PCCB) return pinDesc.ulPin; #elif defined(DUET_06_085) return (pinDesc.pPort == PIOA) ? pinDesc.ulPin << 1 : pinDesc.ulPin; @@ -1296,7 +1309,7 @@ inline OutputBuffer *Platform::GetAuxGCodeReply() // TODO #elif defined(DUET_NG) PIOD->PIO_ODSR = driverMap; // on Duet WiFi all step pins are on port D -#elif defined(DUET_M) +#elif defined(DUET_M) || defined(PCCB) PIOC->PIO_ODSR = driverMap; // on Duet Maestro all step pins are on port C #elif defined(DUET_06_085) PIOD->PIO_ODSR = driverMap; @@ -1325,7 +1338,7 @@ inline OutputBuffer *Platform::GetAuxGCodeReply() // TODO #elif defined(DUET_NG) PIOD->PIO_ODSR = 0; // on Duet WiFi all step pins are on port D -#elif defined(DUET_M) +#elif defined(DUET_M) || defined(PCCB) PIOC->PIO_ODSR = 0; // on Duet Maestro all step pins are on port C #elif defined(DUET_06_085) PIOD->PIO_ODSR = 0; diff --git a/src/RADDS/Pins_RADDS.h b/src/RADDS/Pins_RADDS.h index 1623c6c8..902c8e84 100644 --- a/src/RADDS/Pins_RADDS.h +++ b/src/RADDS/Pins_RADDS.h @@ -8,8 +8,6 @@ #define HAS_WIFI_NETWORKING 0 #define HAS_CPU_TEMP_SENSOR 0 // enabling the CPU temperature sensor disables Due pin 13 due to bug in SAM3X #define HAS_HIGH_SPEED_SD 0 -#define HAS_SMART_DRIVERS 0 -#define HAS_STALL_DETECT 0 #define HAS_VOLTAGE_MONITOR 0 #define HAS_VREF_MONITOR 0 #define ACTIVE_LOW_HEAT_ON 0 @@ -39,24 +37,20 @@ const size_t DRIVES = 9; // The number of heaters in the machine // 0 is the heated bed even if there isn't one. -const size_t Heaters = 4; +constexpr size_t Heaters = 4; +constexpr size_t NumExtraHeaterProtections = 4; // The number of extra heater protection instances +constexpr size_t NumThermistorInputs = 4; -const size_t NumExtraHeaterProtections = 4; // The number of extra heater protection instances - -// Initialization macro used in statements needing to initialize values in arrays of size HEATERS. E.g., -// defaultPidKis[HEATERS] = {HEATERS_(5.0, 0.1, 0.1, 0.1, 0.1, 0.1)}; -#define HEATERS_(a,b,c,d,e,f,g,h) { a,b,c,d } - -const size_t MinAxes = 3; // The minimum and default number of axes -const size_t MaxAxes = 6; // The maximum number of movement axes in the machine, usually just X, Y and Z, <= DRIVES +constexpr size_t MinAxes = 3; // The minimum and default number of axes +constexpr size_t MaxAxes = 6; // The maximum number of movement axes in the machine, usually just X, Y and Z, <= DRIVES // Initialization macro used in statements needing to initialize values in arrays of size MAX_AXES #define AXES_(a,b,c,d,e,f,g,h,i) { a,b,c,d,e,f } -const size_t MIN_AXES = 3; // The minimum and default number of axes -const size_t MaxExtruders = DRIVES - MIN_AXES; // The maximum number of extruders -const size_t MaxDriversPerAxis = 4; // The maximum number of stepper drivers assigned to one axis +constexpr size_t MIN_AXES = 3; // The minimum and default number of axes +constexpr size_t MaxExtruders = DRIVES - MIN_AXES; // The maximum number of extruders +constexpr size_t MaxDriversPerAxis = 4; // The maximum number of stepper drivers assigned to one axis -const size_t NUM_SERIAL_CHANNELS = 2; +constexpr size_t NUM_SERIAL_CHANNELS = 2; // Use TX0/RX0 for the auxiliary serial line #define SERIAL_MAIN_DEVICE SerialUSB #define SERIAL_AUX_DEVICE Serial1 @@ -87,14 +81,14 @@ const Pin END_STOP_PINS[DRIVES] = { 28, 30, 32, 39, NoPin, NoPin, NoPin, NoPin } // HEATERS - The bed is assumed to be the at index 0 // Analogue pin numbers -const Pin TEMP_SENSE_PINS[Heaters] = HEATERS_(4, 0, 1, 2, e, f, g, h); +const Pin TEMP_SENSE_PINS[NumThermistorInputs] = { 4, 0, 1, 2 }; // Heater outputs // Bed PMW: D7 has hardware PWM so bed has PWM // h0, h1 PMW: D13 & D12 are on TIOB0 & B8 which are both TC B channels, so they get PWM // h2 bang-bang: D11 is on TIOA8 which is a TC A channel shared with h1, it gets bang-bang control -const Pin HEAT_ON_PINS[Heaters] = HEATERS_(7, 13, 12, 11, e, f, g, h); // bed, h0, h1, h2 +const Pin HEAT_ON_PINS[Heaters] = { 7, 13, 12, 11 }; // bed, h0, h1, h2 // Default thermistor betas const float BED_R25 = 10000.0; @@ -133,7 +127,8 @@ const Pin COOLING_FAN_PINS[NUM_FANS] = { 9, 8 }; // Fan 0, Fan 1 // see FanInterrupt() in Platform.cpp // // D25 -- Unused GPIO on AUX1 -const Pin COOLING_FAN_RPM_PIN = 25; +constexpr size_t NumTachos = 1; +constexpr Pin TachoPins[NumTachos] = { 25 }; // SD cards const size_t NumSdCards = 2; diff --git a/src/RepRap.cpp b/src/RepRap.cpp index f52cb373..8638a11f 100644 --- a/src/RepRap.cpp +++ b/src/RepRap.cpp @@ -125,10 +125,14 @@ extern "C" void hsmciIdle(uint32_t stBits, uint32_t dmaBits) // Do nothing more in the constructor; put what you want in RepRap:Init() RepRap::RepRap() : toolList(nullptr), currentTool(nullptr), lastWarningMillis(0), activeExtruders(0), - activeToolHeaters(0), ticksInSpinState(0), spinningModule(noModule), debug(0), stopped(false), + activeToolHeaters(0), ticksInSpinState(0), +#ifdef RTOS + heatTaskIdleTicks(0), +#endif + spinningModule(noModule), debug(0), stopped(false), active(false), resetting(false), processingConfig(true), beepFrequency(0), beepDuration(0), displayMessageBox(false), boxSeq(0), - diagnosticsDestination(MessageType::NoDestinationMessage) + diagnosticsDestination(MessageType::NoDestinationMessage), justSentDiagnostics(false) { OutputBuffer::Init(); platform = new Platform(); @@ -371,14 +375,22 @@ void RepRap::Spin() } // Keep track of the loop time - const uint32_t dt = Platform::GetInterruptClocks() - lastTime; - if (dt < fastLoop) + if (justSentDiagnostics) { - fastLoop = dt; + // Sending diagnostics increases the loop time, so don't count it + justSentDiagnostics = false; } - if (dt > slowLoop) + else { - slowLoop = dt; + const uint32_t dt = Platform::GetInterruptClocks() - lastTime; + if (dt < fastLoop) + { + fastLoop = dt; + } + if (dt > slowLoop) + { + slowLoop = dt; + } } RTOSIface::Yield(); @@ -423,6 +435,7 @@ void RepRap::Diagnostics(MessageType mtype) #ifdef DUET_NG DuetExpansion::Diagnostics(mtype); #endif + justSentDiagnostics = true; } // Turn off the heaters, disable the motors, and deactivate the Heat and Move classes. Leave everything else working. @@ -688,26 +701,29 @@ void RepRap::Tick() { platform->Tick(); ++ticksInSpinState; - if (ticksInSpinState >= MaxTicksInSpinState) // if we stall for 20 seconds, save diagnostic data and reset +#ifdef RTOS + ++heatTaskIdleTicks; + const bool heatTaskStuck = (heatTaskIdleTicks >= MaxTicksInSpinState); + if (heatTaskStuck || ticksInSpinState >= MaxTicksInSpinState) // if we stall for 20 seconds, save diagnostic data and reset +#else + if (ticksInSpinState >= MaxTicksInSpinState) // if we stall for 20 seconds, save diagnostic data and reset +#endif { resetting = true; for (size_t i = 0; i < Heaters; i++) { platform->SetHeater(i, 0.0); } - for (size_t i = 0; i < DRIVES; i++) - { - platform->DisableDrive(i); - // We can't set motor currents to 0 here because that requires interrupts to be working, and we are in an ISR - } + platform->DisableAllDrives(); // We now save the stack when we get stuck in a spin loop register const uint32_t * stackPtr asm ("sp"); - - platform->SoftwareReset((uint16_t)SoftwareResetReason::stuckInSpin, + platform->SoftwareReset( #ifdef RTOS + (heatTaskStuck) ? (uint16_t)SoftwareResetReason::heaterWatchdog : (uint16_t)SoftwareResetReason::stuckInSpin, stackPtr + 5 + 15 // discard the stack used by the FreeRTOS stack handler and our tick handler #else + (uint16_t)SoftwareResetReason::stuckInSpin, stackPtr + 5 // discard the stack used by our tick handler #endif ); @@ -806,7 +822,7 @@ OutputBuffer *RepRap::GetStatusResponse(uint8_t type, ResponseSource source) response->catf("]},\"speeds\":{\"requested\":%.1f,\"top\":%.1f}", (double)move->GetRequestedSpeed(), (double)move->GetTopSpeed()); - // Current tool number + // Current tool number response->catf(",\"currentTool\":%d", GetCurrentToolNumber()); // Output notifications @@ -870,7 +886,7 @@ OutputBuffer *RepRap::GetStatusResponse(uint8_t type, ResponseSource source) // Cooling fan value response->cat(",\"fanPercent\":"); ch = '['; - for(size_t i = 0; i < NUM_FANS; i++) + for (size_t i = 0; i < NUM_FANS; i++) { response->catf("%c%d", ch, (int)lrintf(platform->GetFanValue(i) * 100.0)); ch = ','; @@ -931,8 +947,27 @@ OutputBuffer *RepRap::GetStatusResponse(uint8_t type, ResponseSource source) break; } - // Fan RPM - response->catf(",\"fanRPM\":%d}", static_cast<unsigned int>(platform->GetFanRPM())); + // Send fan RPM value(s) + if (NumTachos != 0) + { + response->cat(",\"fanRPM\":"); + // For compatibility with older versions of DWC, if there is only one tacho value then we send it as a simple variable + if (NumTachos > 1) + { + char ch = '['; + for (size_t i = 0; i < NumTachos; ++i) + { + response->catf("%c%" PRIu32, ch, platform->GetFanRPM(i)); + ch = ','; + } + response->cat(']'); + } + else + { + response->catf("%" PRIu32, platform->GetFanRPM(0)); + } + } + response->cat('}'); // end sensors } /* Temperatures */ @@ -1120,7 +1155,22 @@ OutputBuffer *RepRap::GetStatusResponse(uint8_t type, ResponseSource source) { // Cold Extrude/Retract response->catf(",\"coldExtrudeTemp\":%.1f", (double)(heat->ColdExtrude() ? 0.0 : HOT_ENOUGH_TO_EXTRUDE)); - response->catf(",\"coldRetractTemp\":%.1f", (double)(heat->ColdExtrude() ? 0.0 : HOT_ENOUGH_TO_RETRACT));\ + response->catf(",\"coldRetractTemp\":%.1f", (double)(heat->ColdExtrude() ? 0.0 : HOT_ENOUGH_TO_RETRACT)); + + // Compensation type + response->cat(",\"compensation\":"); + if (move->IsUsingMesh()) + { + response->cat("\"Mesh\""); + } + else if (move->GetNumProbePoints() > 0) + { + response->catf("\"%u Point\"", move->GetNumProbePoints()); + } + else + { + response->cat("\"None\""); + } // Compensation type response->cat(",\"compensation\":"); @@ -1627,8 +1677,27 @@ OutputBuffer *RepRap::GetLegacyStatusResponse(uint8_t type, int seq) ch = ','; } - // Send fan RPM value (we only support one) - response->catf("],\"fanRPM\":%u", static_cast<unsigned int>(platform->GetFanRPM())); + // Send fan RPM value(s) + response->cat(']'); + if (NumTachos != 0) + { + response->cat(",\"fanRPM\":"); + // For compatibility with older versions of DWC, if there is only one tacho value then we send it as a simple variable + if (NumTachos > 1) + { + char ch = '['; + for (size_t i = 0; i < NumTachos; ++i) + { + response->catf("%c%" PRIu32, ch, platform->GetFanRPM(i)); + ch = ','; + } + response->cat(']'); + } + else + { + response->catf("%" PRIu32, platform->GetFanRPM(0)); + } + } // Send the home state. To keep the messages short, we send 1 for homed and 0 for not homed, instead of true and false. response->cat(",\"homed\":"); diff --git a/src/RepRap.h b/src/RepRap.h index 01319283..3a295a7c 100644 --- a/src/RepRap.h +++ b/src/RepRap.h @@ -120,6 +120,10 @@ public: static uint32_t DoDivide(uint32_t a, uint32_t b); // helper function for diagnostic tests +#ifdef RTOS + void KickHeatTaskWatchdog() { heatTaskIdleTicks = 0; } +#endif + private: static void EncodeString(StringRef& response, const char* src, size_t spaceToLeave, bool allowControlChars = false, char prefix = 0); @@ -157,6 +161,9 @@ private: uint16_t activeToolHeaters; uint16_t ticksInSpinState; +#ifdef RTOS + uint16_t heatTaskIdleTicks; +#endif Module spinningModule; uint32_t fastLoop, slowLoop; @@ -182,6 +189,7 @@ private: // Deferred diagnostics MessageType diagnosticsDestination; + bool justSentDiagnostics; }; inline Platform& RepRap::GetPlatform() const { return *platform; } diff --git a/src/RepRapFirmware.cpp b/src/RepRapFirmware.cpp index 93827b6f..4ef6ba99 100644 --- a/src/RepRapFirmware.cpp +++ b/src/RepRapFirmware.cpp @@ -191,6 +191,7 @@ const char * const moduleName[] = "DuetExpansion", "FilamentSensors", "WiFi", + "LinuxComms", "none" }; diff --git a/src/SAME70_TEST/Pins_SAME70_TEST.h b/src/SAME70_TEST/Pins_SAME70_TEST.h index dd015109..09ba2ed6 100644 --- a/src/SAME70_TEST/Pins_SAME70_TEST.h +++ b/src/SAME70_TEST/Pins_SAME70_TEST.h @@ -11,8 +11,6 @@ #define HAS_LINUX_INTERFACE 1 #define HAS_CPU_TEMP_SENSOR 0 #define HAS_HIGH_SPEED_SD 1 -#define HAS_SMART_DRIVERS 0 // TBD -#define HAS_STALL_DETECT 0 // TBD #define HAS_VOLTAGE_MONITOR 0 // TBD #define HAS_VREF_MONITOR 0 // TBD #define ACTIVE_LOW_HEAT_ON 1 @@ -43,9 +41,8 @@ const size_t MaxSmartDrivers = 10; // The maximum number of smart drivers #define DRIVES_(a,b,c,d,e,f,g,h,i,j,k,l) { a,b,c,d,e,f,g,h,i,j,k,l } constexpr size_t Heaters = 8; // The number of heaters in the machine; 0 is the heated bed even if there isn't one -#define HEATERS_(a,b,c,d,e,f,g,h) { a,b,c,d,e,f,g,h } - constexpr size_t NumExtraHeaterProtections = 8; // The number of extra heater protection instances +constexpr size_t NumThermistorInputs = 8; constexpr size_t MinAxes = 3; // The minimum and default number of axes constexpr size_t MaxAxes = 9; // The maximum number of movement axes in the machine, usually just X, Y and Z, <= DRIVES @@ -68,12 +65,12 @@ constexpr Pin AdditionalIoExpansionStart = 220; // Pin numbers 220-235 are on t // The numbers of entries in each array must correspond with the values of DRIVES, AXES, or HEATERS. Set values to NoPin to flag unavailability. // DRIVES -constexpr Pin GlobalTmcEnablePin = NoPin; // The pin that drives ENN of all TMC2660 drivers on production boards (on pre-production boards they are grounded) +constexpr Pin GlobalTmcEnablePin = NoPin; // The pin that drives ENN of all TMC2660 drivers on production boards (on pre-production boards they are grounded) constexpr Pin ENABLE_PINS[DRIVES] = { NoPin, NoPin, NoPin, NoPin, NoPin, NoPin, NoPin, NoPin, NoPin, NoPin, NoPin, NoPin }; constexpr Pin STEP_PINS[DRIVES] = { NoPin, NoPin, NoPin, NoPin, NoPin, NoPin, NoPin, NoPin, NoPin, NoPin, NoPin, NoPin }; constexpr Pin DIRECTION_PINS[DRIVES] = { NoPin, NoPin, NoPin, NoPin, NoPin, NoPin, NoPin, NoPin, NoPin, NoPin, NoPin, NoPin }; -constexpr Pin DueX_SG = NoPin; // DueX stallguard detect pin (TBD) +constexpr Pin DueX_SG = NoPin; // DueX stallguard detect pin (TBD) constexpr Pin DueX_INT = NoPin; // DueX interrupt pin (TBD) // Endstops @@ -81,8 +78,8 @@ constexpr Pin DueX_INT = NoPin; // DueX interrupt pin (TBD) // Gcode defines if it is a max ("high end") or min ("low end") endstop and sets if it is active HIGH or LOW. constexpr Pin END_STOP_PINS[DRIVES] = { NoPin, NoPin, NoPin, NoPin, NoPin, NoPin, NoPin, NoPin, NoPin, NoPin, NoPin, NoPin }; -// HEATERS -constexpr Pin TEMP_SENSE_PINS[Heaters] = { NoPin, NoPin, NoPin, NoPin, NoPin, NoPin, NoPin, NoPin }; // Thermistor pin numbers +// Heater and thermistors +constexpr Pin TEMP_SENSE_PINS[NumThermistorInputs] = { NoPin, NoPin, NoPin, NoPin, NoPin, NoPin, NoPin, NoPin }; // Thermistor pin numbers constexpr Pin HEAT_ON_PINS[Heaters] = { NoPin, NoPin, NoPin, NoPin, NoPin, NoPin, NoPin, NoPin }; // Heater pin numbers (TBD) // Default thermistor parameters @@ -125,7 +122,8 @@ constexpr Pin DiagPin = NoPin; // TBD // Cooling fans constexpr size_t NUM_FANS = 1; constexpr Pin COOLING_FAN_PINS[NUM_FANS] = { NoPin }; -constexpr Pin COOLING_FAN_RPM_PIN = NoPin; // TBD +constexpr size_t NumTachos = 1; +constexpr Pin TachoPins[NumTachos] = { NoPin }; // TBD // SD cards constexpr size_t NumSdCards = 2; diff --git a/src/DuetM/TMC22xx.cpp b/src/StepperDrivers/TMC22xx/TMC22xx.cpp index 5f373c26..4a9b3c96 100644 --- a/src/DuetM/TMC22xx.cpp +++ b/src/StepperDrivers/TMC22xx/TMC22xx.cpp @@ -5,25 +5,26 @@ * Author: David */ +#include "RepRapFirmware.h" + +#if SUPPORT_TMC22xx + #include "TMC22xx.h" #include "RepRap.h" #include "Movement/Move.h" #include "sam/drivers/pdc/pdc.h" #include "sam/drivers/uart/uart.h" +// Important note: +// The TMC2224 does handle a write request immediately followed by a read request. +// The TMC2224 does _not_ handle back-to-back read requests, it needs some sort of a delay between them. +// Therefore this driver will only work if there are at least two TMC22xx drivers being driven, +// so that each one gets an interval while the other one is being polled. + const float MaximumMotorCurrent = 1600.0; const uint32_t DefaultMicrosteppingShift = 4; // x16 microstepping const bool DefaultInterpolation = true; // interpolation enabled -// Define the baud rate used to send/receive data to/from the drivers. -// If we assume a worst case clock frequency of 8MHz then the maximum baud rate is 8MHz/16 = 500kbaud. -// We send data via a 1K series resistor. Even if we assume a 200pF load on the shared UART line, this gives a 200ns time constant, which is much less than the 2us bit time @ 500kbaud. -// To write a register we need to send 8 bytes. To read a register we send 4 bytes and receive 8 bytes after a programmable delay. -// So at 500kbaud it takes about 128us to write a register, and 192us+ to read a register. -// In testing I found that 500kbaud was not reliable, so now using 200kbaud. -const uint32_t DriversBaudRate = 200000; -const uint32_t TransferTimeout = 10; // any transfer should complete within 10 ticks @ 1ms/tick - static size_t numTmc22xxDrivers; enum class DriversState : uint8_t @@ -231,22 +232,6 @@ static constexpr uint8_t InitialSendCRC = CRCAddByte(CRCAddByte(0, 0x05), 0x00); // CRC of a request to read the IFCOUNT register static constexpr uint8_t ReadIfcountCRC = CRCAddByte(InitialSendCRC, REGNUM_IFCOUNT); -// To write a register, we send one 8-byte packet to write it, then a 4-byte packet to ask for the IFCOUNT register, then we receive an 8-byte packet containing IFCOUNT. -// This is the message we send - volatile because we care about when it is written -static volatile uint8_t sendData[12] = -{ - 0x05, 0x00, // sync byte and slave address - 0x00, // register address and write flag (filled in) - 0x00, 0x00, 0x00, 0x00, // value to write (if writing), or 1 byte of CRC if read request (filled in) - 0x00, // CRC of write request (filled in) - 0x05, 0x00, // sync byte and slave address - REGNUM_IFCOUNT, // register we want to read - ReadIfcountCRC // CRC -}; - -// Buffer for the message we receive when reading data. The first 4 or 12 bytes bytes are our own transmitted data. -static volatile uint8_t receiveData[20]; - //---------------------------------------------------------------------------------------------------------------------------------- // Private types and methods @@ -268,6 +253,7 @@ public: void AppendDriverStatus(const StringRef& reply); uint8_t GetDriverNumber() const { return driverNumber; } bool UpdatePending() const { return registersToUpdate != 0; } + bool UsesGlobalEnable() const { return enablePin == NoPin; } float GetStandstillCurrentPercent() const; void SetStandstillCurrentPercent(float percent); @@ -275,16 +261,30 @@ public: void TransferDone() __attribute__ ((hot)); // called by the ISR when the SPI transfer has completed void StartTransfer() __attribute__ ((hot)); // called to start a transfer void TransferTimedOut() { ++numTimeouts; } - static void AbortTransfer(); + void AbortTransfer(); uint32_t ReadLiveStatus() const; uint32_t ReadAccumulatedStatus(uint32_t bitsToKeep); + // Variables used by the ISR + static TmcDriverState * volatile currentDriver; // volatile because the ISR changes it + static uint32_t transferStartedTime; + + void UartTmcHandler(); // core of the ISR for this driver + private: void UpdateRegister(size_t regIndex, uint32_t regVal); void UpdateChopConfRegister(); // calculate the chopper control register and flag it for sending void UpdateCurrent(); + +#if TMC22xx_HAS_MUX void SetUartMux(); + static void SetupDMASend(uint8_t regnum, uint32_t outVal, uint8_t crc) __attribute__ ((hot)); // set up the PDC to send a register + static void SetupDMAReceive(uint8_t regnum, uint8_t crc) __attribute__ ((hot)); // set up the PDC to receive a register +#else + void SetupDMASend(uint8_t regnum, uint32_t outVal, uint8_t crc) __attribute__ ((hot)); // set up the PDC to send a register + void SetupDMAReceive(uint8_t regnum, uint8_t crc) __attribute__ ((hot)); // set up the PDC to receive a register +#endif static constexpr unsigned int NumWriteRegisters = 5; // the number of registers that we write to static const uint8_t WriteRegNumbers[NumWriteRegisters]; // the register numbers that we write to @@ -303,9 +303,6 @@ private: static constexpr unsigned int ReadGStat = 0; static constexpr unsigned int ReadDrvStat = 1; - static void SetupDMASend(uint8_t regnum, uint32_t outVal, uint8_t crc) __attribute__ ((hot)); // set up the PDC to send a register - static void SetupDMAReceive(uint8_t regnum, uint8_t crc) __attribute__ ((hot)); // set up the PDC to receive a register - volatile uint32_t writeRegisters[NumWriteRegisters]; // the values we want the TMC22xx writable registers to have volatile uint32_t readRegisters[NumReadRegisters]; // the last values read from the TMC22xx readable registers volatile uint32_t accumulatedReadRegisters[NumReadRegisters]; @@ -318,6 +315,19 @@ private: uint32_t microstepShiftFactor; // how much we need to shift 1 left by to get the current microstepping uint32_t motorCurrent; // the configured motor current +#if TMC22xx_HAS_MUX + static Uart * const uart; // the UART that controls all drivers +#else + Uart *uart; // the UART that controls this driver +#endif + + // To write a register, we send one 8-byte packet to write it, then a 4-byte packet to ask for the IFCOUNT register, then we receive an 8-byte packet containing IFCOUNT. + // This is the message we send - volatile because we care about when it is written + static volatile uint8_t sendData[12]; + + // Buffer for the message we receive when reading data. The first 4 or 12 bytes bytes are our own transmitted data. + static volatile uint8_t receiveData[20]; + uint16_t readErrors; // how many read errors we had uint16_t writeErrors; // how many write errors we had uint16_t numReads; // how many successful reads we had @@ -333,6 +343,31 @@ private: bool enabled; // true if driver is enabled }; +// Static data members of class TmcDriverState + +#if TMC22xx_HAS_MUX +Uart * const TmcDriverState::uart = UART_TMC_DRV; +#endif + +TmcDriverState * volatile TmcDriverState::currentDriver = nullptr; // volatile because the ISR changes it +uint32_t TmcDriverState::transferStartedTime; + +// To write a register, we send one 8-byte packet to write it, then a 4-byte packet to ask for the IFCOUNT register, then we receive an 8-byte packet containing IFCOUNT. +// This is the message we send - volatile because we care about when it is written +volatile uint8_t TmcDriverState::sendData[12] = +{ + 0x05, 0x00, // sync byte and slave address + 0x00, // register address and write flag (filled in) + 0x00, 0x00, 0x00, 0x00, // value to write (if writing), or 1 byte of CRC if read request (filled in) + 0x00, // CRC of write request (filled in) + 0x05, 0x00, // sync byte and slave address + REGNUM_IFCOUNT, // register we want to read + ReadIfcountCRC // CRC +}; + +// Buffer for the message we receive when reading data. The first 4 or 12 bytes bytes are our own transmitted data. +volatile uint8_t TmcDriverState::receiveData[20]; + const uint8_t TmcDriverState::WriteRegNumbers[NumWriteRegisters] = { REGNUM_GCONF, @@ -357,18 +392,12 @@ const uint8_t TmcDriverState::ReadRegCRCs[NumReadRegisters] = // State structures for all drivers static TmcDriverState driverStates[MaxSmartDrivers]; -// PDC address for the USART -static Pdc * const uartPdc = uart_get_pdc_base(UART_TMC_DRV); - -// Variables used by the ISR -static TmcDriverState * volatile currentDriver = nullptr; // volatile because the ISR changes it -static uint32_t transferStartedTime; - // Set up the PDC to send a register -/*static*/ inline void TmcDriverState::SetupDMASend(uint8_t regNum, uint32_t regVal, uint8_t crc) +inline void TmcDriverState::SetupDMASend(uint8_t regNum, uint32_t regVal, uint8_t crc) { // Faster code, not using the ASF - uartPdc->PERIPH_PTCR = (PERIPH_PTCR_RXTDIS | PERIPH_PTCR_TXTDIS); // disable the PDC + Pdc * const pdc = uart_get_pdc_base(uart); + pdc->PERIPH_PTCR = (PERIPH_PTCR_RXTDIS | PERIPH_PTCR_TXTDIS); // disable the PDC sendData[2] = regNum | 0x80; sendData[3] = (uint8_t)(regVal >> 24); @@ -377,31 +406,32 @@ static uint32_t transferStartedTime; sendData[6] = (uint8_t)regVal; sendData[7] = crc; - uartPdc->PERIPH_TPR = reinterpret_cast<uint32_t>(sendData); - uartPdc->PERIPH_TCR = 12; // number of bytes to send: 8 bytes send request + 4 bytes read IFCOUNT request + pdc->PERIPH_TPR = reinterpret_cast<uint32_t>(sendData); + pdc->PERIPH_TCR = 12; // number of bytes to send: 8 bytes send request + 4 bytes read IFCOUNT request - uartPdc->PERIPH_RPR = reinterpret_cast<uint32_t>(receiveData); - uartPdc->PERIPH_RCR = 20; // number of bytes to receive: the sent data + 8 bytes of received data + pdc->PERIPH_RPR = reinterpret_cast<uint32_t>(receiveData); + pdc->PERIPH_RCR = 20; // number of bytes to receive: the sent data + 8 bytes of received data - uartPdc->PERIPH_PTCR = (PERIPH_PTCR_RXTEN | PERIPH_PTCR_TXTEN); // enable the PDC to transmit and receive + pdc->PERIPH_PTCR = (PERIPH_PTCR_RXTEN | PERIPH_PTCR_TXTEN); // enable the PDC to transmit and receive } // Set up the PDC to send a register and receive the status -/*static*/ inline void TmcDriverState::SetupDMAReceive(uint8_t regNum, uint8_t crc) +inline void TmcDriverState::SetupDMAReceive(uint8_t regNum, uint8_t crc) { // Faster code, not using the ASF - uartPdc->PERIPH_PTCR = (PERIPH_PTCR_RXTDIS | PERIPH_PTCR_TXTDIS); // disable the PDC + Pdc * const pdc = uart_get_pdc_base(uart); + pdc->PERIPH_PTCR = (PERIPH_PTCR_RXTDIS | PERIPH_PTCR_TXTDIS); // disable the PDC sendData[2] = regNum; sendData[3] = crc; - uartPdc->PERIPH_TPR = reinterpret_cast<uint32_t>(sendData); - uartPdc->PERIPH_TCR = 4; // send a 4 byte read data request + pdc->PERIPH_TPR = reinterpret_cast<uint32_t>(sendData); + pdc->PERIPH_TCR = 4; // send a 4 byte read data request - uartPdc->PERIPH_RPR = reinterpret_cast<uint32_t>(receiveData); - uartPdc->PERIPH_RCR = 12; // receive the 4 bytes we sent + 8 bytes of received data + pdc->PERIPH_RPR = reinterpret_cast<uint32_t>(receiveData); + pdc->PERIPH_RCR = 12; // receive the 4 bytes we sent + 8 bytes of received data - uartPdc->PERIPH_PTCR = (PERIPH_PTCR_RXTEN | PERIPH_PTCR_TXTEN); // enable the PDC to transmit and receive + pdc->PERIPH_PTCR = (PERIPH_PTCR_RXTEN | PERIPH_PTCR_TXTEN); // enable the PDC to transmit and receive } // Set a register value and flag it for updating @@ -434,10 +464,16 @@ pre(!driversPowered) driverNumber = p_driverNumber; axisNumber = p_driverNumber; // assume straight-through axis mapping initially enablePin = p_pin; // this is NoPin for the built-in drivers + if (p_pin != NoPin) { pinMode(p_pin, OUTPUT_HIGH); } + +#if !TMC22xx_HAS_MUX + uart = DriverUarts[p_driverNumber]; +#endif + enabled = false; registersToUpdate = 0; motorCurrent = 0; @@ -627,7 +663,7 @@ void TmcDriverState::AppendDriverStatus(const StringRef& reply) // This is called by the ISR when the SPI transfer has completed inline void TmcDriverState::TransferDone() { - if (sendData[2] & 0x80) // if we were writing a register + if (sendData[2] & 0x80) // if we were writing a register { const uint8_t currentIfCount = receiveData[18]; if (currentIfCount == (uint8_t)(lastIfCount + 1)) @@ -640,36 +676,40 @@ inline void TmcDriverState::TransferDone() } lastIfCount = currentIfCount; } - else if (sendData[2] == ReadRegNumbers[registerToRead] && ReadRegNumbers[registerToRead] == receiveData[6] && receiveData[4] == 0x05 && receiveData[5] == 0xFF) + else if (driversState != DriversState::noPower) // we don't check the CRC, so only accept the result if power is still good { - // We asked to read the scheduled read register, and the sync byte, slave address and register number in the received message match - //TODO here we could check the CRC of the received message, but for now we assume that we won't get any corruption in the 32-bit received data - const uint32_t regVal = ((uint32_t)receiveData[7] << 24) | ((uint32_t)receiveData[8] << 16) | ((uint32_t)receiveData[9] << 8) | receiveData[10]; - readRegisters[registerToRead] = regVal; - accumulatedReadRegisters[registerToRead] |= regVal; - - ++registerToRead; - if (registerToRead == NumReadRegisters) + if (sendData[2] == ReadRegNumbers[registerToRead] && ReadRegNumbers[registerToRead] == receiveData[6] && receiveData[4] == 0x05 && receiveData[5] == 0xFF) { - registerToRead = 0; + // We asked to read the scheduled read register, and the sync byte, slave address and register number in the received message match + //TODO here we could check the CRC of the received message, but for now we assume that we won't get any corruption in the 32-bit received data + const uint32_t regVal = ((uint32_t)receiveData[7] << 24) | ((uint32_t)receiveData[8] << 16) | ((uint32_t)receiveData[9] << 8) | receiveData[10]; + readRegisters[registerToRead] = regVal; + accumulatedReadRegisters[registerToRead] |= regVal; + + ++registerToRead; + if (registerToRead == NumReadRegisters) + { + registerToRead = 0; + } + ++numReads; + } + else + { + ++readErrors; } - ++numReads; - } - else - { - ++readErrors; } } // This is called to abandon the current transfer, if any void TmcDriverState::AbortTransfer() { - UART_TMC_DRV->UART_IDR = UART_IDR_ENDRX; // disable end-of-receive interrupt - uartPdc->PERIPH_PTCR = (PERIPH_PTCR_RXTDIS | PERIPH_PTCR_TXTDIS); // disable the PDC - UART_TMC_DRV->UART_CR = UART_CR_RSTRX | UART_CR_RSTTX | UART_CR_RXDIS | UART_CR_TXDIS | UART_CR_RSTSTA; - currentDriver = nullptr; + uart->UART_IDR = UART_IDR_ENDRX; // disable end-of-receive interrupt + uart_get_pdc_base(uart)->PERIPH_PTCR = (PERIPH_PTCR_RXTDIS | PERIPH_PTCR_TXTDIS); // disable the PDC + uart->UART_CR = UART_CR_RSTRX | UART_CR_RSTTX | UART_CR_RXDIS | UART_CR_TXDIS | UART_CR_RSTSTA; } +#if TMC22xx_HAS_MUX + // Set up the UART multiplexer to address the selected driver inline void TmcDriverState::SetUartMux() { @@ -699,11 +739,16 @@ inline void TmcDriverState::SetUartMux() } } +#endif + // This is called from the ISR or elsewhere to start a new SPI transfer. Inlined for ISR speed. inline void TmcDriverState::StartTransfer() { currentDriver = this; + +#if TMC22xx_HAS_MUX SetUartMux(); +#endif // Find which register to send. The common case is when no registers need to be updated. if (registersToUpdate == 0) @@ -711,11 +756,11 @@ inline void TmcDriverState::StartTransfer() registerBeingUpdated = 0; // Read a register - const irqflags_t flags = cpu_irq_save(); // avoid race condition - UART_TMC_DRV->UART_CR = UART_CR_RSTRX | UART_CR_RSTTX; // reset transmitter and receiver + const irqflags_t flags = cpu_irq_save(); // avoid race condition + uart->UART_CR = UART_CR_RSTRX | UART_CR_RSTTX; // reset transmitter and receiver SetupDMAReceive(ReadRegNumbers[registerToRead], ReadRegCRCs[registerToRead]); // set up the PDC - UART_TMC_DRV->UART_IER = UART_IER_ENDRX; // enable end-of-receive interrupt - UART_TMC_DRV->UART_CR = UART_CR_RXEN | UART_CR_TXEN; // enable transmitter and receiver + uart->UART_IER = UART_IER_ENDRX; // enable end-of-receive interrupt + uart->UART_CR = UART_CR_RXEN | UART_CR_TXEN; // enable transmitter and receiver transferStartedTime = millis(); cpu_irq_restore(flags); } @@ -735,44 +780,71 @@ inline void TmcDriverState::StartTransfer() } while (regNum < NumWriteRegisters - 1); // Kick off a transfer for that register - const irqflags_t flags = cpu_irq_save(); // avoid race condition + const irqflags_t flags = cpu_irq_save(); // avoid race condition registerBeingUpdated = mask; - UART_TMC_DRV->UART_CR = UART_CR_RSTRX | UART_CR_RSTTX; // reset transmitter and receiver + uart->UART_CR = UART_CR_RSTRX | UART_CR_RSTTX; // reset transmitter and receiver SetupDMASend(WriteRegNumbers[regNum], writeRegisters[regNum], writeRegCRCs[regNum]); // set up the PDC - UART_TMC_DRV->UART_IER = UART_IER_ENDRX; // enable end-of-transfer interrupt - UART_TMC_DRV->UART_CR = UART_CR_RXEN | UART_CR_TXEN; // enable transmitter and receiver + uart->UART_IER = UART_IER_ENDRX; // enable end-of-transfer interrupt + uart->UART_CR = UART_CR_RXEN | UART_CR_TXEN; // enable transmitter and receiver transferStartedTime = millis(); cpu_irq_restore(flags); } } -// ISR for the UART -extern "C" void UART_TMC_DRV_Handler(void) __attribute__ ((hot)); +// ISR(s) for the UART(s) -void UART_TMC_DRV_Handler(void) +inline void TmcDriverState::UartTmcHandler() { - TmcDriverState *driver = currentDriver; // capture volatile variable - if (driver != nullptr) + uart->UART_IDR = UART_IDR_ENDRX; // disable the PDC interrupt + TransferDone(); // tidy up after the transfer we just completed + if (driversState != DriversState::noPower) { - driver->TransferDone(); // tidy up after the transfer we just completed - if (driversState != DriversState::noPower) + // Power is still good, so send/receive again + TmcDriverState *driver = this; + ++driver; // advance to the next driver + if (driver >= driverStates + numTmc22xxDrivers) { - // Power is still good, so send/receive to/from the next driver - ++driver; // advance to the next driver - if (driver >= driverStates + numTmc22xxDrivers) - { - driver = driverStates; - } - driver->StartTransfer(); - return; + driver = driverStates; } + driver->StartTransfer(); } + else + { + currentDriver = nullptr; // signal that we are not waiting for an interrupt + } +} + +#if TMC22xx_HAS_MUX + +// ISR for the single UART +extern "C" void UART_TMC_DRV_Handler() __attribute__ ((hot)); +void UART_TMC_DRV_Handler() +{ + UART_TMC_DRV->UART_IDR = UART_IDR_ENDRX; // disable the interrupt + TmcDriverState *driver = TmcDriverState::currentDriver; // capture volatile variable + if (driver != nullptr) + { + driver->UartTmcHandler(); + } +} - // Driver power is down or there is no current driver, so stop polling - UART_TMC_DRV->UART_IDR = UART_IDR_ENDRX; - currentDriver = nullptr; // signal that we are not waiting for an interrupt +#else + +// ISRs for the individual UARTs +extern "C" void UART_TMC_DRV0_Handler() __attribute__ ((hot)); +void UART_TMC_DRV0_Handler() +{ + driverStates[0].UartTmcHandler(); +} + +extern "C" void UART_TMC_DRV1_Handler() __attribute__ ((hot)); +void UART_TMC_DRV1_Handler() +{ + driverStates[1].UartTmcHandler(); } +#endif + //--------------------------- Public interface --------------------------------- namespace SmartDrivers @@ -786,9 +858,9 @@ namespace SmartDrivers // Make sure the ENN pins are high pinMode(GlobalTmcEnablePin, OUTPUT_HIGH); - // The pins are already set up for UART use in the pins table - ConfigurePin(GetPinDescription(DriversRxPin)); - ConfigurePin(GetPinDescription(DriversTxPin)); +#if TMC22xx_HAS_MUX + // Set up- the single UART that communicates with all TMC22xx drivers + ConfigurePin(GetPinDescription(UART_TMC_DRV_PINS)); // the pins are already set up for UART use in the pins table // Enable the clock to the UART pmc_enable_periph_clk(ID_UART_TMC_DRV); @@ -799,16 +871,35 @@ namespace SmartDrivers UART_TMC_DRV->UART_MR = UART_MR_CHMODE_NORMAL | UART_MR_PAR_NO; UART_TMC_DRV->UART_BRGR = VARIANT_MCK/(16 * DriversBaudRate); // set baud rate UART_TMC_DRV->UART_CR = UART_CR_RSTRX | UART_CR_RSTTX | UART_CR_RXDIS | UART_CR_TXDIS | UART_CR_RSTSTA; + NVIC_EnableIRQ(UART_TMC_DRV_IRQn); // Set up the multiplexer control pins as outputs pinMode(DriverMuxPins[0], OUTPUT_LOW); pinMode(DriverMuxPins[1], OUTPUT_LOW); pinMode(DriverMuxPins[2], OUTPUT_LOW); +#endif driversState = DriversState::noPower; for (size_t drive = 0; drive < numTmc22xxDrivers; ++drive) { - driverStates[drive].Init(drive, driverSelectPins[drive]); // axes are mapped straight through to drivers initially +#if !TMC22xx_HAS_MUX + // Initialise the UART that controls this driver + // The pins are already set up for UART use in the pins table + ConfigurePin(GetPinDescription(DriverUartPins[drive])); + + // Enable the clock to the UART + pmc_enable_periph_clk(DriverUartIds[drive]); + + // Set the UART baud rate, 8 bits, 2 stop bits, no parity + Uart * const uart = DriverUarts[drive]; + uart->UART_IDR = ~0u; + uart->UART_CR = UART_CR_RSTRX | UART_CR_RSTTX | UART_CR_RXDIS | UART_CR_TXDIS; + uart->UART_MR = UART_MR_CHMODE_NORMAL | UART_MR_PAR_NO; + uart->UART_BRGR = VARIANT_MCK/(16 * DriversBaudRate); // set baud rate + uart->UART_CR = UART_CR_RSTRX | UART_CR_RSTTX | UART_CR_RXDIS | UART_CR_TXDIS | UART_CR_RSTSTA; + NVIC_EnableIRQ(DriverUartIRQns[drive]); +#endif + driverStates[drive].Init(drive, driverSelectPins[drive]); // axes are mapped straight through to drivers initially } } @@ -903,7 +994,6 @@ namespace SmartDrivers if (powered) { // Power to the drivers has been provided or restored, so we need to enable and re-initialise them - for (size_t drive = 0; drive < numTmc22xxDrivers; ++drive) { driverStates[drive].WriteAll(); @@ -913,36 +1003,40 @@ namespace SmartDrivers } else if (powered) { - if (currentDriver == nullptr) + // If no transfer is in progress, kick one off. + // If a transfer has timed out, abort it. + if (TmcDriverState::currentDriver == nullptr) { // No transfer in progress, so start one if (numTmc22xxDrivers != 0) { // Kick off the first transfer - NVIC_EnableIRQ(SERIAL_TMC_DRV_IRQn); driverStates[0].StartTransfer(); } } - else if (millis() - transferStartedTime > TransferTimeout) + else if (millis() - TmcDriverState::transferStartedTime > TransferTimeout) { // A UART transfer was started but has timed out - currentDriver->TransferTimedOut(); - uint8_t driverNum = currentDriver->GetDriverNumber(); - TmcDriverState::AbortTransfer(); // this clears currentDriver + TmcDriverState::currentDriver->TransferTimedOut(); + TmcDriverState::currentDriver->AbortTransfer(); + uint8_t driverNum = TmcDriverState::currentDriver->GetDriverNumber(); + TmcDriverState::currentDriver = nullptr; + ++driverNum; if (driverNum >= numTmc22xxDrivers) { driverNum = 0; } + driverStates[driverNum].StartTransfer(); } if (driversState == DriversState::initialising) { - // If all drivers have been initialised, set the global enable + // If all drivers that share the global enable have been initialised, set the global enable bool allInitialised = true; for (size_t i = 0; i < numTmc22xxDrivers; ++i) { - if (driverStates[i].UpdatePending()) + if (driverStates[i].UsesGlobalEnable() && driverStates[i].UpdatePending()) { allInitialised = false; break; @@ -960,7 +1054,11 @@ namespace SmartDrivers { // We had power but we lost it digitalWrite(GlobalTmcEnablePin, HIGH); // disable the drivers - TmcDriverState::AbortTransfer(); + if (TmcDriverState::currentDriver == nullptr) + { + TmcDriverState::currentDriver->AbortTransfer(); + TmcDriverState::currentDriver = nullptr; + } driversState = DriversState::noPower; } } @@ -1001,4 +1099,6 @@ namespace SmartDrivers }; // end namespace +#endif + // End diff --git a/src/DuetM/TMC22xx.h b/src/StepperDrivers/TMC22xx/TMC22xx.h index 4e181fdc..7e09de0a 100644 --- a/src/DuetM/TMC22xx.h +++ b/src/StepperDrivers/TMC22xx/TMC22xx.h @@ -5,8 +5,16 @@ * Author: David */ -#ifndef TMC2660_H_ -#define TMC2660_H_ +// NB - must #include some file that includes Pins.h before including this one, so that SUPPORT_TMC22xx is defined + +#ifndef TMC22xx_H_ +#define TMC22xx_H_ + +#if SUPPORT_TMC22xx + +#ifndef TMC22xx_HAS_MUX +# error TMC22xx_HAS_MUX not defined +#endif #include "RepRapFirmware.h" #include "GCodes/DriverMode.h" @@ -14,12 +22,6 @@ #include "MessageType.h" #include "Libraries/General/StringRef.h" -// The Platform class needs to know which USART we are using when assigning interrupt priorities (SERIAL_TMC_DRV_IRQn), so we define the UART we are using here -#define UART_TMC_DRV UART0 -#define SERIAL_TMC_DRV_IRQn UART0_IRQn -#define ID_UART_TMC_DRV ID_UART0 -#define UART_TMC_DRV_Handler UART0_Handler - // TMC22xx DRV_STATUS register bit assignments const uint32_t TMC_RR_OT = 1 << 1; // over temperature shutdown const uint32_t TMC_RR_OTPW = 1 << 0; // over temperature warning @@ -56,4 +58,6 @@ namespace SmartDrivers void SetStandstillCurrentPercent(size_t drive, float percent); }; -#endif /* TMC2660_H_ */ +#endif + +#endif /* TMC22xx_H_ */ diff --git a/src/DuetNG/TMC2660.cpp b/src/StepperDrivers/TMC2660/TMC2660.cpp index c601fcf0..e390e690 100644 --- a/src/DuetNG/TMC2660.cpp +++ b/src/StepperDrivers/TMC2660/TMC2660.cpp @@ -5,6 +5,10 @@ * Author: David */ +#include "RepRapFirmware.h" + +#if SUPPORT_TMC2660 + #include "TMC2660.h" #include "RepRap.h" #include "Movement/Move.h" @@ -501,27 +505,30 @@ uint32_t TmcDriverState::GetChopConf() const // This is called by the ISR when the SPI transfer has completed inline void TmcDriverState::TransferDone() { - fastDigitalWriteHigh(pin); // set the CS pin high for the driver we just polled - uint32_t status = be32_to_cpu(spiDataIn) >> 12; // get the status - const uint32_t interval = reprap.GetMove().GetStepInterval(axisNumber, microstepShiftFactor); // get the full step interval - if (interval == 0 || interval > maxStallStepInterval) // if the motor speed is too low to get reliable stall indication - { - status &= ~TMC_RR_SG; // remove the stall status bit - } - else + fastDigitalWriteHigh(pin); // set the CS pin high for the driver we just polled + if (driversPowered) // if the power is still good, update the status { - const uint32_t sgLoad = (status >> TMC_RR_SG_LOAD_SHIFT) & 1023; // get the StallGuard load register - if (sgLoad < minSgLoadRegister) + uint32_t status = be32_to_cpu(spiDataIn) >> 12; // get the status + const uint32_t interval = reprap.GetMove().GetStepInterval(axisNumber, microstepShiftFactor); // get the full step interval + if (interval == 0 || interval > maxStallStepInterval) // if the motor speed is too low to get reliable stall indication { - minSgLoadRegister = sgLoad; + status &= ~TMC_RR_SG; // remove the stall status bit } - if (sgLoad > maxSgLoadRegister) + else { - maxSgLoadRegister = sgLoad; + const uint32_t sgLoad = (status >> TMC_RR_SG_LOAD_SHIFT) & 1023; // get the StallGuard load register + if (sgLoad < minSgLoadRegister) + { + minSgLoadRegister = sgLoad; + } + if (sgLoad > maxSgLoadRegister) + { + maxSgLoadRegister = sgLoad; + } } + lastReadStatus = status; + accumulatedStatus |= status; } - lastReadStatus = status; - accumulatedStatus |= status; } // This is called from the ISR or elsewhere to start a new SPI transfer. Inlined for ISR speed. @@ -743,7 +750,7 @@ namespace SmartDrivers if (currentDriver == nullptr && numTmc2660Drivers != 0) { // Kick off the first transfer - NVIC_EnableIRQ(SERIAL_TMC_DRV_IRQn); + NVIC_EnableIRQ(UART_TMC_DRV_IRQn); driverStates[0].StartTransfer(); } } @@ -820,6 +827,8 @@ namespace SmartDrivers }; // end namespace +#endif + // End diff --git a/src/DuetNG/TMC2660.h b/src/StepperDrivers/TMC2660/TMC2660.h index c31f6ffe..ceed9734 100644 --- a/src/DuetNG/TMC2660.h +++ b/src/StepperDrivers/TMC2660/TMC2660.h @@ -8,6 +8,8 @@ #ifndef TMC2660_H_ #define TMC2660_H_ +#if SUPPORT_TMC2660 + #include "RepRapFirmware.h" #include "GCodes/DriverMode.h" #include "Pins.h" @@ -16,7 +18,7 @@ // The Platform class needs to know which USART we are using when assigning interrupt priorities #define USART_TMC_DRV USART1 -#define SERIAL_TMC_DRV_IRQn USART1_IRQn +#define UART_TMC_DRV_IRQn USART1_IRQn #define ID_USART_TMC_DRV ID_USART1 #define USART_TMC_DRV_Handler USART1_Handler @@ -58,4 +60,6 @@ namespace SmartDrivers void SetStandstillCurrentPercent(size_t driver, float percent); }; +#endif + #endif /* TMC2660_H_ */ diff --git a/src/Storage/FileStore.cpp b/src/Storage/FileStore.cpp index 07322cb9..002c31f6 100644 --- a/src/Storage/FileStore.cpp +++ b/src/Storage/FileStore.cpp @@ -5,6 +5,7 @@ #include "MassStorage.h" #include "Platform.h" #include "RepRap.h" +#include "Libraries/Fatfs/diskio.h" uint32_t FileStore::longestWriteTime = 0; @@ -476,6 +477,12 @@ float FileStore::GetAndClearLongestWriteTime() return ret; } +// Return the highest SD card retry count that resulted in a successful transfer +unsigned int FileStore::GetAndClearMaxRetryCount() +{ + return DiskioGetAndClearMaxRetryCount(); +} + #if 0 // not currently used // Provide a cluster map for fast seeking. Needs _USE_FASTSEEK defined as 1 in conf_fatfs to make any difference. diff --git a/src/Storage/FileStore.h b/src/Storage/FileStore.h index 9f674a4b..8626974d 100644 --- a/src/Storage/FileStore.h +++ b/src/Storage/FileStore.h @@ -60,7 +60,7 @@ public: bool SetClusterMap(uint32_t[]); // Provide a cluster map for fast seeking #endif static float GetAndClearLongestWriteTime(); // Return the longest time it took to write a block to a file, in milliseconds - + static unsigned int GetAndClearMaxRetryCount(); // Return the highest SD card retry count that resulted in a successful transfer friend class MassStorage; private: diff --git a/src/Tasks.cpp b/src/Tasks.cpp index 193198f9..db4139b8 100644 --- a/src/Tasks.cpp +++ b/src/Tasks.cpp @@ -201,23 +201,15 @@ namespace Tasks p.MessageF(mtype, " %s(%s,%u)", taskDetails.pcTaskName, stateText, (unsigned int)(taskDetails.usStackHighWaterMark * sizeof(StackType_t))); } - p.Message(mtype, "\nMutexes:"); + p.Message(mtype, "\nOwned mutexes:"); for (const Mutex *m = Mutex::GetMutexList(); m != nullptr; m = m->GetNext()) { const TaskHandle holder = m->GetHolder(); - TaskStatus_t taskDetails; - const char *holderText; - if (holder == nullptr) - { - holderText = "null"; - } - else + if (holder != nullptr) { - vTaskGetInfo(holder, &taskDetails, pdTRUE, eInvalid); - holderText = taskDetails.pcTaskName; + p.MessageF(mtype, " %s(%s)", m->GetName(), pcTaskGetName(holder)); } - p.MessageF(mtype, " %s(%s)", m->GetName(), holderText); } p.MessageF(mtype, "\n"); #endif diff --git a/src/Tools/Tool.cpp b/src/Tools/Tool.cpp index 87cd83f8..2aee50b1 100644 --- a/src/Tools/Tool.cpp +++ b/src/Tools/Tool.cpp @@ -34,7 +34,7 @@ Tool * Tool::freelist = nullptr; // Create a new tool and return a pointer to it. If an error occurs, put an error message in 'reply' and return nullptr. -/*static*/ Tool *Tool::Create(int toolNumber, const char *name, long d[], size_t dCount, long h[], size_t hCount, AxesBitmap xMap, AxesBitmap yMap, FansBitmap fanMap, bool forceFilament, const StringRef& reply) +/*static*/ Tool *Tool::Create(int toolNumber, const char *name, long d[], size_t dCount, long h[], size_t hCount, AxesBitmap xMap, AxesBitmap yMap, FansBitmap fanMap, int filamentDrive, const StringRef& reply) { const size_t numExtruders = reprap.GetGCodes().GetNumExtruders(); if (dCount > ARRAY_SIZE(Tool::drives)) @@ -82,11 +82,10 @@ Tool * Tool::freelist = nullptr; t = new Tool; } - if (dCount == 1 || (dCount > 0 && forceFilament)) + if (filamentDrive >= 0 && filamentDrive < (int)MaxExtruders) { - // Create only one Filament instance per extruder drive, and only if this tool is assigned to exactly one extruder - // This option can be overridden manually though - Filament * const filament = Filament::GetFilamentByExtruder(d[0]); + // Use exactly only one Filament instance per extruder drive + Filament * const filament = Filament::GetFilamentByExtruder(filamentDrive); t->filament = (filament == nullptr) ? new Filament(d[0]) : filament; } else diff --git a/src/Tools/Tool.h b/src/Tools/Tool.h index 4afba13b..0c12c21b 100644 --- a/src/Tools/Tool.h +++ b/src/Tools/Tool.h @@ -45,7 +45,7 @@ class Tool { public: - static Tool *Create(int toolNumber, const char *name, long d[], size_t dCount, long h[], size_t hCount, AxesBitmap xMap, AxesBitmap yMap, FansBitmap fanMap, bool forceFilament, const StringRef& reply); + static Tool *Create(int toolNumber, const char *name, long d[], size_t dCount, long h[], size_t hCount, AxesBitmap xMap, AxesBitmap yMap, FansBitmap fanMap, int filamentDrive, const StringRef& reply); static void Delete(Tool *t); float GetOffset(size_t axis) const pre(axis < MaxAxes); diff --git a/src/Version.h b/src/Version.h index d3695b71..bc5732f3 100644 --- a/src/Version.h +++ b/src/Version.h @@ -12,9 +12,9 @@ #ifndef VERSION #ifdef RTOS # define RTOSVER "(RTOS)" -# define MAIN_VERSION "2.01beta3" +# define MAIN_VERSION "2.01beta3+1" #else -# define MAIN_VERSION "1.21.2beta3" +# define MAIN_VERSION "1.22beta3+1" # define RTOSVER #endif @@ -22,7 +22,7 @@ #endif #ifndef DATE -# define DATE "2018-07-20b1" +# define DATE "2018-07-23b1" #endif #define AUTHORS "reprappro, dc42, chrishamm, t3p3, dnewman" |