Additional functionality in 1.00-dc42 release compared to RRP 0.78c:

* The Duet can serve all the files needed by the web interface

* All ADC readings are done in the tick ISR to avoid the processor having to wait for ADC conversions and provide faster thermistor and z-probe response.

* Additional over-temperature protection is done in the tick ISR, and the watchdog timer resets the system if the tick interrupt fails.

* A software watchdog is used to reset the processor if it gets stuck in a spin loop.

* Printing doesn't hang if the USB port is disconnected (or attached PC goes to sleep) during a print.

* The number of bits of temperature resolution is increased from 10 to 13 (i.e. 12-bit ADC + 1-bit oversampling) to increase the temperature resolution

* ADC corrections can be set in the M305 command.

* M208 command allow you to set axis minimum positions (e.g. negative x-axis position) as well as maximum positions.

* G1 commands with S1 parameter (i.e. seeking for endstops) do not need to be followed by a G92 command to work properly. The positions assumed to have been reached when endstops are hit are those set by the M208 command.

* Long filename support for files on the SD card

* The limit of 42 files in the list of gcode files on the SD card is removed (but there is still a limit of 2000 characters)

* M220 (set speed factor override) and M221 (set extrude factor override) commands are supported.

* Option to invert cooling fan PWM

* Additional z-probe type 3 is supported, for z-probe boards that incorporate more than one type of z-probe (e.g. my hot end boards)

* Separate G31 parameters can be saved for z-probe types 0, 1/2, and 3

* Various parameters (G31 values, IP address, MAC address, thermistor parameters, PID parameters) are saved to flash memory (note that these values do not survive a firmware upgrade)

* M122 diagnostics command shows additional parameters such as bed compensation heights, last reset reason, and up-time

* When pausing a print from SD card, if the printer is executing a 'wait' command such as M116, control is returned to the web interface immediately, without waiting for the command to complete (which could take a long time).

* The USB port is responsive immediately after power up or reset even when no Ethernet cable is connected

* A new file upload protocol supports much faster uploading of any type of file, without a limit on line length, with error reporting, and with a check that the file length is correct when the upload is complete.

* The web interface can now request the status of a file. This returns information such as layer height, object height, and filament required. These parameters are useful in displaying print progress and estimating time to completion of a print. Gcode files generated by slic3r, Cura and Simplify3D are supported.

* M80 and M81 ATX power on/off commands are supported

* M999 software reset command is supported

* M301 and M304 commands to set PID parameters now take an additional T parameter. This should be set to the approximate extra PWM value needed (on a scale of 0 to 255) per extra degC of temperature. It is used to preset the I-term to a suitable value when PID kicks in, to enable fast heating with minimum overshoot.

* M301 and M304 commands to set PID parameters now take an additional S parameter. This allows for variations in cartridge heater power and supply voltage to be taken into account more easily.

* M0 and M1 commands now turn all heaters off instead of setting them to their standby temperatures

* M0 no longer disables drives or resets the 'homed' status. M1 still does.

* When using a Z probe, Z homing and bed probing are done in two stages (a fast stage followed by a slow stage) for better accuracy.

* The default initial Z homing and bed probing speed has been increased. This is possible because Z homing and bed probing slow down when the probe reading is approaching the target value.

* M116 takes an optional P parameter to specify which tool to wait for. If no P parameter is given, it waits for all tools and the bed as before. The main purpose of this is that on a tool change, you can wait for the new tool to heat up to operating temperature but not wait for the old tool to cool down to standby temperature.

* When fetching file info, if the gcode file contains more than one 'filament used' comment, the filament lengths in all of them are returned to the web interface

* The active and standby temperatures of all heaters are included in the status poll response

* The M220 and M221 commands now return the override factors if no S parameter is provided

* Temperature errors are reported to the web server as well as to the USB interface

* The Heat section of the M122 diagnostics report now shows the accumulated PID I-term

* G90 and G91 commands now affect only the the axes, not the extruders

* M563 command extended to allow the tool number origin to be adjusted. This is to permit multi-media gcode files generated by slic3r 1.17 to be printed. If there is no P parameter in the command then the S parameter specifies an offset to be added to tool numbers in T, G10, M104 and M109 commands. This is so that multi-media gcode files generated by slic3r can be printed without having to edit all the tool numbers in the gcode file first. This extension is intended to be temporary, until slicer provides a mechanism for specifying the tool numbers. A separate offset is maintained for each data source (USB, web or SD card) and the offset for data from the SD card is reset to zero when a new file is started. To use this facility to print slic3r multi-media gcode files, add M563 S1 to your start gcode.

* M104 and M109 commands now accept an optional T parameter to specify the tool number, as generated by slic3r in multi-media gcode files.

* Movement code from RepRapPro's 0.89 dev version incorporated, including 5-point manual or automatic bed compensation mechanism. Fixed a bug that caused the head to try to move beyond the axis limits when 5-point auto compensation was used and G32 was executed more than once.

