Additional functionality in 1.00q-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. Diagnostic information is stored in flash memory if this happens.

* 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)

* Additional z-probe type 4 is supported, for switch-type Z probes

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

* Various parameters (G31 values, IP address, MAC address, thermistor parameters, PID parameters) can be 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.

* 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.

* 5-point manual or automatic bed compensation mechanism is supported (thanks RepRapPro). 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 of using the Bresenham approximation. There are no minimum speeds any more.

* X and Y axes can be homed simultaneously for faster homing (not available on CoreXY/CoreXZ/CoreYZ machines)

* Motor current is reduced to lower than normal when M0 is received or the motors have all been idle for 30 seconds. The default is 30% of normal, but it can be adjusted using the S parameter in the M906 command.

* Extruder elasticity compensation is supported (M572 command)

* Delta printers are supported (M665 and M666 commands)

* CoreXY, CoreXZ and CoreYZ printers are supported (M667 command)

* 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, M105 S3, M20 S2 and M36 commands (for PanelDue)

* M20 command can be used to list any folder, not just /gcodes

* Additional status codes are returned while processing config.g, and when the print is paused, pausing, resuming, or running a macro file (these are used by the web interface and by PanelDue)

* Nested macros are supported

* M98 can be used to run macros from any folder

* The G32 command runs macro file bed.g if it exists, otherwise it behaves as before

* The HTTP port number can be set using the R parameter in the M552 command (default 80)

* Files on the SD card whose names begin with '.' (e.g. Mac files used to store metadata) are ignored when listing contents

* The M305 command can be used to change the mapping between thermistor input channels and extruders etc. In particular, this allows the extruder 1 and heated bed thermistors to be swapped, to work around the noise problem on the DueX4.

* Stepper motor currents are set and reported more accurately (M906 command)

* Files pause.g and resume.g are run automatically (if they exist) when a print is paused and resumed

* On resuming a print, the head is moved to the position it was at when the print was paused. The command G1 R1 (optionally with XYZ offset parameters) can also be used to move to that position.

* Command M575 is provided to allow the aux port baud rate to be set, and to allow commands received that do not have a valid checksum to be ignored

* FTP server supported (thanks zombiepantslol)

* Telnet server supported (thanks zombiepantslol)

* Fan RPM supported (thanks zombiepantslol)

* Fast file upload via POST is 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)

* The time needed to finish a print is now computed by the firmware, instead of in the web interface (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 
