Skip to content

Releases: Duet3D/DuetSoftwareFramework

Version 3.6.0-beta.1

24 Sep 17:58
Compare
Choose a tag to compare
Version 3.6.0-beta.1 Pre-release
Pre-release

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

19 Sep 12:38
Compare
Choose a tag to compare

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, run sudo rm /opt/dsf/conf/config.json after apt via SSH or using a Linux console. Without this step, you will get an error stating that the gpiochip device could not be opened. The underlying change came from a kernel change from Raspberry Pi, which brings the gpiochip 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 and PatchObjectModel

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 preceding M98
  • Fixed potential deadlock when deleting variables
  • Fixed DWC startup issue in SBC mode caused by Chromium singleton lock

Version 3.5.3-rc.1

28 Aug 19:43
Compare
Choose a tag to compare
Version 3.5.3-rc.1 Pre-release
Pre-release

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 and SetPluginData 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

12 Jun 07:24
Compare
Choose a tag to compare

Compatible versions:

  • RepRapFirmware 3.5.2
  • DuetWebControl 3.5.2

Changed behaviour:

  • M409 K"network" and M409 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

31 May 08:05
Compare
Choose a tag to compare
Version 3.5.2-rc.1 Pre-release
Pre-release

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

19 Apr 17:00
Compare
Choose a tag to compare

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 in G28 X)
  • Consolidated API exception classes in DuetAPI library
  • Changed async code parser to use Stream type instead of StreamReader
  • 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 to daemon.g.bak on upgrade
  • Moved userSessions root key to new sbc key
  • M552 S1 unblocks WiFi automatically using rfkill
  • 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 via apt 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 DuetPi
  • M997 S2 F"unstable" or M997 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 without NL (aka echo >>>"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 the Executed 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 default sensors.probes[].travelSpeed value
  • Fixed support for update.sh in update packages (dsf-update.zip which requires RootPluginSupport)
  • 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

17 Apr 17:48
Compare
Choose a tag to compare

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 in G28 X)
  • Consolidated API exception classes in DuetAPI library
  • Changed async code parser to use Stream type instead of StreamReader
  • 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 to daemon.g.bak on upgrade
  • Moved userSessions root key to new sbc key
  • M552 S1 unblocks WiFi automatically using rfkill
  • 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 via apt 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 DuetPi
  • M997 S2 F"unstable" or M997 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 without NL (aka echo >>>"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 the Executed 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 default sensors.probes[].travelSpeed value
  • Fixed support for update.sh in update packages (dsf-update.zip which requires RootPluginSupport)
  • 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

09 Apr 09:56
Compare
Choose a tag to compare
Version 3.5.0-rc.4 Pre-release
Pre-release

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

26 Jan 12:42
Compare
Choose a tag to compare
Version 3.5.0-rc.3 Pre-release
Pre-release

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 via apt 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 DuetPi
  • M997 S2 F"unstable" or M997 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 the Executed 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

18 Dec 13:41
Compare
Choose a tag to compare
Version 3.5.0-rc.2 Pre-release
Pre-release

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