Changelog DSF 3.x Beta - Duet3D/DuetSoftwareFramework GitHub Wiki

Version 3.6.0-beta.2 (changes since 3.6.0-beta.1)

New features:

  • Added M20 C and rr_file{s/list} max parameters
  • Added support for <fileinfo>.customInfo via ";customInfo" comments in G-code jobs
  • Volume label of external drives is reported in the object model where applicable

Changed behaviour:

  • Change data type of minor command fraction (#209)
  • Allow user-defined macros to be parsed as well by fileinfo requests
  • Made CORS check for WebSockets stricter
  • Priority codes are preferrably sent to idle channels with the same firmware emulation

Bug fixes:

  • Changed M20 S1 to behave like in RRF
  • Prioritise M292 to allow custom codes that create blocking message boxes
  • Fixed M99 support within system macros
  • Added missing slashes to ends of default directories
  • M32/M37 could override the file being printed (#206)
  • Fixed JSON handling of some OM types and of abstract int/float properties
  • Fixed type of outgoing update codes (#204)

Version 3.6.0-beta.1 (changes since 3.5.3)

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.0-beta.4

New features:

  • 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

Changed behaviour:

  • 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

Bug fixes:

  • 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

Version 3.5.0-beta.3

New features:

  • Added recursive parameter to HTTP file/directory delete request
  • Added recursive delete functionality for RRF delete requests
  • Added support for M472 (delete file or directory)

Changed behaviour:

  • Removed obsolete move.workspaceNumber field

Bug fixes:

  • 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

Version 3.5.0-beta.2

New features:

  • 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")

Changed behaviour:

  • 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

API changes:

  • 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
  • ObjectModel patch API commands only work in non-SPI mode

Bug fixes:

  • 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

Version 3.5-b1

Upgrade notes:

  • You MUST be on RepRapFirmare 3.5-b1 in order to process jobs. It will NOT work with 3.4.5 or older!
  • The scanner key has been removed from the object model. It is no longer supported

New features:

  • 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:

  • 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.4-b7

Upgrade notes:

  • It is recommended to disable the rsyslog service on DuetPi installations to prevent excessive growth of log files. To do this, run the following command in a Linux terminal: sudo systemctl stop rsyslog && sudo systemctl disable rsyslog
  • There is a new SBC permission for webcam access. To allow DSF plugins to access the webcam(s), you must run sudo gpasswd -a dsf video once

New features:

  • Added support for build times generated by REACTOR slicer
  • Upgraded .NET framework to v6

Bug fixes:

  • PrusaSlicer print requests were dropped due to incorrect content type (DWS expects text/plain but gets application/x-www-form-urlencoded)
  • On some setups the periodic updater task locked the object model for 1.5s causing print artifacts due to slow SPI communication
  • M999 from a macro file could hang with DuetPiManagementPlugin enabled
  • Quoted characters were incorrectly treated in keyword arguments
  • Multiple filament usages from a single-line comment were not properly parsed
  • Error handling for file lists wasn't working as expected
  • Only up to 9 axes could be configured
  • Parameter letters were always converted to upper-case

Version 3.4-b6

New features:

  • Number of glitches on the TransferReady pin are now recorded for diagnostics
  • DCS uses proper return codes and saves the error reason on startup to /run/dsf/dcs.err
  • DWS forwards the DCS start error to DWC if it is available

Changed behaviour:

  • Plugin service notifies systemd about start after plugin manifests are loaded
  • Default UNIX socket for DSF now points to /run/dsf/dcs.sock rather than to /var/run/dsf/dcs.sock (/var/run is usually symlinked to /run)
  • Removed special heightmap code from DSF so that RRF can now read and write heightmap files on its own

Bug fixes:

  • DCS could complain about plugin services if they terminated during shutdown
  • systemd services for DuetPluginService did not wait for processes to start
  • Some expression values like DateTime, ULong, and Null were not supported by DSF
  • Web server took a few seconds to stop if a WebSocket client was connected
  • Noise on the TfrRdy pin could make DCS get out of sync with RRF after updating the firmware (only in NoTerminateOnReset mode)
  • DCS could send invalid collection values in patch mode
  • DuetHttpClient did not reconnect under certain circumstances
  • G-code filenames starting with digits (but not paths like 0:/gcodes/) could cause exceptions
  • If the first or last G1 Z parameter were an expression, the file info may not be parsed

Version 3.4-b5

Changed behaviour:

  • config-override.g is now written by RepRapFirmware
  • Removed unused return command from API keywords
  • Removed deprecated CodeResult class from API
  • Added new -c parameter to ModelObserver to confirm receipt of data
  • Added new Keyword code type to DSF API

Bug fixes:

  • Automatic firmware update during unattended updates did not work
  • Automatic expansion board updates did not wait for completion
  • Fixed problem where subscribers received only cached model patches
  • Under certain circumstances macro files could be stopped too early (thanks Andy)
  • Pausing job files was not working if RRF reported no file position
  • boards[].mcuTemp, boards[].v12, and boards[].vIn were not nullable
  • Default firmware directory in the object model was wrong
  • JSON responses in subscriber patch mode were not necessarily live
  • M505 did not lock the movement before changing the sys directory
  • Local variables were not deleted when their scope was released
  • M105 did not output a NL at the end of Marlin-compatible replies

Version 3.4-b4

New features:

  • Added HTTP password protection (M551) using new /machine/connect and /machine/disconnect endpoints
  • Implemented new class library for remote management of Duets in standalone or SBC mode
  • Added new HTTP endpoint /machine/noop to keep HTTP sessions alive on demand
  • Added support for pausable macro files (see M98 R1)

Changed behaviour:

  • Filament management is now done exclusively by RRF
  • List of plugins to start on boot is only written when individual plugins are started or stopped

Bug fixes:

  • Pausing near the very end of a job file did not work
  • Single quotes in string parameters to convert letters to lower-case were not supported
  • Keyword results were not properly logged (like from echo or abort)
  • Under certain conditions messages in conditional blocks were not output instantly
  • M997 did not accept the P-parameter to override a firmware filename
  • Some log calls did not check for null messages

Version 3.4-b3

New features:

  • Implemented file redirections of the echo command (see here)
  • Added support for new InvalidateChannel command allowing plugins to cancel already queued codes and files

Bug fixes:

  • Resolved race condition for M0/M1 which could cause stop.g to be executed instead of cancel.g
  • Fixed an exception that could occur when codes were cancelled and their result was combined
  • Under certain conditions paused prints could not be cancelled properly

Version 3.4-b2

New features:

  • Plugin manager can now be used to reload specific plugin manifests
  • Plugin manager may be used to query the installation/runtime status of plugins
  • Added new cancelling item to state.status enum
  • Subscribers and code stream clients can define what messages they want to receive
  • Added support for array expressions
  • DuetPiManagementPlugin now supports (un-)mounting of devices via M21/M22

Changed behaviour:

  • Web server only sends messages with HTTP target to web clients

Bug fixes:

  • When RRF reset, DCS could terminate when trying to clear the global variables
  • Expression parameters were incorrectly serialized
  • Certain UTF-8 strings could be truncated when sent to RRF
  • Fixed race condition when attempting to save updated filament mapping
  • GetFileInfo requests attempted to parse non-GCode files
  • M-codes could have G-parameters, now only T-parameters are permitted
  • Functions with more than one parameter were not working in echo commands

Version 3.4-b1

New features:

  • RRF v3.4-b1 and newer can now read and write files on the SBC

Changed behaviour:

  • Replies from macro files are output immediately as they are generated (like in standalone mode)
  • Codes starting macros do not collect the results from the sub-macro codes any more (like in standalone mode)
  • SPI link timing is not controlled by DCS any more, instead RRF does this (see also M576)

Bug fixes:

  • Variable names could not contain underscores

Version 3.3-b3

Compatible versions:

  • RepRapFirmware 3.3-b3
  • DuetWebControl 3.3-b3

New features:

  • Added support for variables in G-code files (global, var, set)

Changed behaviour:

  • Added fallback to directories.system if firmware files cannot be found in directories.firmware

Bug fixes:

  • Tilt factors for delta kinematics were off in config-override.g
  • M0/M1 didn't cancel already queued file codes
  • Truncated tool lists are now fetched using multiple queries

Version 3.3-b2

Compatible versions:

  • RepRapFirmware 3.3-b2
  • DuetWebControl 3.3-b2

Changed behaviour:

  • Changed file format of the new plugin manifest
  • Layers code is no longer compatible with previous versions
  • Emulation is always applied to results from code interceptors
  • The DSF-only keyword return is now obsolete and will be removed from a future version (unless support for it is added to RRF)

Bug fixes:

  • Updated regular expressions for various slicer formats
  • SBC permissions for third-party plugins were not properly enforced
  • When DCS failed to start too many times in a row, it remained disabled
  • DPS didn't (de-)serialize string dictionaries properly

Known issues:

  • Variable support isn't implemented yet, this is TBD in 3.3-b3

Version 3.3-b1

Compatible versions:

  • RepRapFirmware 3.3-b1
  • DuetWebControl 3.3-b1

Changed behaviour:

  • Plugin support in DSF is fully implemented
  • DuetWebServer notifies systemd when it has started like DuetControlServer does
  • M999 is only prioritized from text inputs if it is intended for the main board
  • New configuration file dsf-config.g is automatically executed when DCS and third-party plugins have been started
  • CodeConsole application uses Telnet G-code channel instead of SBC

Known issues:

Version 3.2-b4

Compatible files:

  • RepRapFirmware 3.2.0-b4
  • DuetWebControl 3.2.0-b4

Changed behaviour:

  • DCS service is now started via sysinit.target instead of basic.target so that config.g is processed faster on boot
  • Thumbnails from PrusaSlicer are now parsed (thanks Sindarius)
  • M500 writes new heater tuning parameters to config-override.g
  • In Marlin emulation "ok" responses are only sent when the line is complete

Bug fixes:

  • Codes could be sent to code interceptors in the wrong order
  • M21 (P0) returned an error message breaking Octoprint support
  • Under certain circumstances some object model keys were not updated on initialisation
  • DCS service didn't have permission to change the datetime
  • Print times with decimal places were incorrectly parsed
  • When the controller was reset or updated, an extra data transfer was performed

Version 3.2-b3

Compatible files:

  • RepRapFirmware 3.2.0-b3
  • DuetWebControl 3.2.0-b3

Changed behaviour:

  • DCS is now explicitly notified about closed messages and files (hence no longer compatible with 3.2-b2)
  • CodeConsole utility allows evaluation of expressions using eval <expression>

Bug fixes:

  • When certain G-code inputs were disabled, the DSF API threw NullReferenceExceptions
  • When the heaters contained null items, no config-override.g could be writen
  • When the move compensation type was set to none, the heightmap file was not reset
  • Starting macro files could cause out-of-order execution and stack underruns
  • Sometimes the object model wasn't fully updated after a disconnect

Version 3.2-b2

Compatible files:

  • RepRapFirmware 3.2.0-b2
  • DuetWebControl 3.2.0-b2

Changed behaviour:

  • runonce.g is no longer processed before config.g to match RRF's behaviour
  • Increased SPI protocol version due to slight changes for the new Linux task in RRF

Bug fixes:

  • Added missing "Starting" item to the MachineStatus enumeration
  • M112/M999 were executed out-of-order when read from files
  • Sometimes in print files codes invoking macro files could crash DCS
  • Aborted macro files did not cancel codes properly
  • Comments following codes directly without a whitespace could cause parsing errors

Version 3.2-b1

Compatible files:

  • RepRapFirmware 3.2.0-b1
  • DuetWebControl 3.2.0-b1

Changed behaviour:

  • Permissions are now required for DSF commands for executables running in /opt/dsf/plugins
  • Simulation times are automatically written to G-code files
  • Increased API level due to object model changes
  • Renamed namespace DuetAPI.Machine to DuetAPI.ObjectModel and MachineModel to ObjectModel
  • DSF processes are now running as their own dsf user

Bug fixes:

  • DCS service file contained an invalid CPU priority
  • Event logging via M929 was not working
  • Macro files with an unknown start code were not properly cancelled by M99/M292 P1

Known issues:

  • Security permissions are not enforced via AppArmor yet (and they are still subject to change)
  • Package dependencies are not yet installed when a plugin is installed
⚠️ **GitHub.com Fallback** ⚠️