Releases: Duet3D/DuetSoftwareFramework
Releases · Duet3D/DuetSoftwareFramework
Version 3.6.0-beta.1
New features:
- Upgraded base from .NET 6 to .NET 8
- Implemented high-performance JSON (de-)serialization in all areas using (custom) source generators
- .NET applications using DSF 3.6 libraries can be trimmed and/or AOT-compiled
M111
can be used to change DCS logging parameters during runtime (see also M111 docs)- Added MQTT support
API changes:
- Added new IPC command to rewrite codes being intercepted
- Python plugins are now installed installed in their own venv (thanks @stuartofmt)
Version 3.5.3
Compatible versions:
- RepRapFirmware 3.5.3
- DuetWebControl 3.5.3
Upgrade notes:
- If you are using a Raspberry Pi 5 and upgrade using
apt
, it may be necessary to restore the default config. To achieve this, runsudo rm /opt/dsf/conf/config.json
afterapt
via SSH or using a Linux console. Without this step, you will get an error stating that thegpiochip
device could not be opened. The underlying change came from a kernel change from Raspberry Pi, which brings thegpiochip
numbering in line again with previous Raspberry Pi editions
API changes:
- Deprecated several methods due to upcoming changes in v3.6
- Added new preferred overloads for
SetPluginData
andPatchObjectModel
New features:
M905 A
parameter may be used to specify if the date and time shall be set via NTP
Bug fixes:
- Results from cancelled evaluation requests could be output
- Only resumable macros were aborted by DSF when a pause event was processed
- Fixed type of sensors.filamentMonitors[].calibrated
- Invoke internal "increment" codes asynchronously to fix spurious deadlocks
M905
wasn't working any more due to missing permissions- Fixed support for SSIDs with spaces
- Type of
state.thisActive
wasn't nullable - Fixed support for
M226
/M600
precedingM98
- Fixed potential deadlock when deleting variables
- Fixed DWC startup issue in SBC mode caused by Chromium singleton lock
Version 3.5.3-rc.1
Compatible versions:
- RepRapFirmware 3.5.3-rc.1
- DuetWebControl 3.5.3-rc.1
API changes:
- Deprecated patch creation methods in the main object model class
- Deprecated current
PatchObjectModel
andSetPluginData
calls in favour of new overload
Bug fixes:
- Added workaround to address Chromium singleton lock in the launch script
- Fixed potential deadlock when deleting variables
- Cancelled codes could invalidate the last known file position (pausing via M226)
state.thisActive
was not nullable
Version 3.5.2
Compatible versions:
- RepRapFirmware 3.5.2
- DuetWebControl 3.5.2
Changed behaviour:
M409 K"network"
andM409 K"volumes"
are now handled by DSF and DCS increments the corresponding RRF sequence numbers when necessary- DCS service may no longer be moved to swap memory
New features:
- Added proxy support to custom HTTP endpoints
Bug fixes:
M21 Pnnn
could output an error when PanelDue requested an existing mount point to be mounted again- Some emulated
rr_
replies did not use the default DSF JSON serializer settings - Fixed code param conversion error with expressions
- Plugin config files could be deleted on upgrade
M554
was not working as intended
Version 3.5.2-rc.1
Compatible versions:
- RepRapFirmware 3.5.2-rc.1
- DuetWebControl 3.5.2-rc.1
Changed behaviour:
- DCS program memory cannot be moved to swap
New features:
- Added proxy support to custom HTTP endpoints
Bug fixes:
- Plugin config files were incorrectly deleted on upgrade
- Fixed M554 (set gateway/DNS server)
- Fixed code param conversion error with expressions (code.TryGet* methods)
- Some HTTP endpoints were using wrong JSON serializer options
Version 3.5.1
There were no significant changes since v3.5.0, so this changelog includes all changes since v3.4.6:
Changed behaviour:
Compatible versions:
- RepRapFirmware 3.5.1
- DuetWebControl 3.5.1
Upgrade notes:
- You MUST be on RepRapFirmare 3.5-b1 in order to process jobs. It will NOT work with 3.4.x or older!
API changes:
- Introduced new code interceptor option to auto-expand expression parameters for filtered codes (defaults to true)
- Added new sbcConfigFiles field to plugin manifest. These files are not overwritten on upgrade
- Nested plugin data values can be queried in expressions (e.g.
echo plugins.foobar.data.myObj.myProp
) - Added
recursive
parameter to HTTP file/directory delete request - Added recursive delete functionality for RRF delete requests
- Flush IPC command can be optionally used to synchronize both file streams
- Enabled
Nullable
type checks throughout DSF projects - Added support for
null
parameter values (e.g.X
inG28 X
) - Consolidated API exception classes in DuetAPI library
- Changed async code parser to use
Stream
type instead ofStreamReader
- The
scanner
key has been removed from the object model. It is no longer supported
Changed behaviour:
- Macro start/end events are logged as debug instead of info messages if they originate from the daemon input channel
- If a file is supposed to use two file readers, it must be forked via
M606 S1
result
variable is no longer maintained by DSF- If DCS fails to start, there is now a delay of 5 seconds between restart attempts
- Index web file served from the web server is never cached and must be revalidated by the web browser on reload
- If a RRF plugin contains
daemon.g
, it is renamed todaemon.g.bak
on upgrade - Moved
userSessions
root key to newsbc
key M552 S1
unblocks WiFi automatically usingrfkill
- Introduced new "sbc" root key in favour of deprecated state.dsf... properties
- Removed httpEndpoints root key in favour of sbc?.dsf.httpEndpoints
- Open message boxes are automatically closed in the DSF OM when the controller is disconnected
- Removed obsolete
move.workspaceNumber
field - Code parser is much more sensitive to invalid code parameters
- Error messages from macros/job files are more condensed to get closer to messages from RRF
- When a code cannot be read (i.e. code input is interrupted), the file is aborted immediately
New features:
- Object model and M122 report if 64-bit DCS build is used
- Added support for WiFi scanning (M587.1/M587.2)
- Added support for NetworkManager so that network M-codes can be used on Debian Bookworm
M997 S2
can be used to update the system viaapt update
/unattended-upgrades
on the latest DuetPi version (requires Debian Bookworm)M997 S2 V"<version>"
can be used to install another DSF version (includes automatic update to corresponding RRF version) on DuetPiM997 S2 F"unstable"
orM997 S2 F"stable"
can be used to configure the package feed on DuetPi- Prepared Debian Bookworm support in the DWC launch script
- WiFi country may now be reported and updated using DuetPiManagementPlugin
- Added new SBC option for plugins to auto-restart them in case of unexpected crashes
- Added new object model fields introduced by RepRapFirmware
- When files are uploaded, they are uploaded to a ".part" file before they are moved into place
- Added
fileread
and single-char support using apostrophes like in RRF - Added auto flush option to code interceptor API. This is preferred to avoid race conditions under certain circumstances
- Added new pip install script that also checks for built-in modules (thanks stuartofmt)
- Added support for standalone mode HTTP session keys to DuetHttpClient library
- SSID is now reported in network.interfaces[] if applicable
- Added new HTTP endpoint /machine/model as an alternative to /machine/status
- Added support for
M472
(delete file or directory) - Added support for custom array variables and for assigning individual items
echo
can be used to append contents to a file withoutNL
(akaecho >>>"file" "data"
)- Executing codes do not need an individual task any more, instead they are now handled by a new pipeline architecture
- Added support for two file channels, new message box types, and many other improvements made in RRF
- Rewrote much of the meta G-code expression pre-parser and added ability to define custom functions (not yet available via API)
- Added
rr_
compatibility layer to DuetWebServer (HTTP calls in standalone mode)
Bug fixes:
- DCS could not determine if a network adapter uses DHCP or a static IPv4 address
- DPS no longer redirects stdio/stderr to DPS logger unless requested (systemd takes care of that anyway)
- Fixed file handling with boards that only provide a single file channel
move.axes
can be queried sequentially to support up to 30 configured axes- Changed documentation generator to include
<see cref="...">
statements 'g
parameters were not correctly parsed- Added and tested new axis letters to code parser
- Fixed type of
move.segmentation.segmentsPerSec
- If a connection intercepting a code sent a code to another channel, that code was incorrectly assigned the same macro file (if any)
M929
always required a log filename (affected only v3.5)echo
could be executed on inactive channels (e.g. File2)M122
could throw an exception if there were remaining codes in theExecuted
code pipeline handler- Job file processor didn't synchronize OM right after the print started, potentially starting with an invalid
inputs[].active
state - Identical expression requests yielded the same result if requested on two different code channels
- Fixed AppArmor webcam profile to support Spyglass
- Even number values containing dots were interpreted as integers and not as floats
- Fixed handling of non-ASCII characters in G-code parser
- Better enforce maximum length of arguments for meta G-code keywords
- Invalid enum values (in particular filament monitor types) could crash DCS
- Fixed IPC command to evaluate custom expressions
- Obsolete object model fields were not queried
- When custom endpoints attempted to return a status code, DWS incorrectly tried to write a body response as well
- Fixed
M30
support - Fixed default DateTime format in the object model
- WebSocket session key wasn't optional if no password set
- Corrected type of direct display screen instances in the OM definition
- Start-up errors were incorrectly set after booting
- Adjusted AppArmor permissions for webcam access on Debian Bullseye
- New DSF implementation of
exists()
function did not work with local/parameter variables - Fixed potential deadlock caused by code interceptors
- G2/G3 may be repeated as well like G0/G1 in Fanuc mode
- Fixed removal of plugin www files on upgrade/uninstall
- M550 did not update /etc/hosts causing potential problems if no network interface was active
- SBC values in variable indices were not substituted in set command
- Line numbers could be off when handling exceptions from codes
- Fixed issue where missing DNS servers could crash DCS
- Fixed file enumeration in DuetPiManagementPlugin plugin manifest
- Race condition could lead to macro filestream being disposed twice causing potential crash of DCS
- Added missing variable declaration to DSF build script
- Fixed expression queries of plugin values
- Fixed parameter parsing for values consisting of special number formats
- Fixed event log support via
M929
ok
was not output after DSF error messages potentially upsetting Repetier Server- Sometimes code pipeline elements could be marked busy incorrectly leading to potential deadlocks
- Fixed support for M0/M1/M2 as well as underscores in variable names
- Added work-around for non-conform rr_upload requests with invalid content type
- Fixed type of
tools[].feedForward
and corrected defaultsensors.probes[].travelSpeed
value - Fixed support for
update.sh
in update packages (dsf-update.zip
which requiresRootPluginSupport
) - Updated
stat
import to add support for recent kernels (thanks Loïc) - Removed obsolete OM assignment from Job processor
- When a too long code was attempted to be serialized, DCS crashed
- Fixed DateTime encoding
- Code parser could terminate strings too early
- Fixed issue when parsing the end of a file where a multi-byte character could introduce position offsets leading to errors
Version 3.5.0
Compatible versions:
- RepRapFirmware 3.5.0
- DuetWebControl 3.5.0
Upgrade notes:
- You MUST be on RepRapFirmare 3.5-b1 in order to process jobs. It will NOT work with 3.4.x or older!
API changes:
- Introduced new code interceptor option to auto-expand expression parameters for filtered codes (defaults to true)
- Added new sbcConfigFiles field to plugin manifest. These files are not overwritten on upgrade
- Nested plugin data values can be queried in expressions (e.g.
echo plugins.foobar.data.myObj.myProp
) - Added
recursive
parameter to HTTP file/directory delete request - Added recursive delete functionality for RRF delete requests
- Flush IPC command can be optionally used to synchronize both file streams
- Enabled
Nullable
type checks throughout DSF projects - Added support for
null
parameter values (e.g.X
inG28 X
) - Consolidated API exception classes in DuetAPI library
- Changed async code parser to use
Stream
type instead ofStreamReader
- The
scanner
key has been removed from the object model. It is no longer supported
Changed behaviour:
- If a file is supposed to use two file readers, it must be forked via
M606 S1
result
variable is no longer maintained by DSF- If DCS fails to start, there is now a delay of 5 seconds between restart attempts
- Index web file served from the web server is never cached and must be revalidated by the web browser on reload
- If a RRF plugin contains
daemon.g
, it is renamed todaemon.g.bak
on upgrade - Moved
userSessions
root key to newsbc
key M552 S1
unblocks WiFi automatically usingrfkill
- Introduced new "sbc" root key in favour of deprecated state.dsf... properties
- Removed httpEndpoints root key in favour of sbc?.dsf.httpEndpoints
- Open message boxes are automatically closed in the DSF OM when the controller is disconnected
- Removed obsolete
move.workspaceNumber
field - Code parser is much more sensitive to invalid code parameters
- Error messages from macros/job files are more condensed to get closer to messages from RRF
- When a code cannot be read (i.e. code input is interrupted), the file is aborted immediately
New features:
- Object model and M122 report if 64-bit DCS build is used
- Added support for WiFi scanning (M587.1/M587.2)
- Added support for NetworkManager so that network M-codes can be used on Debian Bookworm
M997 S2
can be used to update the system viaapt update
/unattended-upgrades
on the latest DuetPi version (requires Debian Bookworm)M997 S2 V"<version>"
can be used to install another DSF version (includes automatic update to corresponding RRF version) on DuetPiM997 S2 F"unstable"
orM997 S2 F"stable"
can be used to configure the package feed on DuetPi- Prepared Debian Bookworm support in the DWC launch script
- WiFi country may now be reported and updated using DuetPiManagementPlugin
- Added new SBC option for plugins to auto-restart them in case of unexpected crashes
- Added new object model fields introduced by RepRapFirmware
- When files are uploaded, they are uploaded to a ".part" file before they are moved into place
- Added
fileread
and single-char support using apostrophes like in RRF - Added auto flush option to code interceptor API. This is preferred to avoid race conditions under certain circumstances
- Added new pip install script that also checks for built-in modules (thanks stuartofmt)
- Added support for standalone mode HTTP session keys to DuetHttpClient library
- SSID is now reported in network.interfaces[] if applicable
- Added new HTTP endpoint /machine/model as an alternative to /machine/status
- Added support for
M472
(delete file or directory) - Added support for custom array variables and for assigning individual items
echo
can be used to append contents to a file withoutNL
(akaecho >>>"file" "data"
)- Executing codes do not need an individual task any more, instead they are now handled by a new pipeline architecture
- Added support for two file channels, new message box types, and many other improvements made in RRF
- Rewrote much of the meta G-code expression pre-parser and added ability to define custom functions (not yet available via API)
- Added
rr_
compatibility layer to DuetWebServer (HTTP calls in standalone mode)
Bug fixes:
- DCS could not determine if a network adapter uses DHCP or a static IPv4 address
- DPS no longer redirects stdio/stderr to DPS logger unless requested (systemd takes care of that anyway)
- Fixed file handling with boards that only provide a single file channel
move.axes
can be queried sequentially to support up to 30 configured axes- Changed documentation generator to include
<see cref="...">
statements 'g
parameters were not correctly parsed- Added and tested new axis letters to code parser
- Fixed type of
move.segmentation.segmentsPerSec
- If a connection intercepting a code sent a code to another channel, that code was incorrectly assigned the same macro file (if any)
M929
always required a log filename (affected only v3.5)echo
could be executed on inactive channels (e.g. File2)M122
could throw an exception if there were remaining codes in theExecuted
code pipeline handler- Job file processor didn't synchronize OM right after the print started, potentially starting with an invalid
inputs[].active
state - Identical expression requests yielded the same result if requested on two different code channels
- Fixed AppArmor webcam profile to support Spyglass
- Even number values containing dots were interpreted as integers and not as floats
- Fixed handling of non-ASCII characters in G-code parser
- Better enforce maximum length of arguments for meta G-code keywords
- Invalid enum values (in particular filament monitor types) could crash DCS
- Fixed IPC command to evaluate custom expressions
- Obsolete object model fields were not queried
- When custom endpoints attempted to return a status code, DWS incorrectly tried to write a body response as well
- Fixed
M30
support - Fixed default DateTime format in the object model
- WebSocket session key wasn't optional if no password set
- Corrected type of direct display screen instances in the OM definition
- Start-up errors were incorrectly set after booting
- Adjusted AppArmor permissions for webcam access on Debian Bullseye
- New DSF implementation of
exists()
function did not work with local/parameter variables - Fixed potential deadlock caused by code interceptors
- G2/G3 may be repeated as well like G0/G1 in Fanuc mode
- Fixed removal of plugin www files on upgrade/uninstall
- M550 did not update /etc/hosts causing potential problems if no network interface was active
- SBC values in variable indices were not substituted in set command
- Line numbers could be off when handling exceptions from codes
- Fixed issue where missing DNS servers could crash DCS
- Fixed file enumeration in DuetPiManagementPlugin plugin manifest
- Race condition could lead to macro filestream being disposed twice causing potential crash of DCS
- Added missing variable declaration to DSF build script
- Fixed expression queries of plugin values
- Fixed parameter parsing for values consisting of special number formats
- Fixed event log support via
M929
ok
was not output after DSF error messages potentially upsetting Repetier Server- Sometimes code pipeline elements could be marked busy incorrectly leading to potential deadlocks
- Fixed support for M0/M1/M2 as well as underscores in variable names
- Added work-around for non-conform rr_upload requests with invalid content type
- Fixed type of
tools[].feedForward
and corrected defaultsensors.probes[].travelSpeed
value - Fixed support for
update.sh
in update packages (dsf-update.zip
which requiresRootPluginSupport
) - Updated
stat
import to add support for recent kernels (thanks Loïc) - Removed obsolete OM assignment from Job processor
- When a too long code was attempted to be serialized, DCS crashed
- Fixed DateTime encoding
- Code parser could terminate strings too early
- Fixed issue when parsing the end of a file where a multi-byte character could introduce position offsets leading to errors
Version 3.5.0-rc.4
Compatible versions:
- RepRapFirmware 3.5.0-rc.4
- DuetWebControl 3.5.0-rc.4
API changes:
- Introduced new code interceptor option to auto-expand expression parameters for filtered codes (defaults to true)
- Added new sbcConfigFiles field to plugin manifest. These files are not overwritten on upgrade
- Nested plugin data values can be queried in expressions (e.g.
echo plugins.foobar.data.myObj.myProp
)
Changed behaviour:
- If a file is supposed to use two file readers, it must be forked via
M606 S1
result
variable is no longer maintained by DSF
New features:
- Object model and M122 report if 64-bit DCS build is used
- Added support for WiFi scanning (M587.1/M587.2)
Bug fixes:
- DCS could not determine if a network adapter uses DHCP or a static IPv4 address
- DPS no longer redirects stdio/stderr to DPS logger unless requested (systemd takes care of that anyway)
- Fixed file handling with boards that only provide a single file channel
move.axes
can be queried sequentially to support up to 30 configured axes- Changed documentation generator to include
<see cref="...">
statements 'g
parameters were not correctly parsed- Added and tested new axis letters to code parser
- Fixed type of
move.segmentation.segmentsPerSec
- If a connection intercepting a code sent a code to another channel, that code was incorrectly assigned the same macro file (if any)
Version 3.5.0-rc.3
Compatible versions:
- RepRapFirmware 3.5.0-rc.3
- DuetWebControl 3.5.0-rc.3
New features:
- Added support for NetworkManager so that network M-codes can be used on Debian Bookworm
M997 S2
can be used to update the system viaapt update
/unattended-upgrades
on the latest DuetPi version (requires Debian Bookworm)M997 S2 V"<version>"
can be used to install another DSF version (includes automatic update to corresponding RRF version) on DuetPiM997 S2 F"unstable"
orM997 S2 F"stable"
can be used to configure the package feed on DuetPi
Bug fixes:
M929
always required a log filename (affected only v3.5)echo
could be executed on inactive channels (e.g. File2)M122
could throw an exception if there were remaining codes in theExecuted
code pipeline handler- Job file processor didn't synchronize OM right after the print started, potentially starting with an invalid
inputs[].active
state - Identical expression requests yielded the same result if requested on two different code channels
- Fixed AppArmor webcam profile to support Spyglass
Version 3.5.0-rc.2
Compatible versions:
- RepRapFirmware 3.5.0-rc.2
- DuetWebControl 3.5.0-rc.2
Changed behaviour:
- If DCS fails to start, there is now a delay of 5 seconds between restart attempts
- Index web file served from the web server is never cached and must be revalidated by the web browser on reload
New features:
- Prepared Debian Bookworm support in the DWC launch script
- WiFi country may now be reported and updated using DuetPiManagementPlugin
- Added new SBC option for plugins to auto-restart them in case of unexpected crashes
- Added new object model fields introduced by RepRapFirmware
- When files are uploaded, they are uploaded to a ".part" file before they are moved into place
Bug fixes:
- Even number values containing dots were interpreted as integers and not as floats
- Fixed handling of non-ASCII characters in G-code parser
- Better enforce maximum length of arguments for meta G-code keywords
- Invalid enum values (in particular filament monitor types) could crash DCS
- Fixed IPC command to evaluate custom expressions
- Obsolete object model fields were not queried
- When custom endpoints attempted to return a status code, DWS incorrectly tried to write a body response as well