* Heater status (off/standby/on/fault) is included in the status poll response for the web interface

* Incorporated code from RepRapPro 0.89 dev version to allow many more M-commands to return the existing values as well as set them.

* Incorporated code from RepRapPro 0.89 dev branch to implement the M119 and M135 commands. Fixed a bug in the M135 (set heat sample interval) command, which meant that if you changed the interval from its default value of 0.5 seconds, you needed to adjust the I parameter by the same ratio and the D parameter by the inverse ratio.

* Extrusion totals are reset to zero when starting a new print from SD card.

* If a Pause (M25) command is received when the machine is executing a Dwell command or a command that waits for temperatures to be reached, the command is interrupted immediately so that the pause takes immediate effect. The interrupted command will be completed if the print is resumed.

* The G10 command can now be used to specify nozzle offsets (as well as active/standby temperatures)

* The Move code has been almost completely rewritten to generate steps at accurate intervals, instead if using the Bresenham approximation

* Extruder elasticity compensation is supported (M572 command)

* Delta printers are supported (M665 and M666 commands)

* Endstops can be configured (M574 command)

* Debugging can now be enabled and disabled separately for all modules (M111 command). The module is selected using the P parameter.

* Gcode commands received via the serial port are acted on (for PanelDue support), in addition to commands received from USB, web interface, and Telnet.

* Extended responses in JSON format are generated in response to M105 S2 and M105 S3 commands (for PanelDue)

* Additional status code C is returned while processing config.g (for PanelDue)

* FTP server supported (thanks zombiepantslol)

* Telnet server supported (thanks zombiepantslol)

* Fan RPM supported (thanks zombiepantslol)

* Interrupt-driven network timing to better handle slow writes to SD card (thanks zombiepantslol)

* M18 and M84 now allow selective disabling of drives (thanks zombiepantslol)

* Bug fix: uploading file whose name includes an uppercase G now works. Similarly for setting a machine name containing an uppercase G (M550) or password containing an uppercase G (M551)

* Bug fix: if the machine name in an M550 command is followed by a tab character, then the name is assumed to terminate just before the tab character. Similarly for passwords set using M551.

* Bug fix: setting a machine name that contains a quote or backslash character no longer causes the webserver to return a bad JSON response in response to the rr_name request

* Bug fix: indentation of multipart messages sent to the USB interface now works properly

* Bug fix: if G10 was used to set just the active temperature for a tool, then the standby temperature for the same tool was set to an undefined value, and vice versa

* Bug fix: if bed compensation or axis compensation was in use, then a G1 S1 command to home an axis could be prematurely terminated if the head was already at the endstop position for a different axis

* Bug fix: if a tool was defined as using zero drives or zero extruders, it would be treated as assuming a collection of drives or extruders according to the values in an uninitialised array

* Bug fix: the cumulative extruder positions were getting reset (typically to zero) on a tool change or other macro file execution

* Bug fix: numerous calls to strncat were being made with a 'nchars' parameter that was larger than space available in the destination buffer

* Bug fix: print moves received just prior to an M109 or M190 command were not executed until after the heater had reached temperature instead of before

* Bug fix: if the last command in a macro file did not have a newline character at the end then the command might not be fully executed

* Bug fix: the cooling fan PWM frequency was set to a frequency that was much too high for the mosfet to handle. It has been changed to 25kHz so that it can be used to control 4-wire PWM fans meeting the Intel specification.

* Bug fix: homing the Z axis or doing bed probing when axis compensation was enabled caused the X and Y origins to move, often by several mm

* Bug fix: the M92 command could not be used to set extruder steps/mm in machines with multiple extruders unless either only one extruder steps/mm value was supplied (which was applied to all extruders) or 5 extruder steps/mm values were supplied 

Additional functionality in web interface 1.04 compared to RRP 0.65:

* Faster (>6Mbytes/min), more reliable file uploading, with reporting and graceful recovery if an upload fails

* All web files and config files can also be uploaded

* More accurate (usually!) estimate of print completion time, based on filament consumption

* The machine name is displayed

* The filament requirement and object height are fetched automatically from the SD card file being printed, for use in estimating the completion time

* Works with FireFox as well as Chrome

* "Upload & Print" button (replaces direct web print button, uploads to the SD card first for more reliable printing)

* The extruder position box reports total filament extruded, instead of the amount extruded in the last move

* Additional status Halted is shown (if emergency stop has been used) as well as Ready and Active

* The Print Status tab includes slider controls to allow the speed and extrusion factors to be adjusted during printing

* A second heated print head is supported

* The active and standby temperature settings of each print head, and the active temperature setting of the bed, are displayed along with the current temperature. The active and standby temperatures can both be set.

* The status of each heater (off/standby/active/fault) is displayed.

* If a browser session is reconnected while a print is in progress, the print status is retrieved and displayed.

* The cooling fan RPM is displayed (if available)
