Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/Duet3D/RepRapFirmware.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Crocker <dcrocker@eschertech.com>2018-10-28 23:52:24 +0300
committerDavid Crocker <dcrocker@eschertech.com>2018-10-28 23:52:24 +0300
commita53827a85c6b60cf27893a2ffe9f67f7a0fa02df (patch)
tree0b91a2c727871ac22e1f18bd3f1fc9f7ad52047e
parent36337d83b1a5e48831447667a2045f7190c44994 (diff)
Release 2.02RC4 provisional
G30 H parameters didn't work if deployprobe.g or retractprobe.g file present Execute residual babystepping immediately Warning message if trying to move motors on internal drivers but VIN too low or too high Send mapped fan speed at the start of the fan speed list in the M408 response for PanelDue PanelDue emergency stop interrupt from UART driver M408 P1 F"gcodes" returned an empty gcodes object Variable substitution in GCode commands wasn't working Object model returned wrong value for speed factor Support string-valued object model values in JSON report Increased min fullsteps for motor open detection from 4 to 20 Brought RADDS build up to date and use RTOS
-rw-r--r--.cproject15
-rw-r--r--.settings/language.settings.xml20
-rw-r--r--src/BugList.txt111
-rw-r--r--src/Configuration.h2
-rw-r--r--src/Display/MenuItem.cpp2
-rw-r--r--src/Duet3/Pins_Duet3.h2
-rw-r--r--src/DuetM/Pins_DuetM.h2
-rw-r--r--src/DuetNG/Pins_DuetNG.h2
-rw-r--r--src/GCodes/GCodeBuffer.cpp2
-rw-r--r--src/GCodes/GCodes.cpp54
-rw-r--r--src/GCodes/GCodes.h10
-rw-r--r--src/GCodes/GCodes2.cpp14
-rw-r--r--src/Networking/ESP8266WiFi/WiFiInterface.cpp1
-rw-r--r--src/Networking/LwipEthernet/LwipEthernetInterface.cpp1
-rw-r--r--src/Networking/Network.cpp2
-rw-r--r--src/Networking/W5500Ethernet/W5500Interface.cpp1
-rw-r--r--src/ObjectModel/ObjectModel.cpp158
-rw-r--r--src/ObjectModel/ObjectModel.h60
-rw-r--r--src/OutputMemory.cpp4
-rw-r--r--src/Pccb/Pins_Pccb.h2
-rw-r--r--src/Platform.cpp54
-rw-r--r--src/Platform.h4
-rw-r--r--src/RADDS/Network.h11
-rw-r--r--src/RADDS/Pins_RADDS.h25
-rw-r--r--src/RepRap.cpp17
-rw-r--r--src/SAME70xpld/Pins_SAME70xpld.h2
-rw-r--r--src/Version.h4
27 files changed, 265 insertions, 317 deletions
diff --git a/.cproject b/.cproject
index 485ead60..7330ebf3 100644
--- a/.cproject
+++ b/.cproject
@@ -117,7 +117,7 @@
<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">
+ <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_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"/>
@@ -135,7 +135,7 @@
</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}}/${BuildArtifactFileBaseName}.elf ${workspace_loc:/${ProjName}/${ConfigName}}/${BuildArtifactFileBaseName}.bin">
+ <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_RTOS" 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"/>
@@ -166,6 +166,7 @@
<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__"/>
+ <listOptionValue builtIn="false" value="RTOS"/>
</option>
<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.110609707" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
</tool>
@@ -174,10 +175,14 @@
<tool command="gcc" commandLinePattern="${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${LinkFlags1} &quot;${workspace_loc}/${CoreName}/RADDS/cores/arduino/syscalls.o&quot; ${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="&quot;${workspace_loc:/${CoreName}/RADDS/}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/${CoreName}/RADDS_RTOS/}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/FreeRTOS/SAM3X}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/RRFLibraries/SAM3X_RTOS}&quot;"/>
</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}"/>
+ <listOptionValue builtIn="false" value="FreeRTOS"/>
+ <listOptionValue builtIn="false" value="RRFLibraries"/>
</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&quot;${workspace_loc:/${CoreName}/variants/RADDS/linker_scripts/gcc/flash.ld}&quot; -Wl,-Map,&quot;${workspace_loc:/${ProjName}/${ConfigName}}/${BuildArtifactFileBaseName}.map&quot;" valueType="string"/>
<inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.99895855" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
@@ -209,10 +214,14 @@
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${CoreName}/variants/RADDS}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/RADDS}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/FreeRTOS/src/include}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/FreeRTOS/src/portable/GCC/ARM_CM3}&quot;"/>
+ <listOptionValue builtIn="false" value="&quot;${workspace_loc:/RRFLibraries/src}&quot;"/>
</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="RTOS"/>
<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"/>
diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml
index 33bc54e2..c75b6be1 100644
--- a/.settings/language.settings.xml
+++ b/.settings/language.settings.xml
@@ -5,18 +5,18 @@
<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="-159893819235269839" 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 &quot;${INPUTS}&quot;" prefer-non-shared="true">
+ <provider class="org.eclipse.cdt.internal.build.crossgcc.CrossGCCBuiltinSpecsDetector" console="false" env-hash="1375560664997985665" 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 &quot;${INPUTS}&quot;" 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">
+ <configuration id="cdt.managedbuild.config.gnu.cross.exe.release.516195201.976458850.1027429289" name="RADDS_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="-159893819235269839" 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 &quot;${INPUTS}&quot;" prefer-non-shared="true">
+ <provider class="org.eclipse.cdt.internal.build.crossgcc.CrossGCCBuiltinSpecsDetector" console="false" env-hash="1375560664997985665" 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 &quot;${INPUTS}&quot;" prefer-non-shared="true">
<language-scope id="org.eclipse.cdt.core.gcc"/>
<language-scope id="org.eclipse.cdt.core.g++"/>
</provider>
@@ -27,7 +27,7 @@
<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="-159893819235269839" 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 &quot;${INPUTS}&quot;" prefer-non-shared="true">
+ <provider class="org.eclipse.cdt.internal.build.crossgcc.CrossGCCBuiltinSpecsDetector" console="false" env-hash="1375560664997985665" 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 &quot;${INPUTS}&quot;" prefer-non-shared="true">
<language-scope id="org.eclipse.cdt.core.gcc"/>
<language-scope id="org.eclipse.cdt.core.g++"/>
</provider>
@@ -38,7 +38,7 @@
<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="-159893819235269839" 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 &quot;${INPUTS}&quot;" prefer-non-shared="true">
+ <provider class="org.eclipse.cdt.internal.build.crossgcc.CrossGCCBuiltinSpecsDetector" console="false" env-hash="1375560664997985665" 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 &quot;${INPUTS}&quot;" prefer-non-shared="true">
<language-scope id="org.eclipse.cdt.core.gcc"/>
<language-scope id="org.eclipse.cdt.core.g++"/>
</provider>
@@ -49,7 +49,7 @@
<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="-159893819235269839" 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 &quot;${INPUTS}&quot;" prefer-non-shared="true">
+ <provider class="org.eclipse.cdt.internal.build.crossgcc.CrossGCCBuiltinSpecsDetector" console="false" env-hash="1375560664997985665" 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 &quot;${INPUTS}&quot;" prefer-non-shared="true">
<language-scope id="org.eclipse.cdt.core.gcc"/>
<language-scope id="org.eclipse.cdt.core.g++"/>
</provider>
@@ -60,7 +60,7 @@
<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="-159893819235269839" 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 &quot;${INPUTS}&quot;" prefer-non-shared="true">
+ <provider class="org.eclipse.cdt.internal.build.crossgcc.CrossGCCBuiltinSpecsDetector" console="false" env-hash="1375560664997985665" 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 &quot;${INPUTS}&quot;" prefer-non-shared="true">
<language-scope id="org.eclipse.cdt.core.gcc"/>
<language-scope id="org.eclipse.cdt.core.g++"/>
</provider>
@@ -71,7 +71,7 @@
<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="-159893819235269839" 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 &quot;${INPUTS}&quot;" prefer-non-shared="true">
+ <provider class="org.eclipse.cdt.internal.build.crossgcc.CrossGCCBuiltinSpecsDetector" console="false" env-hash="1375560664997985665" 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 &quot;${INPUTS}&quot;" prefer-non-shared="true">
<language-scope id="org.eclipse.cdt.core.gcc"/>
<language-scope id="org.eclipse.cdt.core.g++"/>
</provider>
@@ -82,7 +82,7 @@
<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="-159893819235269839" 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 &quot;${INPUTS}&quot;" prefer-non-shared="true">
+ <provider class="org.eclipse.cdt.internal.build.crossgcc.CrossGCCBuiltinSpecsDetector" console="false" env-hash="1375560664997985665" 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 &quot;${INPUTS}&quot;" prefer-non-shared="true">
<language-scope id="org.eclipse.cdt.core.gcc"/>
<language-scope id="org.eclipse.cdt.core.g++"/>
</provider>
@@ -93,7 +93,7 @@
<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="-159893819235269839" 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 &quot;${INPUTS}&quot;" prefer-non-shared="true">
+ <provider class="org.eclipse.cdt.internal.build.crossgcc.CrossGCCBuiltinSpecsDetector" console="false" env-hash="1375560664997985665" 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 &quot;${INPUTS}&quot;" prefer-non-shared="true">
<language-scope id="org.eclipse.cdt.core.gcc"/>
<language-scope id="org.eclipse.cdt.core.g++"/>
</provider>
diff --git a/src/BugList.txt b/src/BugList.txt
index 94665734..67fd3ec5 100644
--- a/src/BugList.txt
+++ b/src/BugList.txt
@@ -48,20 +48,7 @@ Done in 2.02RC2:
- [done] If a bad curve fit occurs during tuning, display the values as A, C and D instead of G, tc and td to better relate to M307
- [done, M3D testing] Merge in Matt's display changes
-Investigations:
-**- 3 independent Z motors, https://forum.duet3d.com/topic/6974/problem-with-3-independent-z-axis-motors-and-endstops/26
-- incorrect babystepping, https://forum.duet3d.com/topic/6888/babystep-bug-w-incorrect-motion/2 (already fixed 1mm limit)
-- [tested, pause/resume works as intended] Check M106 R1 parameter, see https://forum.duet3d.com/topic/6538/resuming-print-fan-after-pause
-- M226 not working? https://forum.duet3d.com/topic/6860/filament-change-no-reaction/3
-- Weird height map, https://forum.duet3d.com/topic/6472/mesh-grid-compensation/28
-- Full stepping problem, https://forum.duet3d.com/topic/6433/how-to-reduce-the-speed-of-extrusion/14
-- Print time estimation problem, see https://forum.duet3d.com/topic/5572/it-s-out-reprapfirmware-2-0-and-1-21-1-released/64 and https://forum.duet3d.com/topic/5572/it-s-out-reprapfirmware-2-0-and-1-21-1-released/73
-- Disconnections, https://forum.duet3d.com/topic/6487/running-bed-mesh-compensation/19
-- M122, https://forum.duet3d.com/topic/6725/m122-does-not-work-from-dwc-console
-- DueX5 LEDs flashing at boot time, https://forum.duet3d.com/topic/6970/led-strip-flashing-on-boot-duex5
-- M24 after heater fault pause, https://forum.duet3d.com/topic/7154/firmware-2-01-resume-after-heater-fault-isn-t-working
-
-Remaining:
+Done in 2.02RC3:
- [done, test] Zero or negative Z probe tolerance means always average all readings (G30 and G29)
- [done, test] When storage debug enabled, failing to open a file is a warning not an error
- [done, test] Improve motor phase open circuit message and make it a warning not an error
@@ -92,15 +79,74 @@ Remaining:
- [done, ok] G30 S-1 when no Z probe, https://forum.duet3d.com/topic/6510/a-couple-of-dwc-odd-things/2
- [done] Log Z leadscrew/manual adjustment calibration results even if calibration failed
- [done] Log mesh probing results to file
+- [done] Fix 12864 fan speed display issue (displays 3000 after processing M106 S30)
+Closed investigations:
+- [no fault] stall detect on Z axis
+- [re-test using new DuetWiFiServer] "Failed to change mode" messages after M552 S2/S0/S1 cycle
+- [can't reproduce] "Attempt to seek on a non-open file", https://www.duet3d.com/forum/thread.php?pid=41175#p41175
+- [hopefully this is fixed by the DHCP fixes, or else there is a DueX involved] https://www.duet3d.com/forum/thread.php?pid=37797#p37797 (Duet Ethernet long delays between moves)
+- [no idea, bus fault in pbuf_cat] Look at https://www.duet3d.com/forum/thread.php?pid=37551#p37551
- [no fault located, re-test] Fix Duet 3 ABC axes
- [no fault located, re-test] Wait for all moves to stop before M584
-- check DAA working as intended, results are inconsistent. Problem when used with segmented kinematics because the acceleration is in multiple segments.
-- Allow extruder movement in tpre? https://forum.duet3d.com/topic/7263/controlling-stepper-motors-via-drive-numbers-eg-g1-d4-700-f100/4
- [no, it already adds 22 checksum bits] Add check digit to serial number
- [no, we don't record print time] Distinguish between estimated/simulated/actual print time in M36
-- M207 per-tool values, https://forum.duet3d.com/topic/6855/add-drive-extruder-parameter-to-m207/6
- [problem gone away] chrishamm's watchdog issue, see his email of 2018-08-01
+- [tested, pause/resume works as intended] Check M106 R1 parameter, see https://forum.duet3d.com/topic/6538/resuming-print-fan-after-pause
+
+Open investigations:
+- Test extruder stall detection, https://forum.duet3d.com/topic/7300/issues-using-stall-detection-when-loading-filament
+- [check] if a homing command in an SD print file is aborted due to e.g. G1 Z5 in the homing file, error message should be written to both DWC and PanelDue
+- 3 independent Z motors, https://forum.duet3d.com/topic/6974/problem-with-3-independent-z-axis-motors-and-endstops/26
+- incorrect babystepping, https://forum.duet3d.com/topic/6888/babystep-bug-w-incorrect-motion/2 (already fixed 1mm limit)
+- M226 not working? https://forum.duet3d.com/topic/6860/filament-change-no-reaction/3
+- Weird height map, https://forum.duet3d.com/topic/6472/mesh-grid-compensation/28
+- Full stepping problem, https://forum.duet3d.com/topic/6433/how-to-reduce-the-speed-of-extrusion/14
+- Print time estimation problem, see https://forum.duet3d.com/topic/5572/it-s-out-reprapfirmware-2-0-and-1-21-1-released/64 and https://forum.duet3d.com/topic/5572/it-s-out-reprapfirmware-2-0-and-1-21-1-released/73
+- Disconnections, https://forum.duet3d.com/topic/6487/running-bed-mesh-compensation/19
+- M122, https://forum.duet3d.com/topic/6725/m122-does-not-work-from-dwc-console
+- DueX5 LEDs flashing at boot time, https://forum.duet3d.com/topic/6970/led-strip-flashing-on-boot-duex5
+- M24 after heater fault pause, https://forum.duet3d.com/topic/7154/firmware-2-01-resume-after-heater-fault-isn-t-working
+- check DAA working as intended, results are inconsistent. Problem when used with segmented kinematics because the acceleration is in multiple segments.
+
+To be fixed in 2.02 release:
+- [done, test] G30 H parameters don't work if deployprobe.g or retractprobe.g file present
+- [done, test] Execute residual babystepping immediately
+- [done, test] Warning message if trying to move motors on internal drivers but VIN too low or too high
+- [done, ok] Send mapped fan speed at the start of the fan speed list in the M408 response for PanelDue
+- [done, ok] PanelDue emergency stop interrupt from UART driver
+- [done, ok] M408 P1 F"gcodes" returns an empty gcodes object
+- [done, ok] Variable substitution in GCode commands
+- [done, ok in DWC and PanelDue, test on 12864] Object model returned wrong value for speed factor
+- [done, ok] support string-valued object model values in JSON report
+- [done, test] increase min fullsteps for motor open detection from 4 to 20
+- [done] Bring RADDS build up to date and use RTOS
+
+Future:
+- Allow jerk between printing and non-printing moves, so that coast-to-end works?
+- M408 P1 S"gcodes" returns an empty gcodes object, so does m408p1 f"gcodes.speedFactor"
+- Error handling in [variable] parser in GCodeBuffer class
+- In object model, "interface"->"interfaces" to look better in JSON response
+- WiFi auto reconnect should not log all unsuccessful connection attempts, just the first one
+- Option to send M280 servo commands just a few times instead of continuously, for E3D
+- M122 to tell you if the drivers are enabled, or disabled and waiting for the correct voltage
+- M3 R parameter so it can restore the spinder/laser after a pause (https://forum.duet3d.com/topic/5418/cnc-laser-m3-unpause-r-parameter)
+- Adjust laser power during acceleration/deceleration
+- First layer segmentation, to help with baby stepping? Or another way to implement live babystepping?
+- Complete the object model
+- Conditional GCode
+- Object model variables in 12864 display
+- CNC shutdown when movement outside limits attempted not working well, https://forum.duet3d.com/topic/6186/stable-firmware-2-01-duet-2-and-1-22-duet-06-085-released/55
+- 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
+- M584 allow an axis to be mapped to driver -1
+- If wifi module gets stuck in starting or changing mode state, reset it again
+- 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
+- CNC: look at G17/18/19, see https://forum.duet3d.com/topic/4669/ooznest-workbee-screw-driven
+
+- Allow extruder movement in tpre? https://forum.duet3d.com/topic/7263/controlling-stepper-motors-via-drive-numbers-eg-g1-d4-700-f100/4
+- M207 per-tool values, https://forum.duet3d.com/topic/6855/add-drive-extruder-parameter-to-m207/6
- Command to copy output from the following commands to the log file?
- Track which devices use which pins
- Hangprinter PRs
@@ -108,34 +154,20 @@ Remaining:
- M116 parameter to set allowed temperature difference
- Alternative G10 command to set offsets from known current tool position, see https://forum.duet3d.com/topic/6465/g92-g10-m585-for-setting-head-position-not-machine-position/4
- Keep sending M408 responses to PanelDue while waiting for movement to complete, or M400 or homing move or similar
-- CNC shutdown when movement outside limits attempted not working well, https://forum.duet3d.com/topic/6186/stable-firmware-2-01-duet-2-and-1-22-duet-06-085-released/55
-
-Future:
-- Extra logging? https://forum.duet3d.com/topic/7103/extend-m929-logging-capabilities/5
+- Extra logging? [did some extra in 2.02RC3] https://forum.duet3d.com/topic/7103/extend-m929-logging-capabilities/5
- Junction deviation instead of jerk?
-- first layer segmentation, to help with baby stepping? Or another way to implement live babystepping?
- Still doesn't always find the DueX5, see https://forum.duet3d.com/topic/6239/unstable-after-firmware-upgrade/3. Is the Heat task affecting the timing? Need new I2C driver?
-- [do in DuetWiFiServer] 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
- Danny's modified SCARA kinematics (workpiece is on a plate, extruder is fixed)
- Look at pushover notification support, https://forum.duet3d.com/topic/169/notification-via-pushover-or-other-service/45
-- M3 R parameter so it can restore the spinder/laser after a pause (https://forum.duet3d.com/topic/5418/cnc-laser-m3-unpause-r-parameter)
- M81: don't give low voltage warnings when main power has just been turned off
- M81: option to invert polarity?
-- M584 when assigning a drive, unmap any existing assignment? [sometimes we want dual mapping] 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 (including on Duet M), also allow all 12 drivers to be smart
- 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
- M140 command to set default bed heaters for M140 S commands (e.g. M140 P0:1:2)
- Consider: Heater faults to run M81 even when not doing a build (https://forum.duet3d.com/topic/6225/configure-action-on-heater-fault/7)
- Option to repeat G32 until deviation/leadscrew adjustment is below a threshold or a retry count reached (and allow for probing failures)
- Macro option when a motor stall is detected, https://forum.duet3d.com/topic/7026/more-options-for-stall-detection
-
-Other (some of these may be in 2.02):
- Update PanelDue firmware via Duet
- Use Heat task to read DHT sensors?
- Add option R4 to M915 command, to do an emergency stop (useful for Z motor)
@@ -146,30 +178,17 @@ Other (some of these may be in 2.02):
- Unexpected heaters off/tool selection behaviour, https://www.duet3d.com/forum/thread.php?pid=43059#p43059
- warn when using : where ; was probably meant
- Error message if you attempt movement with VIN < minimum
+- When VIN power too low and stepper drivers turned off, flag axes as not homed?
- min/max RSSI display?
- report RSSI in M552?
-- When VIN power too low and stepper drivers turned off, flag axes as not homed?
- 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
- 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
- Option to send stall warning messages when not printing from SD card, https://forum.duet3d.com/topic/6720/stall-protection-on-pyserial-print
- Custom macros to execute on stall detection, including extruder stall detection https://forum.duet3d.com/topic/6730/stall-detection-custom-actions
-- [check] if a homing command in an SD print file is aborted due to e.g. G1 Z5 in the homing file, error message should be written to both DWC and PanelDue
-- [no fault] stall detect on Z axis
-- Files generated by Cura doesn't detect layer changes, see https://www.duet3d.com/forum/thread.php?pid=40865#p40865
-- [re-test using new DuetWiFiServer] "Failed to change mode" messages after M552 S2/S0/S1 cycle
-- [can't reproduce] "Attempt to seek on a non-open file", https://www.duet3d.com/forum/thread.php?pid=41175#p41175
-- [hopefully this is fixed by the DHCP fixes] https://www.duet3d.com/forum/thread.php?pid=37797#p37797 (Duet Ethernet long delays between moves)
-- [no idea, bus fault in pbuf_cat] Look at https://www.duet3d.com/forum/thread.php?pid=37551#p37551
-
- When Z probe readings are out of tolerance, display the lowest difference seen between consecutive readings?
-- 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
- 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 c29f882d..f6469073 100644
--- a/src/Configuration.h
+++ b/src/Configuration.h
@@ -55,7 +55,7 @@ constexpr uint32_t LogFlushInterval = 15000; // Milliseconds
constexpr uint32_t DriverCoolingTimeout = 4000; // Milliseconds
constexpr float DefaultMessageTimeout = 10.0; // How long a message is displayed by default, in seconds
-constexpr uint32_t MinimumOpenLoadFullStepsPerSec = 4;
+constexpr uint32_t MinimumOpenLoadFullStepsPerSec = 20; // this is 4mm/sec @ 80steps/mm
// FanCheckInterval must be lower than MinimumWarningInterval to avoid giving driver over temperature warnings too soon when thermostatic control of electronics cooling fans is used
static_assert(FanCheckInterval < MinimumWarningInterval, "FanCheckInterval too large");
diff --git a/src/Display/MenuItem.cpp b/src/Display/MenuItem.cpp
index 43552fd1..3e6c55cd 100644
--- a/src/Display/MenuItem.cpp
+++ b/src/Display/MenuItem.cpp
@@ -326,7 +326,7 @@ bool ValueMenuItem::Adjust_SelectHelper()
switch (itemNumber)
{
case 0:
- reprap.GetGCodes().SetSpeedFactor(currentValue * 0.01);
+ reprap.GetGCodes().SetSpeedFactor(currentValue);
break;
case 20:
diff --git a/src/Duet3/Pins_Duet3.h b/src/Duet3/Pins_Duet3.h
index 12337323..ad7d2d6a 100644
--- a/src/Duet3/Pins_Duet3.h
+++ b/src/Duet3/Pins_Duet3.h
@@ -42,8 +42,6 @@ constexpr size_t MaxTotalDrivers = NumDirectDrivers + MaxCanDrivers;
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
-// 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,g,h,i }
constexpr size_t MaxExtruders = MaxTotalDrivers - MinAxes; // The maximum number of extruders
constexpr size_t MaxDriversPerAxis = 5; // The maximum number of stepper drivers assigned to one axis
diff --git a/src/DuetM/Pins_DuetM.h b/src/DuetM/Pins_DuetM.h
index 87ee327c..70e320d5 100644
--- a/src/DuetM/Pins_DuetM.h
+++ b/src/DuetM/Pins_DuetM.h
@@ -49,8 +49,6 @@ 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
-// 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 = NumDirectDrivers - MinAxes; // The maximum number of extruders
constexpr size_t MaxDriversPerAxis = 4; // The maximum number of stepper drivers assigned to one axis
diff --git a/src/DuetNG/Pins_DuetNG.h b/src/DuetNG/Pins_DuetNG.h
index d3381b9d..01974cd3 100644
--- a/src/DuetNG/Pins_DuetNG.h
+++ b/src/DuetNG/Pins_DuetNG.h
@@ -46,8 +46,6 @@ 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
-// 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,g,h,i }
constexpr size_t MaxExtruders = NumDirectDrivers - MinAxes; // The maximum number of extruders
constexpr size_t MaxDriversPerAxis = 5; // The maximum number of stepper drivers assigned to one axis
diff --git a/src/GCodes/GCodeBuffer.cpp b/src/GCodes/GCodeBuffer.cpp
index cf9443ed..1c300d53 100644
--- a/src/GCodes/GCodeBuffer.cpp
+++ b/src/GCodes/GCodeBuffer.cpp
@@ -1298,7 +1298,7 @@ TypeCode GCodeBuffer::EvaluateExpression(const char *p, const char **endptr, Exp
if (isalpha(*p)) // if it's a variable name
{
const char * const start = p;
- while (isalpha(*p) || isdigit(*p) || *p == '_')
+ while (isalpha(*p) || isdigit(*p) || *p == '_' || *p == '.')
{
++p;
}
diff --git a/src/GCodes/GCodes.cpp b/src/GCodes/GCodes.cpp
index 18955f15..83462029 100644
--- a/src/GCodes/GCodes.cpp
+++ b/src/GCodes/GCodes.cpp
@@ -77,6 +77,16 @@ DEFINE_GET_OBJECT_MODEL_TABLE(GCodes)
#endif
+#ifdef SERIAL_AUX_DEVICE
+// Support for emergency stpo form PanelDue
+bool GCodes::emergencyStopCommanded = false;
+
+void GCodes::CommandEmergencyStop(UARTClass *p)
+{
+ emergencyStopCommanded = true;
+}
+#endif
+
GCodes::GCodes(Platform& p) :
platform(p), machineType(MachineType::fff), active(false),
#if HAS_VOLTAGE_MONITOR
@@ -176,6 +186,9 @@ void GCodes::Init()
DotStarLed::Init();
#endif
+#ifdef SERIAL_AUX_DEVICE
+ SERIAL_AUX_DEVICE.SetInterruptCallback(GCodes::CommandEmergencyStop);
+#endif
}
// This is called from Init and when doing an emergency stop
@@ -199,7 +212,7 @@ void GCodes::Reset()
nextGcodeSource = 0;
fileToPrint.Close();
- speedFactor = SecondsToMinutes; // default is just to convert from mm/minute to mm/second
+ speedFactor = 100.0;
for (size_t i = 0; i < MaxExtruders; ++i)
{
@@ -362,6 +375,16 @@ void GCodes::Spin()
return;
}
+#ifdef SERIAL_AUX_DEVICE
+ if (emergencyStopCommanded)
+ {
+ DoEmergencyStop();
+ while (SERIAL_AUX_DEVICE.read() >= 0) { }
+ emergencyStopCommanded = false;
+ return;
+ }
+#endif
+
CheckTriggers();
CheckHeaterFault();
CheckFilament();
@@ -1197,12 +1220,9 @@ void GCodes::RunStateMachine(GCodeBuffer& gb, const StringRef& reply)
else
{
// Successful probing
- float heightAdjust = 0.0;
- bool dummy;
- gb.TryGetFValue('H', heightAdjust, dummy);
float m[MaxAxes];
reprap.GetMove().GetCurrentMachinePosition(m, false); // get height without bed compensation
- g30zStoppedHeight = m[Z_AXIS] - heightAdjust; // save for later
+ g30zStoppedHeight = m[Z_AXIS] - g30HValue; // save for later
g30zHeightError = g30zStoppedHeight - platform.ZProbeStopHeight();
g30zHeightErrorSum += g30zHeightError;
}
@@ -2244,7 +2264,7 @@ bool GCodes::LoadExtrusionAndFeedrateFromGCode(GCodeBuffer& gb)
{
const float rate = gb.GetFValue() * distanceScale;
gb.MachineState().feedRate = (moveBuffer.moveType == 0)
- ? rate * speedFactor
+ ? rate * speedFactor * (0.01 * SecondsToMinutes)
: rate * SecondsToMinutes; // don't apply the speed factor to homing and other special moves
}
moveBuffer.feedRate = gb.MachineState().feedRate;
@@ -3073,6 +3093,7 @@ GCodeResult GCodes::DoHome(GCodeBuffer& gb, const StringRef& reply)
GCodeResult GCodes::ExecuteG30(GCodeBuffer& gb, const StringRef& reply)
{
g30SValue = (gb.Seen('S')) ? gb.GetIValue() : -3; // S-3 is equivalent to having no S parameter
+ g30HValue = (gb.Seen('H')) ? gb.GetFValue() : 0.0;
g30ProbePointIndex = -1;
bool seenP = false;
gb.TryGetIValue('P', g30ProbePointIndex, seenP);
@@ -3718,13 +3739,6 @@ void GCodes::HandleReply(GCodeBuffer& gb, GCodeResult rslt, const char* reply)
return;
}
- // Second UART device, e.g. PanelDue. Do NOT use emulation for this one!
- if (&gb == auxGCode)
- {
- platform.AppendAuxReply(reply, reply[0] == '{');
- return;
- }
-
const Compatibility c = (&gb == serialGCode || &gb == telnetGCode) ? platform.Emulating() : Compatibility::me;
const MessageType type = gb.GetResponseMessageType();
const char* const response = (gb.GetCommandLetter() == 'M' && gb.GetCommandNumber() == 998) ? "rs " : "ok";
@@ -5050,13 +5064,7 @@ void GCodes::CheckHeaterFault()
// Return the current speed factor
float GCodes::GetSpeedFactor() const
{
- return speedFactor * MinutesToSeconds;
-}
-
-// Set the speed factor
-void GCodes::SetSpeedFactor(float factor)
-{
- speedFactor = constrain<float>(factor, 0.1, 5.0) / MinutesToSeconds;
+ return speedFactor;
}
// Return a current extrusion factor
@@ -5081,6 +5089,12 @@ Pwm_t GCodes::ConvertLaserPwm(float reqVal) const
#if SUPPORT_12864_LCD
+// Set the speed factor. Value passed is in percent.
+void GCodes::SetSpeedFactor(float factor)
+{
+ speedFactor = constrain<float>(factor, 10.0, 500.0);
+}
+
// Process a GCode command from the 12864 LCD returning true if the command was accepted
bool GCodes::ProcessCommandFromLcd(const char *cmd)
{
diff --git a/src/GCodes/GCodes.h b/src/GCodes/GCodes.h
index b8618b5f..0762ef42 100644
--- a/src/GCodes/GCodes.h
+++ b/src/GCodes/GCodes.h
@@ -162,7 +162,9 @@ public:
{ axesHomed = 0; }
float GetSpeedFactor() const; // Return the current speed factor
+#if SUPPORT_12864_LCD
void SetSpeedFactor(float factor); // Set the speed factor
+#endif
float GetExtrusionFactor(size_t extruder); // Return the current extrusion factors
void SetExtrusionFactor(size_t extruder, float factor); // Set an extrusion factor
@@ -220,9 +222,9 @@ public:
float GetItemStandbyTemperature(unsigned int itemNumber) const;
void SetItemActiveTemperature(unsigned int itemNumber, float temp);
void SetItemStandbyTemperature(unsigned int itemNumber, float temp);
- float GetMappedFanSpeed() const { return lastDefaultFanSpeed; } // Get the mapped fan speed
#endif
+ float GetMappedFanSpeed() const { return lastDefaultFanSpeed; } // Get the mapped fan speed
void SetMappedFanSpeed(float f); // Set the mapped fan speed
void HandleReply(GCodeBuffer& gb, GCodeResult rslt, const char *reply); // Handle G-Code replies
void EmergencyStop(); // Cancel everything
@@ -386,6 +388,11 @@ private:
#endif
Pwm_t ConvertLaserPwm(float reqVal) const;
+#ifdef SERIAL_AUX_DEVICE
+ static bool emergencyStopCommanded;
+ static void CommandEmergencyStop(UARTClass *p);
+#endif
+
Platform& platform; // The RepRap machine
FileGCodeInput* fileInput; // ...
@@ -502,6 +509,7 @@ private:
GridDefinition defaultGrid; // The grid defined by the M557 command in config.g
int32_t g30ProbePointIndex; // the index of the point we are probing (G30 P parameter), or -1 if none
int g30SValue; // S parameter in the G30 command, or -2 if there wasn't one
+ float g30HValue; // H parameter in the G30 command, or 0.0 if there wasn't on
float g30zStoppedHeight; // the height to report after running G30 S-1
float g30zHeightError; // the height error last time we probed
float g30PrevHeightError; // the height error the previous time we probed
diff --git a/src/GCodes/GCodes2.cpp b/src/GCodes/GCodes2.cpp
index 576a03b1..2d73d7e3 100644
--- a/src/GCodes/GCodes2.cpp
+++ b/src/GCodes/GCodes2.cpp
@@ -2007,8 +2007,8 @@ bool GCodes::HandleMcode(GCodeBuffer& gb, const StringRef& reply)
case 220: // Set/report speed factor override percentage
if (gb.Seen('S'))
{
- float newSpeedFactor = (gb.GetFValue() * 0.01) * SecondsToMinutes; // include the conversion from mm/minute to mm/second
- if (newSpeedFactor > 0.0)
+ float newSpeedFactor = gb.GetFValue();
+ if (newSpeedFactor > 10.0)
{
// Update the feed rate for ALL input sources, and all feed rates on the stack
const float speedFactorRatio = newSpeedFactor / speedFactor;
@@ -2039,7 +2039,7 @@ bool GCodes::HandleMcode(GCodeBuffer& gb, const StringRef& reply)
}
else
{
- reply.printf("Speed factor override: %.1f%%", (double)(speedFactor * MinutesToSeconds * 100.0));
+ reply.printf("Speed factor override: %.1f%%", (double)speedFactor);
}
break;
@@ -2158,6 +2158,14 @@ bool GCodes::HandleMcode(GCodeBuffer& gb, const StringRef& reply)
// The following causes all the remaining baby stepping that we didn't manage to push to be added to the [remainder of the] currently-executing move, if there is one.
// This could result in an abrupt Z movement, however the move will be processed as normal so the jerk limit will be honoured.
moveBuffer.coords[Z_AXIS] += difference;
+
+ if (amountPushed != difference && segmentsLeft == 0 && reprap.GetMove().AllMovesAreFinished())
+ {
+ // The pipeline is empty, so execute the babystepping move immediately
+ moveBuffer.SetDefaults();
+ moveBuffer.feedRate = platform.MaxFeedrate(Z_AXIS);
+ NewMoveAvailable(1);
+ }
}
else
{
diff --git a/src/Networking/ESP8266WiFi/WiFiInterface.cpp b/src/Networking/ESP8266WiFi/WiFiInterface.cpp
index 3b3c64d6..bd71e507 100644
--- a/src/Networking/ESP8266WiFi/WiFiInterface.cpp
+++ b/src/Networking/ESP8266WiFi/WiFiInterface.cpp
@@ -167,6 +167,7 @@ WiFiInterface::WiFiInterface(Platform& p) : platform(p), uploader(nullptr), ftpD
const ObjectModelTableEntry WiFiInterface::objectModelTable[] =
{
+ { "name", OBJECT_MODEL_FUNC_NOSELF("wifi"), TYPE_OF(const char *), ObjectModelTableEntry::none },
{ "ip", OBJECT_MODEL_FUNC(&(self->ipAddress)), TYPE_OF(IPAddress), ObjectModelTableEntry::none },
{ "netmask", OBJECT_MODEL_FUNC(&(self->netmask)), TYPE_OF(IPAddress), ObjectModelTableEntry::none },
{ "gateway", OBJECT_MODEL_FUNC(&(self->gateway)), TYPE_OF(IPAddress), ObjectModelTableEntry::none }
diff --git a/src/Networking/LwipEthernet/LwipEthernetInterface.cpp b/src/Networking/LwipEthernet/LwipEthernetInterface.cpp
index 368013b7..dc8dd614 100644
--- a/src/Networking/LwipEthernet/LwipEthernetInterface.cpp
+++ b/src/Networking/LwipEthernet/LwipEthernetInterface.cpp
@@ -149,6 +149,7 @@ LwipEthernetInterface::LwipEthernetInterface(Platform& p) : platform(p), closeDa
const ObjectModelTableEntry LwipEthernetInterface::objectModelTable[] =
{
+ { "name", OBJECT_MODEL_FUNC_NOSELF("ethernet"), TYPE_OF(const char *), ObjectModelTableEntry::none },
{ "ip", OBJECT_MODEL_FUNC(&(self->ipAddress)), TYPE_OF(IPAddress), ObjectModelTableEntry::none },
{ "netmask", OBJECT_MODEL_FUNC(&(self->netmask)), TYPE_OF(IPAddress), ObjectModelTableEntry::none },
{ "gateway", OBJECT_MODEL_FUNC(&(self->gateway)), TYPE_OF(IPAddress), ObjectModelTableEntry::none }
diff --git a/src/Networking/Network.cpp b/src/Networking/Network.cpp
index 6a69728c..179d3a57 100644
--- a/src/Networking/Network.cpp
+++ b/src/Networking/Network.cpp
@@ -70,7 +70,7 @@ static const ObjectModelArrayDescriptor interfaceArrayDescriptor =
const ObjectModelTableEntry Network::objectModelTable[] =
{
- { "interface", OBJECT_MODEL_FUNC_NOSELF(&interfaceArrayDescriptor), TYPE_OF(ObjectModel) | IsArray, ObjectModelTableEntry::none }
+ { "interfaces", OBJECT_MODEL_FUNC_NOSELF(&interfaceArrayDescriptor), TYPE_OF(ObjectModel) | IsArray, ObjectModelTableEntry::none }
};
DEFINE_GET_OBJECT_MODEL_TABLE(Network)
diff --git a/src/Networking/W5500Ethernet/W5500Interface.cpp b/src/Networking/W5500Ethernet/W5500Interface.cpp
index fb8ba382..18f008d0 100644
--- a/src/Networking/W5500Ethernet/W5500Interface.cpp
+++ b/src/Networking/W5500Ethernet/W5500Interface.cpp
@@ -44,6 +44,7 @@ W5500Interface::W5500Interface(Platform& p)
const ObjectModelTableEntry W5500Interface::objectModelTable[] =
{
+ { "name", OBJECT_MODEL_FUNC_NOSELF("ethernet"), TYPE_OF(const char *), ObjectModelTableEntry::none },
{ "ip", OBJECT_MODEL_FUNC(&(self->ipAddress)), TYPE_OF(IPAddress), ObjectModelTableEntry::none },
{ "netmask", OBJECT_MODEL_FUNC(&(self->netmask)), TYPE_OF(IPAddress), ObjectModelTableEntry::none },
{ "gateway", OBJECT_MODEL_FUNC(&(self->gateway)), TYPE_OF(IPAddress), ObjectModelTableEntry::none }
diff --git a/src/ObjectModel/ObjectModel.cpp b/src/ObjectModel/ObjectModel.cpp
index fdbd79c9..581c16c8 100644
--- a/src/ObjectModel/ObjectModel.cpp
+++ b/src/ObjectModel/ObjectModel.cpp
@@ -32,7 +32,7 @@ bool ObjectModel::ReportAsJson(OutputBuffer* buf, const char* filter, ReportFlag
{
buf->cat(',');
}
- omte->ReportAsJson(buf, this, filter, flags);
+ omte->ReportAsJson(buf, this, GetNextElement(filter), flags);
added = true;
}
--numEntries;
@@ -68,99 +68,6 @@ const ObjectModelTableEntry* ObjectModel::FindObjectModelTableEntry(const char*
return (low < numElems && tbl[low].IdCompare(idString) == 0) ? &tbl[low] : nullptr;
}
-// Get the object model table entry for the leaf object in the query
-const ObjectModelTableEntry *ObjectModel::FindObjectModelLeafEntry(const char *idString)
-{
- const ObjectModelTableEntry *e = FindObjectModelTableEntry(idString);
- return (e == nullptr) ? e : e->FindLeafEntry(this, idString);
-}
-
-#if 0 // not implemented yet
-bool ObjectModel::GetStringObjectValue(const StringRef& str, const char* idString) const
-{
-}
-
-bool ObjectModel::GetLongEnumObjectValue(const StringRef& str, const char* idString) const
-{
-}
-
-bool ObjectModel::GetShortEnumObjectValue(uint32_t& val, const char* idString) const
-{
-}
-
-bool ObjectModel::GetBitmapObjectValue(uint32_t& val, const char* idString) const
-{
-}
-#endif
-
-#if 0
-bool ObjectModel::SetFloatObjectValue(float val, const char* idString)
-{
-}
-
-bool ObjectModel::SetUnsignedObjectValue(uint32_t val, const char* idString)
-{
-}
-
-bool ObjectModel::SetSignedObjectValue(int32_t val, const char* idString)
-{
-}
-
-bool ObjectModel::SetStringObjectValue(const StringRef& str, const char* idString)
-{
-}
-
-bool ObjectModel::SetLongEnumObjectValue(const StringRef& str, const char* idString)
-{
-}
-
-bool ObjectModel::SetShortEnumObjectValue(uint32_t val, const char* idString)
-{
-}
-
-bool ObjectModel::SetBitmapObjectValue(uint32_t val, const char* idString)
-{
-}
-
-bool ObjectModel::SetBoolObjectValue(bool val, const char* idString)
-{
-}
-
-bool ObjectModel::AdjustFloatObjectValue(float val, const char* idString)
-{
-}
-
-bool ObjectModel::AdjustUnsignedObjectValue(int32_t val, const char* idString)
-{
-}
-
-bool ObjectModel::AdjustSignedObjectValue(int32_t val, const char* idString)
-{
-}
-
-bool ObjectModel::ToggleBoolObjectValue(const char* idString)
-{
-}
-#endif
-
-const char** ObjectModel::GetStringObjectPointer(const char* idString)
-{
- //TODO
- return nullptr;
-}
-
-uint32_t* ObjectModel::GetShortEnumObjectPointer(const char* idString)
-{
- const ObjectModelTableEntry *e = FindObjectModelLeafEntry(idString);
- return (e == nullptr) ? nullptr : (uint32_t*)(e->GetValuePointer(this, TYPE_OF(Enum32)));
-}
-
-uint32_t* ObjectModel::GetBitmapObjectPointer(const char* idString)
-{
- const ObjectModelTableEntry *e = FindObjectModelLeafEntry(idString);
- return (e == nullptr) ? nullptr : (uint32_t*)(e->GetValuePointer(this, TYPE_OF(Bitmap32)));
-}
-
/*static*/ const char* ObjectModel::GetNextElement(const char *id)
{
while (*id != 0 && *id != '.' && *id != '[')
@@ -179,16 +86,6 @@ bool ObjectModelTableEntry::Matches(const char* filterString, ObjectModelFilterF
return IdCompare(filterString) == 0 && (flags & filterFlags) == filterFlags;
}
-const ObjectModelTableEntry *ObjectModelTableEntry::FindLeafEntry(ObjectModel *self, const char *idString) const
-{
- if (!IsObject())
- {
- return this;
- }
-
- return ((ObjectModel*)param(self))->FindObjectModelLeafEntry(ObjectModel::GetNextElement(idString));
-}
-
// Private function to report a value of primitive type
void ObjectModelTableEntry::ReportItemAsJson(OutputBuffer *buf, const char *filter, ObjectModel::ReportFlags flags, void *nParam, TypeCode type)
{
@@ -210,6 +107,10 @@ void ObjectModelTableEntry::ReportItemAsJson(OutputBuffer *buf, const char *filt
buf->catf("%" PRIi32, *(const int32_t *)nParam);
break;
+ case TYPE_OF(const char*):
+ buf->EncodeString((const char*)nParam, strlen((const char*)nParam), true, true, false);
+ break;
+
case TYPE_OF(Bitmap32):
if (flags & ObjectModel::flagShortForm)
{
@@ -321,23 +222,26 @@ void* ObjectModelTableEntry::GetValuePointer(ObjectModel *self, TypeCode t) cons
return param(self);
}
-// Return the type of an object
-TypeCode ObjectModel::GetObjectType(const char *idString)
-{
- const ObjectModelTableEntry * const e = FindObjectModelLeafEntry(idString);
- return (e == nullptr) ? NoType : e->type;
-}
-
// Get the value of an object when we don't know what its type is
TypeCode ObjectModel::GetObjectValue(ExpressionValue& val, const char *idString)
{
- const ObjectModelTableEntry * const e = FindObjectModelLeafEntry(idString);
+ const ObjectModelTableEntry *e = FindObjectModelTableEntry(idString);
if (e == nullptr)
{
return NoType;
}
+
+ if ((e->type & IsArray) != 0)
+ {
+ //TODO handle arrays
+ return NoType;
+ }
+
switch (e->type)
{
+ case TYPE_OF(ObjectModel):
+ return ((ObjectModel*)e->param(this))->GetObjectValue(val, GetNextElement(idString));
+
case TYPE_OF(float):
val.fVal = *((const float*)e->param(this));
break;
@@ -363,16 +267,25 @@ TypeCode ObjectModel::GetObjectValue(ExpressionValue& val, const char *idString)
}
// Template specialisations
-template<> bool ObjectModel::GetObjectValue(float& val, const char *idString)
+bool ObjectModel::GetObjectValue(float& val, const char *idString)
{
- const ObjectModelTableEntry * const e = FindObjectModelLeafEntry(idString);
+ const ObjectModelTableEntry *e = FindObjectModelTableEntry(idString);
if (e == nullptr)
{
- return false;
+ return NoType;
+ }
+
+ if ((e->type & IsArray) != 0)
+ {
+ //TODO handle arrays
+ return NoType;
}
switch (e->type)
{
+ case TYPE_OF(ObjectModel):
+ return ((ObjectModel*)e->param(this))->GetObjectValue(val, GetNextElement(idString));
+
case TYPE_OF(float):
val = *((const float*)e->param(this));
return true;
@@ -391,16 +304,25 @@ template<> bool ObjectModel::GetObjectValue(float& val, const char *idString)
}
// Specialisation of above for int, allowing conversion from unsigned to signed
-template<> bool ObjectModel::GetObjectValue(int32_t& val, const char *idString)
+bool ObjectModel::GetObjectValue(int32_t& val, const char *idString)
{
- const ObjectModelTableEntry * const e = FindObjectModelLeafEntry(idString);
+ const ObjectModelTableEntry *e = FindObjectModelTableEntry(idString);
if (e == nullptr)
{
- return false;
+ return NoType;
+ }
+
+ if ((e->type & IsArray) != 0)
+ {
+ //TODO handle arrays
+ return NoType;
}
switch (e->type)
{
+ case TYPE_OF(ObjectModel):
+ return ((ObjectModel*)e->param(this))->GetObjectValue(val, GetNextElement(idString));
+
case TYPE_OF(int32_t):
val = *((const int32_t*)e->param(this));
return true;
diff --git a/src/ObjectModel/ObjectModel.h b/src/ObjectModel/ObjectModel.h
index d76f9ce5..e0e69f4c 100644
--- a/src/ObjectModel/ObjectModel.h
+++ b/src/ObjectModel/ObjectModel.h
@@ -55,35 +55,15 @@ public:
// Get the value of an object when we don't know what its type is
TypeCode GetObjectValue(ExpressionValue& val, const char *idString);
- // Get values of various types from the object model, returning true if successful
- template<class T> bool GetObjectValue(T& val, const char *idString);
-
- bool GetStringObjectValue(const StringRef& str, const char* idString) const;
- bool GetLongEnumObjectValue(const StringRef& str, const char *idString) const;
- bool GetShortEnumObjectValue(uint32_t &val, const char *idString) const;
- bool GetBitmapObjectValue(uint32_t &val, const char *idString) const;
-
- // Try to set values of various types from the object model, returning true if successful
- bool SetFloatObjectValue(float val, const char *idString);
- bool SetUnsignedObjectValue(uint32_t val, const char *idString);
- bool SetSignedObjectValue(int32_t val, const char *idString);
- bool SetStringObjectValue(const StringRef& str, const char *idString);
- bool SetLongEnumObjectValue(const StringRef& str, const char *idString);
- bool SetShortEnumObjectValue(uint32_t val, const char *idString);
- bool SetBitmapObjectValue(uint32_t val, const char *idString);
- bool SetBoolObjectValue(bool val, const char *idString);
-
- // Try to adjust values of various types from the object model, returning true if successful
- bool AdjustFloatObjectValue(float val, const char *idString);
- bool AdjustUnsignedObjectValue(int32_t val, const char *idString);
- bool AdjustSignedObjectValue(int32_t val, const char *idString);
- bool ToggleBoolObjectValue(const char *idString);
+ // Specialisation of above for float, allowing conversion from integer to float
+ bool GetObjectValue(float& val, const char *idString);
+
+ // Specialisation of above for int, allowing conversion from unsigned to signed
+ bool GetObjectValue(int32_t& val, const char *idString);
// Get the object model table entry for the current level object in the query
const ObjectModelTableEntry *FindObjectModelTableEntry(const char *idString);
- // Get the object model table entry for the leaf object in the query
- const ObjectModelTableEntry *FindObjectModelLeafEntry(const char *idString);
// Skip the current element in the ID or filter string
static const char* GetNextElement(const char *id);
@@ -174,36 +154,6 @@ public:
static void ReportItemAsJson(OutputBuffer *buf, const char *filter, ObjectModel::ReportFlags flags, void *nParam, TypeCode type);
};
-// Function to retrieve a value by searching the object model
-// Returns true if success
-template<class T> bool ObjectModel::GetObjectValue(T& val, const char *idString)
-{
- const ObjectModelTableEntry * const e = FindObjectModelLeafEntry(idString);
- if (e == nullptr)
- {
- return false;
- }
- const T *p = (float*)(e->GetValuePointer(this, TYPE_OF(T)));
- if (p == nullptr)
- {
- return false;
- }
- val = *p;
- return true;
-}
-
-// Specialisation of above for float, allowing conversion from integer to float
-template<> bool ObjectModel::GetObjectValue(float& val, const char *idString);
-
-// Specialisation of above for int, allowing conversion from unsigned to signed
-template<> bool ObjectModel::GetObjectValue(int32_t& val, const char *idString);
-
-template<class T> T* ObjectModel::GetObjectPointer(const char* idString)
-{
- const ObjectModelTableEntry *e = FindObjectModelLeafEntry(idString);
- return (e == nullptr) ? nullptr : (T*)(e->GetValuePointer(this, TYPE_OF(T)));
-}
-
// Use this macro to inherit form ObjectModel
#define INHERIT_OBJECT_MODEL : public ObjectModel
diff --git a/src/OutputMemory.cpp b/src/OutputMemory.cpp
index 22200a1f..1b7ed82a 100644
--- a/src/OutputMemory.cpp
+++ b/src/OutputMemory.cpp
@@ -264,8 +264,8 @@ size_t OutputBuffer::EncodeString(const char *src, size_t srcLength, bool allowC
case '"':
case '\\':
#if 1
- // In theory we should escape '/' as well. However, we never used to, and doing so confuses PanelDue.
- // This will be fixed in PanelDue firmware version 1.15, but in the mean time, don't escape '/'.
+ // Escaping '/' is optional in JSON, although doing so so confuses PanelDue (fixed in PanelDue firmware version 1.15 and later).
+ // As it's optional, we don't do it.
#else
case '/':
#endif
diff --git a/src/Pccb/Pins_Pccb.h b/src/Pccb/Pins_Pccb.h
index c0b40b83..0f40b4e4 100644
--- a/src/Pccb/Pins_Pccb.h
+++ b/src/Pccb/Pins_Pccb.h
@@ -71,8 +71,6 @@ 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 = NumDirectDrivers - MinAxes; // The maximum number of extruders
constexpr size_t MaxDriversPerAxis = 4; // The maximum number of stepper drivers assigned to one axis
diff --git a/src/Platform.cpp b/src/Platform.cpp
index 1b661208..4bbb2274 100644
--- a/src/Platform.cpp
+++ b/src/Platform.cpp
@@ -505,6 +505,10 @@ void Platform::Init()
autoSaveState = AutoSaveState::starting;
#endif
+#if HAS_SMART_DRIVERS && HAS_VOLTAGE_MONITOR
+ warnDriversNotPowered = false;
+#endif
+
extrusionAncilliaryPwmValue = 0.0;
configuredHeaters = 0;
@@ -1327,6 +1331,7 @@ void Platform::Spin()
}
#ifdef DUET3
+ // Blink the LED
{
static uint32_t lastTime = 0;
static bool diagState = true;
@@ -1611,7 +1616,7 @@ void Platform::Spin()
// Check for a VSSA fault
#if HAS_VREF_MONITOR
- constexpr uint32_t MaxVssaFilterSum = (15 * 4096 * ThermistorAverageReadings * 4)/2200;
+ constexpr uint32_t MaxVssaFilterSum = (15 * 4096 * ThermistorAverageReadings * 4)/2200; // VSSA fuse should have <= 15 ohms resistance
if (adcFilters[VssaFilterIndex].GetSum() > MaxVssaFilterSum)
{
Message(ErrorMessage, "VSSA fault, check thermistor wiring\n");
@@ -1626,6 +1631,16 @@ void Platform::Spin()
reported = true;
}
#endif
+
+#if HAS_SMART_DRIVERS && HAS_VOLTAGE_MONITOR
+ // Check for attempts to move motors when not powered
+ if (warnDriversNotPowered)
+ {
+ Message(ErrorMessage, "Attempt to move motors when VIN is not in range");
+ warnDriversNotPowered = false;
+ reported = true;
+ }
+#endif
if (reported)
{
lastWarningMillis = now;
@@ -2869,26 +2884,37 @@ void Platform::SetDirection(size_t drive, bool direction)
// Enable a driver. Must not be called from an ISR, or with interrupts disabled.
void Platform::EnableDriver(size_t driver)
{
- if (driver < NumDirectDrivers && driverState[driver] != DriverStatus::enabled)
+#if HAS_SMART_DRIVERS && HAS_VOLTAGE_MONITOR
+ if (driver < numSmartDrivers && !driversPowered)
{
- driverState[driver] = DriverStatus::enabled;
- UpdateMotorCurrent(driver); // the current may have been reduced by the idle timeout
+ warnDriversNotPowered = true;
+ }
+ else
+ {
+#endif
+ if (driver < NumDirectDrivers && driverState[driver] != DriverStatus::enabled)
+ {
+ driverState[driver] = DriverStatus::enabled;
+ UpdateMotorCurrent(driver); // the current may have been reduced by the idle timeout
#if defined(DUET3) && HAS_SMART_DRIVERS
- SmartDrivers::EnableDrive(driver, true); // all drivers driven directly by the main board are smart
+ SmartDrivers::EnableDrive(driver, true); // all drivers driven directly by the main board are smart
#elif HAS_SMART_DRIVERS
- if (driver < numSmartDrivers)
- {
- SmartDrivers::EnableDrive(driver, true);
- }
- else
- {
- digitalWrite(ENABLE_PINS[driver], enableValues[driver] > 0);
- }
+ if (driver < numSmartDrivers)
+ {
+ SmartDrivers::EnableDrive(driver, true);
+ }
+ else
+ {
+ digitalWrite(ENABLE_PINS[driver], enableValues[driver] > 0);
+ }
#else
- digitalWrite(ENABLE_PINS[driver], enableValues[driver] > 0);
+ digitalWrite(ENABLE_PINS[driver], enableValues[driver] > 0);
#endif
+ }
+#if HAS_SMART_DRIVERS && HAS_VOLTAGE_MONITOR
}
+#endif
}
// Disable a driver
diff --git a/src/Platform.h b/src/Platform.h
index 0f899cee..e95194f9 100644
--- a/src/Platform.h
+++ b/src/Platform.h
@@ -739,6 +739,10 @@ private:
bool driversPowered;
#endif
+#if HAS_SMART_DRIVERS && HAS_VOLTAGE_MONITOR
+ bool warnDriversNotPowered;
+#endif
+
#if HAS_STALL_DETECT
DriversBitmap logOnStallDrivers, pauseOnStallDrivers, rehomeOnStallDrivers;
DriversBitmap stalledDrivers, stalledDriversToLog, stalledDriversToPause, stalledDriversToRehome;
diff --git a/src/RADDS/Network.h b/src/RADDS/Network.h
index 88c9771a..72b93de3 100644
--- a/src/RADDS/Network.h
+++ b/src/RADDS/Network.h
@@ -4,12 +4,15 @@
#include "RepRapFirmware.h"
#include "MessageType.h"
#include "GCodes/GCodeResult.h"
+#include "General/IPAddress.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 IPAddress DefaultIpAddress;
+const IPAddress DefaultNetMask;
+const IPAddress DefaultGateway;
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.
@@ -31,7 +34,7 @@ public:
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 SetEthernetIPAddress(IPAddress p_ipAddress, IPAddress p_netmask, IPAddress p_gateway) { }
void SetMacAddress(unsigned int interface, const uint8_t mac[]) { }
const uint8_t *GetMacAddress(unsigned int interface) const { return macAddress; }
diff --git a/src/RADDS/Pins_RADDS.h b/src/RADDS/Pins_RADDS.h
index 40a51827..ad226fc3 100644
--- a/src/RADDS/Pins_RADDS.h
+++ b/src/RADDS/Pins_RADDS.h
@@ -29,11 +29,8 @@ const size_t NumFirmwareUpdateModules = 1;
// The physical capabilities of the machine
// The number of drives in the machine, including X, Y, and Z plus extruder drives
-const size_t DRIVES = 9;
-
-// Initialization macro used in statements needing to initialize values in arrays of size DRIVES. E.g.,
-// max_feed_rates[DRIVES] = {DRIVES_(1, 1, 1, 1, 1, 1, 1, 1, 1, 1)}
-#define DRIVES_(a,b,c,d,e,f,g,h,i,j,k,l) { a,b,c,d,e,f,g,h,i }
+const size_t NumDirectDrivers = 9;
+constexpr size_t MaxTotalDrivers = NumDirectDrivers;
// The number of heaters in the machine
// 0 is the heated bed even if there isn't one.
@@ -44,11 +41,8 @@ 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
-// 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 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 MaxExtruders = NumDirectDrivers - 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 = 2;
@@ -58,11 +52,11 @@ constexpr size_t NUM_SERIAL_CHANNELS = 2;
// 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
-// X Y Z E1 E2 E3 E4 E5 E6
-const Pin ENABLE_PINS[DRIVES] = { 26, 22, 15, 62, 65, 49, 37, 31, 68 };
-// A15 A12 A09 A02 B19 C12 C03 D06 B16
-const Pin STEP_PINS[DRIVES] = { 24, 17, 2, 61, 64, 51, 35, 29, 67 };
-const Pin DIRECTION_PINS[DRIVES] = { 23, 16, 3, 60, 63, 53, 33, 27, 66 };
+// X Y Z E1 E2 E3 E4 E5 E6
+const Pin ENABLE_PINS[NumDirectDrivers] = { 26, 22, 15, 62, 65, 49, 37, 31, 68 };
+// A15 A12 A09 A02 B19 C12 C03 D06 B16
+const Pin STEP_PINS[NumDirectDrivers] = { 24, 17, 2, 61, 64, 51, 35, 29, 67 };
+const Pin DIRECTION_PINS[NumDirectDrivers] = { 23, 16, 3, 60, 63, 53, 33, 27, 66 };
// Endstops
// E Stops not currently used
@@ -111,8 +105,7 @@ const Pin SpiTempSensorCsPins[MaxSpiTempSensors] = { 38, 36 };
const Pin ATX_POWER_PIN = 40;
// Z Probe pin
-// Must be an ADC capable pin. Can be any of the ARM's A/D capable
-// pins even a non-Arduino pin.
+// Must be an ADC capable pin. Can be any of the ARM's A/D capable pins even a non-Arduino pin.
const Pin Z_PROBE_PIN = A5; // RADDS "ADC" pin
// Digital pin number to turn the IR LED on (high) or off (low)
diff --git a/src/RepRap.cpp b/src/RepRap.cpp
index db52a357..422fc826 100644
--- a/src/RepRap.cpp
+++ b/src/RepRap.cpp
@@ -976,8 +976,8 @@ OutputBuffer *RepRap::GetStatusResponse(uint8_t type, ResponseSource source)
response->cat((ch == '[') ? "[]" : "]");
}
- // Speed and Extrusion factors
- response->catf(",\"speedFactor\":%.1f,\"extrFactors\":", (double)(gCodes->GetSpeedFactor() * 100.0));
+ // Speed and Extrusion factors in %
+ response->catf(",\"speedFactor\":%.1f,\"extrFactors\":", (double)(gCodes->GetSpeedFactor()));
ch = '[';
for (size_t extruder = 0; extruder < GetExtrudersInUse(); extruder++)
{
@@ -1691,7 +1691,7 @@ OutputBuffer *RepRap::GetLegacyStatusResponse(uint8_t type, int seq)
}
// Send the speed and extruder override factors
- response->catf("],\"sfactor\":%.2f,\"efactor\":", (double)(gCodes->GetSpeedFactor() * 100.0));
+ response->catf("],\"sfactor\":%.2f,\"efactor\":", (double)(gCodes->GetSpeedFactor()));
ch = '[';
for (size_t i = 0; i < GetExtrudersInUse(); ++i)
{
@@ -1723,20 +1723,19 @@ OutputBuffer *RepRap::GetLegacyStatusResponse(uint8_t type, int seq)
}
// Send the fan settings, for PanelDue firmware 1.13 and later
- response->catf(",\"fanPercent\":");
- ch = '[';
+ // Currently, PanelDue assumes that the first value is the print cooling fan speed and only uses that one, so send the mapped fan speed first
+ response->catf(",\"fanPercent\":[%.1f", (double)(gCodes->GetMappedFanSpeed() * 100.0));
for (size_t i = 0; i < NUM_FANS; ++i)
{
- response->catf("%c%.1f", ch, (double)(platform->GetFanValue(i) * 100.0));
- ch = ',';
+ response->catf(",%.1f", (double)(platform->GetFanValue(i) * 100.0));
}
+ response->cat(']');
// 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
+ // For compatibility with older versions of DWC and PanelDue, if there is only one tacho value then we send it as a simple variable
if (NumTachos > 1)
{
char ch = '[';
diff --git a/src/SAME70xpld/Pins_SAME70xpld.h b/src/SAME70xpld/Pins_SAME70xpld.h
index fa4dcd2a..883dad4b 100644
--- a/src/SAME70xpld/Pins_SAME70xpld.h
+++ b/src/SAME70xpld/Pins_SAME70xpld.h
@@ -39,8 +39,6 @@ constexpr size_t NumThermistorInputs = 4;
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
-// 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,g,h,i }
constexpr size_t MaxExtruders = NumDirectDrivers - MinAxes; // The maximum number of extruders
constexpr size_t MaxDriversPerAxis = 5; // The maximum number of stepper drivers assigned to one axis
diff --git a/src/Version.h b/src/Version.h
index eb8554c1..7a7f96c5 100644
--- a/src/Version.h
+++ b/src/Version.h
@@ -12,7 +12,7 @@
#ifndef VERSION
#ifdef RTOS
# define RTOSVER "(RTOS)"
-# define MAIN_VERSION "2.02RC3"
+# define MAIN_VERSION "2.02RC4"
#else
# define MAIN_VERSION "1.22"
# define RTOSVER
@@ -22,7 +22,7 @@
#endif
#ifndef DATE
-# define DATE "2018-10-17b2"
+# define DATE "2018-10-28b2"
#endif
#define AUTHORS "reprappro, dc42, chrishamm, t3p3, dnewman, printm3d"