Welcome to mirror list, hosted at ThFree Co, Russian Federation.

WHATS_NEW.md - github.com/Duet3D/RepRapFirmware.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 793ae9b9c9a5eb0ae0b86397a8c8f2dc1e8aa349 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
Summary of important changes in recent versions
===============================================

Version 2.0RC2 (Duet 2 series) and 1.21.1RC2 (other hardware)
=============================================================
Upgrade notes:
- Compatible files are DuetWiFiserver 1.21 and DuetWebControl 1.21.1RC4. Use of older versions of DWC may result in "Not authorized" disconnections.
- When the machine mode is set to CNC, G0 movement behaviour is changed to align more with the NIST standard (see 2.0RC1 release notes).

New features and changed behaviour:
- M144 S1 now sets the bed to Active mode. M144 with any other S parameter or no S parameter sets the bed to standby as before.
- Added more functionality to 12864 displays on Duet 2 Maestro

Bug fixes:
- If the system ran out of output buffers when multiple tasks were generating output (e.g. DWC or Telnet combined with PanelDue or USB) then in rare cases the firmware would reboot

Other changes:
- Incorporated chrishamm's changes to scanner interface and DHT sensor support

Version 2.0RC1 (Duet 2 series) and 1.21.1RC1 (other hardware)
=============================================================
Upgrade notes:
- Compatible files are DuetWiFiserver 1.21 and DuetWebControl 1.21.1RC1. Use of older versions of DWC may result in "Not authorized" disconnections.
- When the machine mode is set to CNC, G0 movement behaviour is changed to align more with the NIST standard (see below)

New features and changed behaviour:
- Default stepper driver mode for TMC2224 drivers is now stealthchop2
- Stepper driver mode for TMC2660 and TMC2224 drivers can now be set via the D parameter in M569
- Stepper driver chopper control register can now be set via the C parameter in M569 - USE THIS	ONLY IF YOU KNOW WHAT YOU ARE DOING!
- When Z probe type 0 is selected and DWC/PanelDue have prompted the user to jog Z, axis movement before homing is allowed
- When the machine mode is set to CNC, G0 moves are now done using the maximum travel speed of the machine in accordance with the NIST standard, and E and F parameters are no longer recognised.
- M114 reports the user coordinates first and the machine coordinates at the end
- Minimum allowed jerk setting (M556) is reduced from 1mm/sec to 0.1mm/sec
- When M500 is used a warning is given if M501 was not run in config.g
- G2 and G3 no longer require all of X, Y, I, J to be specified. X or Y and I or J is sufficient.
- The user coordinates are updated if G10 is used to change the offsets of the current tool
- Added experimental Z probe type 10 (Z motor stall)
- Simulations can now be run when the printer is not homed

Bug fixes:
- When high microstepping was used so that MaxReps got very high, certain sequences of movement commands could lock up the movement system. MaxReps has been replaced by a hiccup count.
- M122 reported some parts of network status twice on Duet 2 Ethernet and Duet 2 Maestro
- If a PT1000 sensor was configured using M305 but a thermistor was plugged in instead, the firmware reported semi-random high temperatures instead of an error
- If a PT1000 sensor was configured using M305 and then M305 was used to change it back to a thermistor, it remained configured as a PT1000
- If a delta printer failed to home then DWC might disconnect due to NaN values for the machine coordinates in the rr_status response
- The M105 response on a multi-tool system was not in the exact format that Octoprint required
- Excessive decimal places in some values in M408 responses and rr_status requests have been removed
- G1 E moves with the S1 parameter (i.e. filament loading woith extruder stall detection) on a delta reported "Error: G0/G1: attempt to move delta motors to absolute positions"
- Duet Web Control clients that go to sleep without disconnecting first are timed out after 8 seconds (this was already happening on the Duet 06/085 but not on Duet 2)
- VSSA fault detection was not working on the Duet Ethernet in firmware 1.21
- If G30 was used to set an accurate Z height after mesh bed probing or loading a height map, if bed compensation was then cancelled then any Z offset from the height map remained. One consequence of this was that if bed probing was run again, the original height map Z offset was carried through to the new one, but the sign of the offset was reversed.

Internal changes:
- RepRapFirmware 2.0 builds use a real time operating system kernel (FreeRTOS). Currently there are just three tasks: Main, Heat and Network. The tasks and their free stack space are listed in the M122 diagnostics report.
- Custom SafeStrtod, SafeVsnprintf and related functions are used instead of C library strtod, vsnprintf etc. The replacements are thread safe and use less stack than the originals.
- nano-newlib is used instead of newlib

Known bugs:
- Continuous rotation mode for SCARA printers doesn't work
- When executing a linear (G1) move on a SCARA printer, the firmware checks that the endpoint is reachable but not that the interemdiate points are reachable

Version 1.21
============
Upgrade notes:
- The compatible DuetWiFiServer version is 1.21. If you are already running firmware 1.19 or later, you can install this before or after upgrading the main firmware, it doesn't matter.
- The compatible Duet Web Control is 1.21. Install it after upgrading the main firmware.
- On Cartesian and CoreXY printers, normal G0 and G1 moves are no longer allowed before the corresponding axes have been homed. In particular, if your homex.g, homey.g and homeall.g files raise Z a little at the start and lower it at the end, you will need to add the S2 parameter to those G1 Z moves. Otherwise the G1 Z move will be refused unless Z has already been homed and the homing macro will be terminated.
- The binary filename for the Duet WiFi and Duet Ethernet is now called Duet2CombinedFirmware.bin. However, your existing firmware version may expect it to be called DuetWiFiFirmware.bin or DuetEthernetFirmware.bin. For your convenience, this release includes copies of Duet2CombinedFirmware.bin with those names.
- If you have a start.g macro file in the /sys folder of your SD card, remove or rename it, unless you want it to be run every time you start a print from SD card
- See also the upgrade notes for version 1.20 if you are upgrading from a version earlier than that

New features and changed behaviour:
- The rr_status and M408 reports now include the spindle speed
- M106 now also reports the current fan PWM for thermostatically-controlled fans
- Machine coordinates are always used when running system macros automatically.
- New M569 T parameter options to specify step pulse width, step pulse interval, direction setup and direction hold times
- M665 now sets the M208 limits (except Z min) to match the machine limits, so that Duet Web Control reports the correct values
- On CoreXZ machines we no longer require Z to be homed before bed probing with G30
- M589 now checks that the password is either empty or 8 characters minimum
- G10 L2 is supported as an alternative way to set tool offsets
- G10 L20 is supported as an alternative way to set workspace coordinates
- G30 with no parameters now supports multi-tap, and the head is raised or the bed lowered to the dive height after probing
- Heater fault detection is suppressed when heaters are suspended during bed probing
- DuetWiFiServer.bin uses a new SDK version, which seems to resolve some issues
- On boards with a W5500 Ethernet interface, the Ethernet PHY is now programmed to auto negotiate
- Added M564 H0 command to allow axis movement before homing on Cartesian/CoreXY printers
- The filament length comment proposed to be generated by the next version of Cura when using more than one filament is supported
- On Cartesian and CoreXY printers, normal movement commands are no longer permitted until the corresponding axes have been homed
- Illegal movement commands in a print file or macro file cause the file to be terminated and heaters/spindle motors/lasers to be turned off; except that when the printer is in FDM mode, G0 and G1 moves outside the movement limits are just truncated as before
- The M39 command reports the SD card cluster size
- If GCode attempts to set the temperature of a non-existent bed or chamber heater to zero (to turn it off), the error message that would normally be generated is suppressed
- G60 command to set a restore point is implemented
- M671 command now supports the F (fudge factor) parameter
- The standstill current fraction can now be set on the Duet Maestro build
- M118 support added (thanks chrishamm)
- When using external stepper drivers the DIR signal is no longer changed before the step pulse has ended
- The M452, M453 and M573 commands now support the I1 parameter to invert the laser, spindle or extrusion signal polarity
- A common firmware image is used for both the Duet WiFi and the Duet Ethernet. For now the name of the binary file is DuetWiFiFirmware.bin.
- The filament usage comments generated by Ideamaker are now recognised
- A separate Z probe type (P9 in M558) is now used for BLTouch and compatible Z probes. When this is selected, the deployprobe.g macro is run just before each probing move, and retractprobe.g is run every time the probe triggers, or at the end of the probing move if it doesn't trigger
- All heaters are turned off during probing moves if parameter B1 is specified in the M558 command
- The HTTP and FTP connection password is now compared using a constant-time algorithm to avoid leaking information
- The M671 command can be used with just one pair of X and Y coordinates, which disables the manual bed calibration assistant
- Continuous rotation proximal and distal joints are now supported on SCARA printers, and continuous rotation turntables are assumed on Polar printers
- When beginning a print from SD card, macro /sys/start.g is run if it is present
- Sending M0 or M1 from a source other than the SD card no longer stops an SD card print that is not paused
- When a serial input channel detects a framing or overrun error other than in a GCode end-of-line comment, the line of GCode in which it occurs is discarded
- When multi-touch Z probing is enabled, if during bed.g bed probing the maximum probe count is exceeded, the average of all the height readings is used instead of refusing to do calibration or levelling at the end
- Any I2C errors that occur when accessing a DueX5 or SX1509B expander are recorded, and the error count is displayed in the M122 report
- Added support for nonlinear extruder drives (M592)
- Added support for Duet3D laser filament monitor
- Added support for M260 and M261 (send/receive I2C)
- Added support for workspace coordinates (G10 L2, G53 to G59.3)
- Added absolute babystepping mode in M290 command
- Added multi-touch Z probing (M558 A and S parameters)
- Added M39 command to return SD card free space and other SD card information
- M591 D# response now includes the measured steps/mm and tolerance
- Support endstops 5-9 when no DueX board is present
- Show Duet board revision as 1.02+ if we detect it
- Recognise Ideamaker generated-by string
- Cache is now disabled on the ATSAM4E
- Ported DHCP changes from LWIP 2 to Duet 06/085 build

Other changes:
- Duet Web Control and PanelDue now report the coordinates relative to the origin of the current workplace
- Rewrote dhcp_rec function on Duet06/085 to avoid goto statements (possible fix for startup problem when using DHCP)

Changes to DuetWiFServer:
- Errors reported by LWIP for listening PCBs are handled, and reported if WiFi debugging is enabled

Changes to iap and iap4e:
- The binary file is no longer deleted after successful installation
- On the Duet WiFi/Ethernet the DIAG LED blinks while the firmware is being installed

Bug fixes:
- Pulse-type filament monitors are now working
- WiFi sockets whose connections abort are now terminated to make them available for re-use
- DWC Machine Properties page shows the correct state of active low endstops
- M116 commands were sometimes executed out-of-order relative to previous G10 commands if movement commands were in progress
- A short delay is inserted when M558 is used to change the Z probe type, to allow the averaging filters to accumulate the new data
- M291 messages which are non-blocking (i.e. mode < 2) are now synchronised to queued moves, like M117 messages
- Corrected Z probe input pin in RADDS build
- Possible fix to Duet 06/085 failure to start when using DHCP
- Duet Ethernet only: fixed bugs in the DHCP client code that could cause the printer to become very slow
- G2 and G3 arc moves are terminated if the attempt to exceed the axis limits
- During simulation the status is set to "Simulating" instead of "Printing"
- M556 with a zero S parameter no longer messes up the coordinate calculations
- When large files were uploaded or copied to the SD card and the cluster size was small, HTTP requests could time out while DWC attempted to get the information for those files
- Endstops 5 thru 9 on a DueX2/DueX5 board can now be used for simple filament sensors
- When resuming a paused print the first move executed was sometimes incorrect
- When the Duet WiFi was configured to run in access point mode, sometimes it wouldn't start in config.g or started with the wrong SSID and had to be started manually. This is believed fixed, but you may need to start it manually the first time.
- When the M207 Z hop setting was changed during a print while a travel move is in progress, at the end of the travel move the head was lowered by the new value for Z hop instead of the original value
- Endstop pins 5-9 (E2-E6) on the expansion connector are now working
- If neither of the /www/reprap.htm and /www/html404.htm files was present when the web server as asked to fetch a file, it returned a 404 error, however there was no associated plain text response so most browsers displayed a blank screen (fixed in Duet WiFi/Ethernet build only)
- If a G0 or G1 command resulted in no movement (e.g. because it was a duplicate of a previous line) then correct synchronisation between subsequent movement and non-movement commands was lost
- When a simulated print ends or is cancelled, stop.g, sleep.g and cancel.g are no longer run
- Fixed a 1-step error in the commanded extrusion amount that the filament sensor compares with the measured extrusion
- Filament monitors are now disabled when simulating a print
- Fixed step number calculation bug that caused benign step error reports with some values of pressure advance
- Fixed a lookahead bug that caused occasional step errors. Print quality and speed may have been affected.
- If no temperature sensor is configured for a heater. M305 Pn with no other parameters no longer allocates a thermistor
- Fixed "listen failed" error after repeated use of FTP
- Fixed M304
- Fixed crash when an attempt was made to configure a filament monitor on a DueX endstop input
- Fixed jerky curves when pressure advance is used and the slicer doesn't command a uniform extrusion rate
- Fixed missing newline at end of "Done printing file" message (for Pronterface)
- M350 Enn with only 1 extruder value specified is now applied to all extruder drives

Version 1.20
===============
Upgrade notes:
- Recommended DuetWiFiServer.bin version is 1.20
- Recommended DuetWebControl version is 1.20RC3. until version 1.20 is available
- Windows device driver versoin 1.19 remains compatible with this release
- If you have a SCARA printer with nonzero crosstalk parameters (C parameters in the M669 command), you may need to adjust the crosstalk values
- If you are using a Duet to control a RepRapPro Ormerod, Huxley Duo or Mendel 3 printer or any other printer that uses the Z probe to do X homing, you need to remove the X parameter from the existing M574 command in config,g and add line M574 X1 S2.
- If you are using a Duet 06 or 085 and you don't already set the P parameter in your G31 command, add P400 to that command to get the same behaviour as before, because the default is now 500.
- If you are using PT100 sensors, make sure you don't have any additional parameters in your M305 commands for those heaters left over from when you were using thermistors. In particular, the R parameter now configures the reference resistor value on the PT100 interface board, and must be omitted or set to 400 when using the Duet3D PT100 daughter board.
- The parameters to the M911 command (which configures power fail handling) have changed since version 1.19.2. If you use this command in config.g you will have to change it accordingly.
- On a Duet WiFi, if your M552 command in config.g includes a P parameter with an IP address (which was previously ignored), you will need to remove them
- If you currently have G31 parameters for your active Z probe in config-override.g that are different from the ones in config.g, you should copy them to config.g, otherwise they will be lost next time you run M500.
- The 'set output on extrude' function (M571) no longer defaults to FAN0 output. If you use this feature, you must define the output pin explicitly using the P parameter at least once.
- If you are using external drivers and you are not already using the M569 T parameter to extend the minimum step pulse width and interval for them, then you may need to add the T parameter, because efficiency improvements have reduced the minimum width and interval.
- If you are upgrading from a firmware version prior to 1.19, see also the upgrade notes for firmware 1.19.

Known issues:
- If you have a Duet3D beta filament monitor configured and you run a print in simulation mode, the filament monitor keeps reporting insufficient extrusion and pausing the print. This issue is also present in earlier releases.

New features - kinematics and motion:
- Added CoreXYUV kinematics, see M669 command
- Added Hangprinter kinematics (not tested yet), see M669 command
- Added Polar kinematics (not tested yet), see M669 command
- SCARA kinematics crosstalk parameters now relate the movement units, not the number of motor steps
- On SCARA printers, arm position limits are applied as well as XY size limits
- SCARA arm mode changes are now only permitted in uncoordinated (G0) moves
- SCARA printers can now use the manual bed levelling assistant
- SCARA prints are simulated without segmentation so that the simulation runs much faster. In tests, the difference in the simulation time with/without segmentation was negligible.
- When using a segmented kinematics such as SCARA, or when long moves are segmented due to mesh bed compensation, segmented moves can be paused between segments
- M584 can now be used to create additional axes using any of the letters UVWABC in any order
- The start and end speeds of short segmented moves in accelerating or decelerating sequences are more closely matched where possible, which should give smoother motion
- XY speed limiting is now done separately for each kinematics, in particular for CoreXY printers it is more accurate

New features - heating and temperature measurement:
- PT1000 sensors connected to thermistor inputs are now supported
- Heater fault timeout to cancelling print is now configurable (M570 S parameter, in minutes)
- Multiple bed and chamber heaters are supported on the Duet WiFi/Ethernet
- M307 now accepts an F parameter to allow the PWM frequency to be set
- M562 with no parameters now clears all heater faults
- M109 and M104 commands now set both the active and the standby temperatures of the tool.
- M109 now only selects a tool if no tool was selected
- Duet WiFi and Duet Ethernet: Extruder heater PWM values are now compensated for supply voltage
- When a heater fault occurs, the print is now paused and all heaters are turned off except bed and chamber heaters. After a timeout period, the print is cancelled, all remaining heaters are turned off, and the firmware attempts to turn the power off as if M81 had been received.
- Heater 0 values are sent to to PanelDue even if there is no heated bed
- The value of the reference resistor on MAX31865 PT100 interface boards can now be configured (thanks bpaczkowski)
- 3-wire PT100 sensors are now supported (thanks zlowred)
- The calculation of PID parameters from the heater model has been changed to provide faster heating and less risk of undershoot
- Added support for DHT11, DHT21 and DHT22 temperature/humidity sensors (thanks chrishamm)
- Increased ADC oversample bits to 2
- When tuning a heater, any previous maximum PWM value that was set is now ignored
- The thermocouple type letter in the M305 command to configure a MAX31856-based thermocouple adapter may now be in lower case
- M408 S1/2/3 responses now include dummy values for the bed heater if there is no bed heater
- The change to fast PID parameters is now made when the temperature is within 3C of the target instead of when within 1C

New features - GCode interpreter:
- The maximum length of GCode commands has been increased, in particular to allow long passwords in M587 commands
- T R1 activates the tool that was active at the last pause
- A line of GCode may now contain multiple G- and M-commands. The commands are executed sequentially. A command that takes an un-quoted string parameter must be the last command on the line. A T command must be on a line by itself.
- String parameters (e.g. filenames) can optionally be enclosed in double quote characters, in all GCode commands for which double quote characters are not compulsory
- When a T command is sent and the current tool does not change, the firmware now makes sure that the tool heaters are turned on, in case they had been turned off explicitly e.g. due to upgrading WiFi firmware
- When executing macros, non-movement commands are now synchronised to movement commands even if they are not normally synchronised for that GCode command source
- M574 command has new options S2 to select the Z probe and S3 to select motor load detection, in place of using an endstop switch
- The M81 command now accepts an optional S1 parameter, which defers the power down until al thermostatic fans have stopped
- Added M122 P1 command for use in the Duet test procedure
- M122 now includes the minimum and maximum StallGuard registers for each driver seen since the last M122 command
- M558 now supports new Z probe types 7 (switch connected to Z endstop) and 8 (as type 5 without any filtering, for faster response)
- Added M915 to configure motor load monitoring, see https://duet3d.com/wiki/Stall_detection_and_sensorless_homing.
- All error messages relating to incorrect use of a G- or M-code now include the G- or M-number of the command that caused them
- Added support for M3, M4, M5 and M450-M453
- Added protection against a dud command line containing letter M being interpreted as a M0 command
- M572 command now allows multiple colon-separate D values

New features - networking:
- Added deleteexisting=yes option in http move command
- The FTP responder now supports the "CWD ." command
- Tool offsets and fan mapping are now passed to DWC
- M587 now checks that the password is either empty or is at least 8 characters long
- Duet WiFi only: M587 and M589 without parameters now report the IP addresses etc. as well as the SSID (needs DuetWiFiServer 1.20)
- The parameters in rr_ http commands are now all order-independent
- Duet WiFi: M122 diagnostics now include the wifi module sleep mode and additional network diagnostics
- On the Duet WiFi the M552 command takes an optional SSID parameter, allowing you to connect to a specified SSID even if it is hidden

New features - other:
- Loss of power is now handled much faster. The print is paused in the middle of a move if necessary. The M911 parameters are changed to facilitate this.
- Following a power failure, M916 can now be used to resume the print instead of using M98 Presurrect.g
- A resurrect.g file is now created any time the print is paused. This allows for planned power down and resume.
- Added event logging, controlled by the M929 command
- More free memory is available, especially in the Duet 0.6/0.8.5 build
- The software reset data now records the date/time of the reset if known and a longer stack trace
- SD card detection is now working properly (Duet WiFi/Ethernet only)
- A file that is open on the SD card can no longer be deleted
- DuetWiFi/Duet Ethernet: the secondary hardware watchdog is now enabled and generates an interrupt, so that if interrupts are enabled at the time then a crash dump can be saved. If this fails then the primary watchdog will reset the processor as before.
- The filament monitor always updates calibration accumulators during a print even if not in calibration mode
- New debugging module 14 added to report debugging message from the WiFi module to USB. Use M111 S1 P14 to activate it. Needs DuetWiFiServer 1.20.
- You can now disable monitoring of TMC2660 drivers that are not in use by using parameter R-1 in the corresponding M569 command
- The M585 (probe tool) command is now implemented (thanks chrishamm)
- If axis lengths are adjusted by probing, a subsequent M500 command saves them in config-override.g
- If tool offsets are adjusted by probing, a subsequent M500 command saves them in config-override.g 
- The layer counting mechanism has been modified to better handle GCode files that use a different layer height when printing support
- Debug messages sent to the USB port are truncated or thrown away if a software watchdog reset is imminent
- The TMC2660 drivers are configured to detect short-to-ground conditions faster
- The grid defined by M557 is now stored separately from the grid loaded by G29 S1 so that they don't overwrite each other
- The commands to resume printing that are written to resurrect.g now move the head to 2mm above the printing height, then sideways, then down
- When M591 and G32 are used to produce manual bed levelling adjustments, the first screw defined in the M671 command is left alone. Previously the screw needing the smallest correction was left alone.
- When doing a firmware upgrade, the message sent to the USB port now warns that the USB will be disconnected

Bug fixes:
- M107 now turns off the mapped fan
- Fixed move timing when a long slow printing move follows a faster printing move
- If a file being printed executed a macro right at the start, DWC could assume that the print had already finished (thanks chrishamm)
- M109 commands could cause unwanted head movement when no tool change was required
- If a filament error occurred more than once, the print would be paused each time but a message box would only be displayed the first time 
- If a new request arrived but no responder was available, there was no timeout waiting for a responder (thanks chrishamm)
- Z probe types 5 and 8 didn't work on Duet 085
- Fixed issues caused by insufficient RAM (stack running into heap) by freeing up additional RAM in the movement structures
- M201/203/208/566 commands now allow parameters for invisible axes to be set
- If a M584 command does not include the P parameter, the number of visible axes is only set to the number of total axes if new axes are created in the command
- Semicolons inside quoted strings were still stripped out from some gcode sources
- Giving silly numbers of microsteps in M350 messed up the steps/mm
- High microstepping and high acceleration on deltas led to poor timing in deceleration phase and high MaxReps
- The commands in tool change macro files were sometimes not fully executed before the next action
- Speed limits in CoreXYU kinematics were not correct for the U axis
- Workaround for SX1509B chip problem: if an analog write was performed to a pin on an SX1509B device, subsequent digital writes and pinMode calls didn't work
- When a print was resumed after power failure, the amount of extrusion during the initial partial move was incorrect
- The determination of whether a print is in the process of pausing did not take account of all possible gcode sources
- M0 and M1 commands no longer turn off heaters and drives when in simulation mode
- SCARA printer homing didn't take account of the crosstalk parameters
- M589 with an S parameter now flags an error if there is no I (IP address) parameter
- When resuming a print, the initial feed rate wasn't being passed to the SD card GCode source
- Configuring MAX31856 thermocouple boards sometimes resulted in strange behaviour because of a buffer overflow
- The code to detect M122 early also recognised commands of the form Mxxx122 where xxx were non-numeric
- An error in computing the time taken to execute moves that were not yet frozen caused the first movement on a SCARA printer following homing to be jerky
- An extra space in the output from the M114 command confused Pronterface, causing it to print exception messages
- An error in the motion planning system that could lead to a null pointer dereference has been fixed. It is not known what symptoms (if any) were associated with this bug.
- If a Duet3D filament sensor was connected and configured but flashing an error code instead of sending filament data, the error recovery code running on the Duet caused short pauses in the print
- On a delta printer if you created additional axes, when you tried to home them it ran homedelta.g instead of e.g. homeu.g
- On a delta printer with additional axes, you can now do XYZ moves as soon as the towers have been homed
- Fixed a possible race condition if the time and date were set at midnight
- The 4-leadscrew auto/4-screw manual bed levelling code didn't work properly
- The P parameter was missing from G10 commands written to resurrect.g
- Arm angle limits are now applied when converting Cartesian to SCARA coordinates
- The correction limit is no longer applied when computing manual bed levelling screw corrections
- When G29 was run on a SCARA printer, probe points could be incorrectly skipped and spurious "not reachable" messages generated
- Pullup resistors are now enabled on endstop inputs 10 and 11 on the CONN_SD connector
- Fixed duplicate error message when a gcode file is not found
- Fixed reference to homing the towers of a SCARA printer in an error message

Other changed behaviour:
- When uploading firmware to the WiFi module, the highest and lowest baud rates have been reduced to 230400 and 9600 respectively
- When uploading firmware to the WiFi module, the system parameter is cleared
- M500 no longer saves G31 parameters to config-override.g by default, but you can use M500 P31 to include them
- The default value for the P parameter in the G31 command has been changed from 400 to 500
- XYZ options have been removed from the M558 command. Use the new M574 S2 option instead.
- G31 P parameter now defaults to 500 instead of 400 on the Duet 06/085 build just as it has done in the other builds
- X homing no longer defaults to using the Z probe in the Duet 06/085 build
- M906 and M913 commands no longer wait for all movement to stop, so that M913 can be used in the power fail script

Internal changes:
- Upgraded compiler version
- Changed to use the hardware floating point ABI on the SAM4
- Simplified conditional directives that depend on the target hardware, by adding new #defines for supported features and a DUET_06_085 #define.
- Changed a path to a file in the linker command line to work around an intermittent Eclipse bug

Version 1.19.2
==============

Upgrade notes from version 1.19:
- If your printer is a SCARA then you now need to set appropriate M208 lower and upper limits for X and Y
- If you are upgrading a Duet WiFi from firmware 1.19, install DuetWiFiFirmware 1.19.2 first, and confirm that the new version is running before installing DuetWiFiServer 1.19.2
- **Important!** See also the upgrade notes for version 1.19 if you are upgrading from 1.18.2 or earlier
- Recommended DuetWebControl version is 1.19
- Recommended DuetWiFiServer version is 1.19.2

New and changed features:
- M37 P parameter is supported. If you send M37 P"file.g" then printing file.g will be simulated and the expected print time reported.
- The bed adjusting wizard now leaves one of the screws alone when suggesting corrections
- The machine name and the password in the M550 and M551 commands may now be quoted, optionally
- If M104 T# is used and tool # is currently in standby, then its standby temperature will be set as well as its active temperature
- SCARA kinematic calculations have been speeded up
- SCARA segments/second now defaults to 100
- SCARA printers now apply the M208 axis limits to X and Y as well as to other axes. Minimum and maximum radius limits are still applied too.
- SCARA M669 S and T parameters can be changed on the fly, i.e. re-homing is no longer required when they are changed
- Minimum limits are applied to the parameters of M92, M201 and M203 commands to avoid firmware crashes if bad values are supplied
- In conjunction with DuetWiFiServer 1.19.2, if connection to the access point is lost and the automatic reconnection attempt fails, the WiFi module will attempt a manual reconnect. Reconnection attempts are reported to PanelDue and to USB, and the reconnect count is included in the M122 report.
- Jerk is no longer applied to the boundaries between travel moves and printing moves

Bug fixes:
- Incorrect, very large height errors were sometimes shown in the G29 height map when the number of probe points used approached the maximum supported
- M669 was supposed to report the current kinematics, but didn't except for SCARA printers
- SCARA kinematics didn't apply limits to the Z axis or to any additional axes. Delta printers didn't apply limits to any additional axes.
- SCARA forward kinematics were wrong
- SCARA minimum radius limit was wrong
- If the number of commands in the deferred command queue exceeded 8, commands could be lost
- If a G1 command was used with a coordinate for an axis that X or Y was mapped, that coordinate was ignored unless the S1 or S2 command modifier was used. This affected tool change files on IDEX machines.
- If a reset was forced by the software watchdog because it got stuck in a spin loop, the reset reason in M122 was displayed as 'User'
- The progress bar on PanelDue and the estimated end time based on filament usage were slightly ahead of the true values, especially for small gcode files
- If a move had a tiny amount of XY movement and a much larger amount of extrusion, an extrusion speed in excess of the extruder speed limit set in M203 might be used. This could also be triggered if a move that was too short to need any steps was followed by a pure extrusion move.

Version 1.19
============

Upgrade notes from version 1.18.2:
- Recommended DuetWebControl version is 1.19
- Recommended DuetWiFiServer version is 1.19
- **Important!** If you use an IR Z probe or some other type that does not need to be deployed, delete the files sys/deployprobe and sys/retractprobe.g if they exist, because they are now called automatically. You can do this in the System Files Editor of the web interface.
- **Important!** On a CoreXY machine, if upgrading from a version prior to 1.19beta9, you need to reverse the Y motor direction in the M569 command. Similarly for CoreXYU machines.
- **Important!**  When upgrading a Duet WiFi from 1.18.2 or earlier firmware, see the important notes at https://duet3d.com/wiki/Upgrading_to_DuetWiFiFirmware_1.19.
- Height map files created with firmware 1.18 or earlier cannot be read by firmware 1.19, so you will need to run G29 S0 again to generate a new heightmap.csv file
- Height map filenames in G29, M374 and M375 commands must now be enclosed in double quotes
- Every heater that you use must now be configured using a M305 command with a P parameter that identifies the heater. Previously, if a heater used default thermistor parameters, you could omit the M305 command for that heater.
- If you are using a Duet Ethernet and you are letting your router allocate an IP address automatically, the IP address will change, because the default MAC address now depends on the board unique ID
- If you have more than 32 probe points in your bed.g file, you will have to reduce the number to 32
- If you send a G1 command with multiple E parameters (e.g. G1 X10 Y20 E1.0:1.5:2.0) then this is now only allowed when in relative extrusion mode (M83). If you try doing this in absolute extrusion mode, no extrusion will take place and an error message will be generated.
- The behaviour of the R parameter in G1 commands has changed. Previously, G1 R1 with no additional parameters restored the head position for all axes to the values just prior to the last pause command, and G1 R2 with no additional parameters restored the head position for all axes to the values just prior to the last tool change. The behaviour now is that only axes that are mentioned in the G1 command have their values restored. So instead of using G1 R1 in resume.g to restore the head position, you must now use G1 R1 X0 Y0 Z0. As before, any non-zero axis parameters will be added to the saved position of that axis. This change has been made so that additional axes used as substitute X and Y axis are not automatically restored.

Known issues:
- Although the WiFi module can now be put into access point mode using M589 and M552 S1, WiFi access does not work properly in access point mode.
- When a power fail occurs and power fail action has been configured, the firmware has to wait for some or all moves in the print queue to complete before the powerfail.g command can be run. This means that you may run out of power before powerfail.g is run, which could result in a few moves being skipped and the nozzle becoming stuck to the print.

New features since 1.18.2:
- Resume-after-power-failure support on Duet WiFi/Ethernet. See https://duet3d.com/wiki/Setting_up_to_resume_a_print_after_a_power_failure.
- Bed levelling using multiple independent Z motors (M671). See https://duet3d.com/wiki/Bed_levelling_using_multiple_independent_Z_motors. In Cartesian/CoreXY printers without multiple independent Z motors, this facility can be used to determine what adjustments to make to bed leveling screws instead.
- Support 2 additional external drivers connected to the CONN_LCD socket
- FTP and Telnet are now supported on the Duet WiFi but are disabled by default. Use M586 to enable them.
- Added support for M591 command to configure filament sensors (but filament sensor support still incomplete)
- Added support for M672 command to program the Duet3D delta effector sensitivity
- SCARA kinematics is believed to be fully working
- Added support for binary file upload in M559 and M560
- Added support for an additional SX1509B port expander
- Pause commands issued while a macro is being executed are deferred until the macro has completed, and they can be resumed
- M568 command to enable/disable mixing no longer does anything because mixing is always enabled. Mixing is not used if the E parameter in the G1 command has multiple values.
- Message boxes can now have other axis jog buttons as well as Z (thanks chrishamm)
- Probe deployment and retraction for G30 and G29 commands is now handled automatically. You should still include a M401 command before the first G30 command in bed.g and a M402 command after the last one, so that the probe deploys and retracts once for the entire sequence instead of once per G30 command.
- M577 now allows separate X and Y spacings, use Sxxx:yyy
- Volumetric extrusion is now supported (M200)
- Additional tool/heater data is provided to DWC (thanks chrishamm). Using Heater 0 as a tool heater should now work.
- The '(' character in a gcode file now introduces a comment, just as the ';' character does. The comment is terminated at end-of-line. This is not the same as in some CNC gcodes, where a comment introduced by '(' is terminated by ')'.
- Heater tuning peak detection algorithm changed. This may fix some "no peak detected" reports during auto tuning.
- The heater dead time is how taken as 60% of the peak delay time intead of 100%, which results in more aggressive PID parameters.
- TEMPERATURE_CLOSE_ENOUGH reduced from 2.5C to 1.0C
- Reduced the maximum number of random probe points on Duet WiFi/Ethernet to 32 to avoid running out of memory during delta auto calibration
- DriveMovement structures are now allocated dynamically from a freelist, to allow more moves to be queued in typical cases. The number free and minimum ever free is included in the M122 report.
- If the G10 command is used to set the standby temperature of a tool that is on standby, the live temperature is adjusted accordingly
- SCARA parameters configured using M669 now include X and Y bed origin offsets
- Baby stepping is no longer cleared when you home the printer or probe the bed
- The Y axis can now be mapped in a similar way to the X axis
- The meaning of the first M669 crosstalk parameter for a SCARA printer has changed. A zero value now means that the proximal motor does not affect the proximal-to-distal arm angle.
- The CoreXY kinematics calculations have been changed to conform to the way they are defined in other firmwares and at CoreXY.com. See the important upgrade notes. The CoreXZ and CoreXYU kinematics have been changed similarly.
- The maximum allowed target temperature for auto tuning now depends on the configured maximum temperature for that heater
- The heater gain that provokes a warning when setting heater model parameters with M307 or after auto tuning now depends on the configured maximum temperature for that heater
- If a PT100 interface reports an error when executing a M105 command with X parameter, the firmware now reports the nature of the error if possible
- When M305 is used with an X parameter to select a PT100 sensor, a new optional F parameter configures rejection of 50Hz (F50) or 60Hz (F60) interference
- Added support for prototype thermocouple adapter for type J etc. thermocouples (temperature sensor channels 150 to 157)
- M408 S0 response now includes message box details for PanelDue (needs new PanelDue firmware)
- M105 temperature reports are now in tool heater order instead of heater order
- M105 temperature reports now report the setpoint temperatures as well as the current temperatures, to keep Repetier Host happy
- Adjustment of head position to account for a changed tool offset is now deferred until the next move that includes axis movement, instead of the next move of any sort
- When grid probing, if a point cannot be reached by the Z probe, a message is emitted
- Command and parameter letters in gcode commands are now case-insensitive as per the NIST specification
- On the Duet WiFi and Duet Ethernet up to 9 axes are now supported, named XYZUVWABC
- In height map files the mean height error and deviation from the mean are now saved to 3 decimal places instead of 2
- Z probing moves now use 250mm/sec^2 acceleration unless a lower Z acceleration limit has been configured. This is to avoid triggering nozzle-contact sensors at the start of a probing move.
- M291 command is provided to display a message box with options for timeout, acknowledgement and axis jog buttons. This will require additional changes to DWC and PanelDue before it is fully usable.
- M292 command is provided to acknowledge M291 messages
- Manual delta calibration and bed compensation is supported (use P0 in the M558 command to indicate that there is no Z probe)
- Minimum value for S parameter (maximum heater PWM) in M307 command is reduced from 20% to 1%
- Core XYU kinematics are now supported (thanks Lars)
- RADDS build now supports 9 motors (thanks Tom)
- If a homing move uses parameter S3 instead of S1 then the axis minimum or maximum value is set to the current position instead of vice versa
- M589 with no parameters now reports the Duet's own SSID
- M589 S"*" now deletes the Duet WiFi's own access point details
- G1 command now take an optional P parameter which is a bitmap of output ports to turn on and off for the duration of the move. The mapping of bits to ports and the port switching advance time is configured using M670.
- M42 command now supports F parameter to select the PWM frequency
- Up to 10 virtual heaters can be defined using M305 commands, numbered 100-109. Virtual heater 100 defaults to sensing the MCU temperature (sensor channel 1000), and on the Duet WiFi/Ethernet virtual heaters 101-102 default to sensing the TMC2660 temperature warning/overheat sensors on the Duet and the DueX expansion board respectively (sensor channels 1001-1002).
- Heaters can be named by adding parameter H"name" in the M305 command. The quote-marks are compulsory. The temperatures of named virtual heaters are made available to DWC for display.
- Fans can be thermostatically controlled based on the temperatures of any real or virtual heaters.
- Fans can be thermostatically controlled in proportional mode by specifying a temperature range e.g. T40:50. If you specify only one temperature, or the second temperature is not greater than the first, bang-band mode will be used as before. In proportional mode the S parameter is not used but the L value is honoured.
- Current loop temperature sensors are now supported (sensor channels 300-307). M305 parameters L and H set the temperatures corresponding to 4mA and 20mA current respectively.
- M305 with just a P parameter now reports the sensor type along with the other parameters.
- It is now possible to create additional axes that are not visible in the user interface. To do this, add parameter P# to your M584 command where # is the number of axes you want to be visible (e.g. 3 = just X,Y,Z).
- Thermostatic fans now have a 1C hysteresis to reduce the effects of noise
- M204 S parameter is supported for backwards compatibility e.g. with Cura
- Some other exceptions now record a stack trace, as Hard Fault exceptions already did
- M122 now displays additional information: firmware name and version, hardware type, last software reset reason, unique board ID if available, and filament sensor status
- On the Duet Ethernet, the default MAC address is generated from the board ID
- The pause.g, resume.g and cancel.g files are not run unless all axes have been homed.
- The default maximum hot end temperature has been increased to 288C
- String parameters in some gcode commands, such as filenames, can now be enclosed in double quotation marks to avoid ambiguity
- When tuning a bed or chamber heater, more time is allowed for the temperature to start rising
- On the Duet WiFi the network code has been rewritten. The web server now runs on the Duet instead of on the WiFi module. FTP and Telnet are supported if enabled using M586. New commands M587, M588 and M589 are supported. The meaning of the M552 S parameter has changed: S-1 holds the WiFi module in the reset state, S0 holds it in the Idle state allowing it to process M587/M588/M589 commands, S1 starts it in client mode and S2 starts it in access point mode. The M122 diagnostic report includes WiFi module parameters unless the WiFi module is being held in the reset state.
- Added support for simple switch-based filament sensors and the Duet3D filament sensor.

Bug fixes:
- XYZ coordinates could be reported as NaN in DWC status responses, causing AJAX errors
- Axis compensation now takes account of X and Y axis mapping
- Messages rejected by webserver now generate a generic message only if debug is enabled
- Heater 0 output can now be used for general output after its model is disabled
- Fixed issue with homing axes using endstop connectors on DueXn expansion board
- M669 with no parameters now reports the bed offset on a SCARA machine as well as the other parameters
- Heater model max PWM is now set to tuning PWM after auto tuning (thanks cangelis)
- If an HTML file uploaded over USB contained an embedded leading substring of the EOF string, incorrect data was written to file (thanks cangelis)
- G2 and G3 arc movement commands didn't work when the X axis was mapped
- On a SCARA machine, sending G92 X0 Y0 caused the Duet to return position data containing NaNs to Duet Web Control, which caused it to disconnect
- When an extruding move had a lot more acceleration than deceleration, too many extruder steps were scheduled. A check threw the additional steps away so that printing was not affected, but a step error was logged.
- Except when delta kinematics were being used, speeds and accelerations were limited independently for the X and Y axes. This is correct for Cartesian printers, but not for CoreXY, Scara etc. The speed and acceleration of XY movement is now always limited to the lower of the specified maximum X and Y speed and acceleration unless Cartesian kinematics are being used.
- When a print was paused and resumed, it didn't always resume at the correct move
- When G92 or M374 was used to save a height map using the default filename, sometimes it would save to a random filename instead
- When G92 S1 or M375 was used to load a height map using the default filename, sometimes it would fail to load
- When the current tool offsets change because of a tool change or a G10 command, the new offsets are applied to the endpoint of the next move even if it has no movement along axes with changed offets
- The tool change restore point coordinates now take account of X axis mapping
- On a delta printer the nozzle height is now limited to reachable values, to avoid the motors trying to move the carriages past the physical endstops
- M552 with no parameters now reports the current IP address as well as the status
- Some Duets would restart immediately after initial power up and then run normally
- Thermostatic fans can now depend on heater numbers 100 (CPU temperature), 101 (TMC2660 drivers on Duet WiFi/Ethernet) and 102 (TMC2660 drivers on DueXn expansion board)
- MCU temperature measurement now includes an averaging filter to reduce noise
- On the Duet WiFi, when you download a file it no longer opens it in the browser but gives you a "Save file as" prompt instead.
- FTP is now working on the Duet Ethernet
- Filament consumed during tool change macros is no longer added to the total filament consumed for the purpose of estimated the percentage completion of the print

Version 1.18.2
==============

New features:
- On the Duet WiFi and Duet Ethernet, recognise the latest production DueX2 and DueX5 boards
- Support fan 8 on the latest DueX5 boards

Bug fixes:
- M42 gcode commands were not synchronised with movement
- M21 did not full reset the SD card state, which could lead to errors if the SD card was modified outside the Duet and then remounted using M21
- The M106 command accepted a fan number (P parameter) one higher than it should

Version 1.18.1
==============

Bug fixes:
- Corrected USB VID/PID

Version 1.18
============

New features:
- First official release for Duet Ethernet
- M204 is now implemented (P and T parameters only)
- M997 command now checks that the start of the main firmware file looks sensible
- The rate at which "No tool selected" and "Attempt to move before homing a delta printer" messages are generated is now limited
- Added VSSA fault detection if the hardware supports it
- If there are too many probe points implied by a M557 grid definition command, the firmware displays a suggested increased spacing
- On the wired Duets, M586 can be used to set which network protocols are supported and which port numbers are used. By default, http is enabled, ftp and telnet are disabled.
- Baby stepping is now implemented using the M290 command. The accumulated baby stepping amount is reported in M408 replies.
- Faster and easier-to-use auto tune algorithm with more consistent dead time measurement
- M109, M190 and M191 commands now send the temperatures once a second if the command came from the USB port and Marlin emulation is chosen
- The name of the firmware file to load is now passed to IAP, so that iap4e.bin can be used on both the Duet WiFi and the Duet Ethernet
- Added code queue so that fan commands etc. are synchronised to movement (thanks chrishamm)
- Added chrishamm's input buffering code (thanks chrishamm)
- Reduced the Duet WiFi VIN over-voltage detection threshold from 29.5V to 29.0V
- Live coordinates are now reported to 3 decimal places instead of 2
- When using a Z probe type other than 2, the probe output is sampled every 1ms instead of every 2ms for faster response
- PanelDue status responses continue to be sent while executing M109/116/190/191 commands
- Increased maximum permitted motor current on TMC2660 drivers to 2.4A
- Improved error messages when a M303 command has an out-of-range parameter
- We now use a USB VID/PID allocated to us instead oif Atmel's CDC example ones
- The Windows device driver now supports the Bossa Program Port, so you can now use bossac even if you don't have the Atmel or Arduino device driver for it installed

Bug fixes:
- Fixed issue with loading height map file when the number of probe points along the X axis is large
- Interpolation near the edges of the bed was incorrect when mesh bed compensation was used (thanks ChristophPech)
- On the Duet WiFi, if you sent command M122 while the machine was printing then occasionally it would stop and reset due to a watchdog timeout
- If multiple input sources sent overlapping G4 (dwell) commands, either or both of them would not be executed correctly

Other changes
- M552 no longer includes the option to set the HTTP number. Use M586 instead.
- M557 P parameter to set probing points is no longer supported. Use a bed.g file instead.
- Temperatures default to 0C instead of -273C

Known issues
- If you enable tool mixing, you should use relative extrusion only. If you use absolute extrusion, then if you pause and resume the print, the extruder is likely to extrude the wrong amount of filament in the first move after resuming.
- If you use M586 to disable FTP or Telnet on the Duet 085 or 06 after you have previously enabled them, the firmware refuses new connections but does not terminate any existing connections.
- FTP on the Duet Ethernet cannot be used to do file transfers

Upgrade notes
- If you connect via USB from a Windows PC you should install the updated device driver in the Drivers folder of this repository
- If you use the M552 R parameter to change the HTTP port number on a wired Duet, you will need to use M586 instead
- If you use FTP or Telnet on a wired Duet, you will need to enable them using M586
- It is recommended that you re-run heater auto tuning when upgrading to 1.18 from an earlier release
- You may find that your Z probe trigger height is slightly higher than before, so you should re-measure it
- When upgrading to this firmware, also upgrade iap.bin or iap4e.bin to latest version

Version 1.17e
=============

Bug fixes:
- Fixed an integer divide-by-zero bug in the LWP library that could cause the Duet 0.8.5/0.6 build of RepRapFirmware to crash with a hard fault

For known issues, see version 1.17d.

Version 1.17d
=============

New features:
- G2 and G3 arc movement commands are implemented.
- If the controller is reset because of a Hard Fault exception, additional debugging information is stored in the Software Reset Data and displayed by M122
- Faster step pulse generation - now up to 180kHz simultaneously on 3 motors on the Duet WiFi
- The M102 command (generated by S3D when using firmware retraction) is ignored instead of provoking a warning message
- Firmware retraction/unretraction now defaults to 2.0/2.0 instead of 1.0/2.0 mm

Bug fixes:
- If tool mixing was used with absolute extruder coordinates, the extrusion amount was calculated incorrectly.
- Second SD card didn't work on Duet085 and RADDS builds
- The deprecated M206 command rtakes account of whether the units are mm or inches
- Also fixed bug with absolute extruder coordinates introduced in temporary versions 1.17c+1 and +2

Known issues
- If you enable tool mixing, you should use relative extrusion only. If you use absolute extrusion, then if you pause and resume the print, the extruder is likely to extrude the wrong amount of filament in the first move after resuming.

Version 1.17c
=============

New features:
- The layer height comment in gcode files produced by Matter Control is now recognised
- M101 and M103 (firmware retraction commands generated by Simplify3D) are now recognised
- G20 bed probing now prints the mean height error and RMS deviation to 3 decimal places

Bug fixes:
- G30 with no parameters now sets the machine position to the Z probe trigger height instead of the user position. This means that running G28 (home) and G29 (bed probe) alternately no longer causes the bed height map to creep up or down in average height when Z homing uses the Z probe. However, it means that the Z height displayed after a G30 command is no longer always the same as the Z probe trigger height.
- In firmware 1.17 the speed change command by the M220 command got delayed until the next G1 or G0 command with an F parameter was read.
- In firmware 1.16 and 1.17 the acceleration used in G11 un-retraction commands was sometimes incorrectly reduced if pressure advance was configured on a different extruder.
- In firmware 1.16 and 1.17 when pressure advance was configured, the extruder acceleration limit implied by pressure advance used the pressure advance value for the wrong extruder.
- Firmware retraction did not work if additional axes had been configured e.g. for an IDEX printer.
- G29 commands using the P parameter with an upper case M in the filename were recognised as M commands instead

Version 1.17b
=============

Printer status:
- New printer status "Tool change" implemented. This is recognised by DWC 1.14 and the forthcoming PanelDue firmware 1.16.
Bug fix:
- M226 (gcode-initiated pause) was hanging the printer (thanks chrishamm for the fix)
Z probe:
- For Z probe types 4 and higher, the MOD signal on the Z probe connector is driven high at the start of a probing move and low at the end. This is to help with certain types of Z probe, in particular accelerometer-based Z probes.
Other:
- Upgraded DWC files to 1.14 release (thanks chrishamm)

For upgrade notes, see version 1.17.

Version 1.17a
=============

Homing speeds:
- The speed factor (M220 command, or speed control in DWC and PanelDue) no longer affects the speed of homing moves or other special moves (i.e. G1 commands with S1 or S2 parameter)

Bug fixes:
- Fixed the M120 (Push) command
- Setting relative extruder movement (M83) or a feed rate (G1 Fxxx) in config.g now works again
- The F (feed rate) parameter is now processed correctly on a G1 command with the R parameter
- If you used M106 to change a fan PWM frequency, the change did not take place until you next changed the speed
- On boards with SAM3X processors, due to a chip bug the fan speed was sometimes incorrect if you changed the PWM frequency
- If an http client requested a non-existent file that was not an HTML file, the server incorrectly returned a 404 HTML page

For upgrade notes, see version 1.17.

Version 1.17
============

Implemented grid bed compensation:
- M557 defines the grid
- G29 probes the grid, and saves the height map to file and activates it
- G29 S1 loads and activates a height map
- G29 S2 clears the height map (so does M561)
- M374 also saves the height map, and M375 loads a height map
- M376 sets the compensation taper height
- Long moves are segmented when grid compensation is in use so as to follow the contours of the bed
- Duet Web Control 1.14 can display the height map graphically (thanks chrishamm)

Changes to information extraction from gcode files:
- Recognise generated-with comment written by newer versions of Cura
- Recognise filament usage info in kisslicer-generated gcode files (thanks chrishamm)

 M500, M501 and M502 now use config_override.g instead of flash memory. The parameters saved and restored are:
- M307 auto tune results
- PID parameters, if you used M301 to override the auto tune PID settings
- Delta printer M665 and M666 settings
- G31 trigger height, trigger value and X and Y offsets
- The M501 auto save option has been removed

 Duet 0.8.5/0.6 web server changes:
- Support gzipped files, and look for gzipped versions of files before looking for regular ones

 Changes to Z probe configuration and usage
- Z probe offsets are now applied during G30 probing with specified XY coordinates, including during delta auto calibration
- Z probe recovery time can be defined (R parameter in M558) and adds a delay between the travel move and the probing move
- Added T parameter to the G31 command to specify Z probe type. This allows you to view the parameters for the Z probe(s) and to set parameters for a particular Z probe type without selecting that type. G31 P or G31 P0 prints the parameters of the currently-selected Z probe.

 Changes to heater management:
- You can now specify a Steinhart-Hart C coefficient in the M305 command, for better thermistor accuracy over a wide temperature range. If you do use a non-zero C coefficient then you will need to change the B (beta) parameter as well. The B parameter should be the reciprocal of the Steinhart-Hart B coefficient.
- The thermistor disconnected detection now takes account of the thermistor parameters configured with M305. This should allow the Dyze thermistor to be used without getting so many 'thermistor disconnected' reports. You may need to use a small negative H parameter in your M305 command to make it reliable.
- M143 now takes an H parameter to specify the heater whose temperature limit you are setting. If it is not provided then heater 1 is assumed.
- M109 and M190 commands now support both R and S parameters in the same way as Marlin. If you specify temperature using the S parameter, the firmware will wait for the heater to heat up but not to cool down. If you specify temperature using the R parameter, the firmware will wait both when heating up and when cooling down.
- M104 and M109 default to tool 0 if no tool is selected and no T parameter provided
- M109 now selects the tool after setting the active temperature if it was not already selected
- M191 (set chamber temperature and wait) is now supported, with both R and S parameters as for M190. However you may wish instead to use M141 followed by M116 later to wait for all temperatures.
- Removed S and T parameters from M301 command. Use the M307 command instead.
- M301 with negative P parameter no longer sets bang-bang mode. Use M307 instead.
- Increased the default max temperature excursion to 15C
- Setting the temperature of a tool heater no longer sets the heater temperature unless the tool is currently selected or no tool is selected

Changes to M571 command:
- M571 now accepts a P parameter to select the output pin
- Added F parameter to M571 command to set PWM frequency

Bug fixes:
- Firmware retraction with Z hop now works when using 'retract on layer change' in slic3r
- Fixed bad JSON message during printing when there were no active extruders
- Software reset code storage/retrieval now works on Duet WiFi
- Fixed reset reason text because on the Duet WiFi a watchdog reset can look like an external reset
- Fix for adjusting the mix ratio during printing when using absolute extruder coordinates with mixing extruders, except for pause/resume
- Workaround for DWC 1.13 including a volume ID in the new file path when renaming files across directories
- Bug fix: M300 now causes a beep on PanelDue again (was broken in 1.16).
- Bug fix: when a move was aborted, the head position was incorrectly calculated if the move has a direction reversal scheduled later on. In practice this situation did not arise.

Miscellaneous changes:
- Multiple commands from different sources that do not interfere are executed concurrently. Previously, only a few status reporting commands could be executed concurrently with other commands. 
- If the M569 command is used with the 'R' parameter to set the enable polarity then the corresponding driver is disabled after the polarity is set.
- Experimental code has been added to log Z probe transitions during a move, for use when calibrating nozzle offsets.
- Removed the undocumented M201 max average printing acceleration parameter
- Added exception handlers and store a software reset code when an exception occurs
- Removed Duet WiFi prototype 1 build configuration and added RADDS build configuration
- Tool offset is no longer applied to G1 moves with S1 or S2 modifiers
- A 2nd controlled fan using an external mosfet driven by expansion connector pin 25 on a Duet 0.6 is no longer inverted

Upgrade notes for 1.17 - VERY IMPORTANT TO AVOID DAMAGE!!!
----------------------------------------------------------
- On the Duet 0.6 and 0.85 the default direction for the X motor is now forward (as it is for all other motors and on the Duet WiFi). If you do not have a M569 P0 command in your config.g file then you will need to add M569 P0 S0 in order to keep the previous behaviour.
- On the Duet 0.6 and 0.85 the default bed thermistor resistance at 25C is now 100K (as it is for the Duet WiFi). If you have an Ormerod, Huxley Duo or RepRapPro Mendel printer with a 10K bed thermistor, you will need to add parameter T10000 to the M305 P0 command in config.g if you don't have that already.
- On the Duet 0.6 and 0.85 the default hot end heater thermistor parameters are changed to match the Semitec thermistor used in the E3DV6 and other popular hot ends. If you have a printer built from a kit supplied by RepRapPro then you should use the following parameters in your M305 P1 command to restore the previous behaviour: B4138 C0
- The default bed temperature limit is 125C. Use M143 H0 S### if you need to increase it.
- If your printer has multiple hot end heaters and you use the M143 command to change the temperature limit, you will need to use one M143 command with an appropriate H parameter for each heater.
- If you limit the maximum heater PWM using the S parameter in a M301 command, you will now have to use M307 to do this instead. Similarly the M307 A parameter takes the place of the M301 T parameter (divide the T parameter by 255 and take the reciprocal to get the A parameter).
- On the Duet 0.8.5 any parameters you saved to flash memory will be lost when upgrading to RC1 or later.
- You will need to add M501 in your config.g file, at the end or just before the T0 command if you have one, if you want to load saved values automatically at startup.
- If you use auto delta calibration and you have Z probe X and/or Y offsets defined, you should adjust your probe points to allow for the fact that the firmware will now place the probe over the points you specify instead of the nozzle
- If your pause.g and resume.g contain any extruder movement commands to retract or prime filament, make sure these files have the M83 command at the start to select relative extruder coordinates
- The recommended web interface is Duet Web Control 1.14. To use DWC 1.14 on the Duet WiFi, you must be using version 1.02 or later of DuetWiFiServer. Version 1.03-ch is recommended.

Known issues for 1.17
---------------------
- The M120 (Push) command doesn't work in macro or gcode files, because it causes execution of the file to be terminated
- Setting relative extruder movement (M83) or a feed rate (G1 Fxxx) in config.g has no effect once config.g has completed
- The F (feed rate) parameter is not processed correctly on a G1 command with the R parameter. In the resume.g file, you can use a G1 Fxxx command to set the feed rate, then leave the F parameter off the G1 R1 command.
- If you enable tool mixing, you should use relative extrusion only. If you use absolute extrusion, then if you pause and resume the print, the extruder is likely to extrude the wrong amount of filament in the first move after resuming.
- Firmware retraction won't work properly if you have created additional axes, for example the U axis on an IDEX machine.

Version 1.16
============

- Support the DueX2 and DueX5 expansion boards for the Duet WiFi
- Add support for up to 3 additional axes U, V and W. The number of axes is reported to DWC and to PanelDue.
- Add support for X axis remapping in the M563 tool creation command
- Add support for default fan remapping in the M563 tool creation command
- Support dual material prints and dual simultaneous prints on IDEX (independent dual X carriage) printers. See [https://duet3d.com/wiki/Configuring_multiple_independent_X-carriages_on_a_Cartesian_printer].
- Support minimum fan speeds and fan PWM blipping when starting fans from standstill
- Files uploaded to SD card are now time-stamped (thanks chrishamm)
- Sending M307 A-1 C-1 D-1 disables the PID for a heater channel, allowing its pin and driver to be used for other purposes
- Sending M106 P# I-1 disables the specified fan so that its control pin can be used as for general purpose output (M42) or a servo (M280). Caution: the polarity may not be what you expect.
- Changed M42 pin numbering, see [https://duet3d.com/wiki/Using_servos_and_controlling_unused_I/O_pins]
- Added M280 servo support, see [https://duet3d.com/wiki/Using_servos_and_controlling_unused_I/O_pins]
- Allow separate firmware un-retract speed to be configured in M207
- Allow negative extra un-retraction in M207
- Support expansion connector pin PB6 on the Duet WiFi and use it by default for a cooling fan tacho input
- Added Z probe type 6 (switch on E1 endstop connector)
- Added optional I1 parameter to the M558 command to reverse the sense of the Z probe reading. This replaces M574 E0 S0 when using Z probe type 4 and also works with other types of Z probe.
- Support heater 6 on Duet 0.8.5 (untested and probably incomplete). You need to send a M307 H6 command with valid model parameters to enable heater 6, and Fan 1 will be disabled (they share the same control signal).
- On the Duet 0.8.5, Fan 1 no longer defaults to thermostatic but instead defaults to fully on. This is in case you have heater 6 connected.
- Sending a T command to select a tool no longer runs the tool change macros if the specified tool is already selected
- M122 command now includes the status of all TMC2660 drivers on the Duet WiFi and expansion boards
- Bug fix: if there were very many files in the /gcodes folder of the SD card then DWC would give and Ajax error when trying to load the files list (thanks chrishamm)

Upgrade notes:

- If you are using M42 then you will need to adjust the pin numbers in your M42 commands
- If you are using a type 4 Z probe (i.e. switch connected to E0 endstop input) and you are using M574 E0 S0 to invert the polarity, you will need to use the I1 parameter on the M558 command instead
- If you are using a Duet 0.8.5 and you were relying on Fan 1 being thermostatic by default, you will need to configure it yourself by adding command M106 P1 T45 H1:2:3:4:5:6 to config.g. 
- The recommended web interface is DWC 1.13
- You can use either DuetWebServer-1.03-ch or DuetWebServer-1.02 with this release. You may find that the -1.03-ch version is faster and provides a more reliable connection.

Version 1.15
============

- Implemented automatic heating model calibration and PID tuning. See [https://duet3d.com/wiki/Tuning_the_heater_temperature_control] for details and instructions.
- Implemented much better heater safety monitoring, based on a model (first-order-plus-time-delay) of each heater/sensor system, using default models if none have been configured
- Implemented M38 (thanks Chrishamm).
- Added support for an SD card socket on the SPI bus, and implemented M21/M22 to support this. This was done primarily for the Duet WiFi and has not yet been tested on the wired Duets.
- Added support for new Duet Web Control functions, in particular the sys file editor (thanks chrishamm)
- Increased the PWM resolution
- Included the status of the SD card-detect signal in the M122 response
- Further improvements to the speed of step pulse generation
- Improved motion smoothness when printing circles and complex shapes at high speed
- Bug fix: PID parameters entered using M301 had the I parameter doubled and the D parameter halved, and vice versa for PID parameters reported by M301
- Bug fix: the object height was sometimes incorrectly extracted from gcode files
- Bug fix: slicer comments in gcode files that included certain characters (e.g. '\') would give ajax errors when the file information was returned
- Bug fix (1.15e): using some nonzero values of M572 pressure advance could cause incorrect extruder movement and layer shifts
- Bug fix (1.15e): step errors were not always recorded
- Further changes specific to the Duet WiFi firmware build, see [https://www.duet3d.com/forum/thread.php?pid=1104#p1104] for details

Upgrade notes:

- You may get heating faults reported if you do not tune the heaters
- If you want to continur using tour own PID parameters instead of auto-tuning, you must double your I parameters and halve your D parameters in your M301 commands
- The recommended web interface is DWC 1.12

Version 1.14
============

- When multiple motors are due to step, generate all the step pulses simultaneously
- Added support for multiple drivers for a single axis (M584)
- Added support for extended step pulse width when using external drivers (T parameter on M569 command)
- Removed XYZE parameters from M569 (use M584 instead)
- Added M913 command (set motor % of normal current), allowing the motor current to be temporarily reduced e.g. for homing and loading filament
- Added Z probe type 5, which is a normally-closed switch or active-high 3.3V digital signal connected to the IN pin of the Z probe connector on the Duet 0.8.5 and Duet WiFi
- Duet WiFi default Z probe threshold is now 500 (the recommende dvalue for most types of Z probe)
- Duet WiFi defaults to using a low end homing switch on the X axis (Ormerod and Huxley, users take note!)

Upgrade notes:

- If you are using M569 commands to remap axes and extruders to different drives, that will no longer work. Use the new M584 command instead.
- If you use the M584 command, it should come before any M350 and M906 commands in your config.g file.

Version 1.13
============

* First firmware release for the new Duet WiFi
* Added support for M581 and M582 commands, including 'only if printing a file' condition in M581 command
* Fixed M117 for PanelDue (needs PanelDue firmware version 1.14)
* Firmware update messages are now sent to USB and PanelDue (needs PanelDue version 1.14 firmware to display them)
* M122 responses are now sent only to the comms channel that requested them
* Added gcode queue underrun counter, displayed in M122 Move diagnostic info
* SD card interface speed is included in M122 Platform diagnostic info
* Added support in M997 command to update additional firmware modules on Duet WiFi
* Corrected a possible problem with multiple incompatible gcodes being executed concurrently
* Support H parameter on M0 and M1 commands
* Treat M25 within the file being printed the same as M226
* Added additional M37 simulation modes to help identify bottlenecks
* Process M0 and M1 when in simulation mode
* When executing M0/M1 commands and no print is paused, execute stop.g/sleep.g if they exist
* Reduced interrupt latency, by not disabling all interrupts when starting a new move, to avoid losing characters sent by PanelDue
* Temporary fix for RTD temperature spikes causing failed prints
* Don't print extruder positions in M114 because they are always zero
* Allow setting of fan PWM from 50% upwards when a fan is in thermostatic mode
* Reduced default extruder heater PWM frequency to 500Hz
* Axes are flagged as not homed after using M350 to set microstepping

Upgrade notes:

The recommended web interface is DWC 1.11 for the Duet, and 1.11a-dc42 for the Duet WiFi.

Version 1.12
============

* PT100 and other RTD sensors are now supported
* When a print is paused and then cancelled, the firmware now attempts to run file sys/cancel.g. It only turns the heaters off if that file is not found.
* The file upload speed over the web interface has been increased. Those who were getting slow file upload speeds are likely to see the most benefit.
* If a chamber heater is configured, it is now exempted from the heater timeout, just like the bed heater
* Two changes have been made to improve print quality when printing at high speeds. First, enabling extruder pressure advance is less likely to result in sequences of short moves having sawtooth velocity profiles. Second, a "Maximum average printing acceleration" can now be configured (M201 P parameter). Using this to restrict average acceleration will flatten out any remaining sawtooth velocity profiles.
* The firmware now reports itself to the USB subsystem as "Duet 3D printer control electronics",instead of as an Arduino Due. A Windows driver file is provided.
* The default maximum hot end temperature is reduced to 260C.
* Bug fix: the USB interface exposed by firmware version 1.11 was not recognised by some versions of Windows on some computers, resulting in a driver installation error
* Bug fix: simulation mode (M37) did not work
* Bug fix: setting the motor current on the non-existent 9th driver on a Duet 0.6 might have undesirable side-effects

Upgrade notes:

- If you are using Windows, please install the driver at [https://github.com/dc42/RepRapFirmware/tree/dev/Driver]. This driver does not install any new binaries, it simply tells Windows to use its usbser.sys driver to communicate with a Duet. If you are using Windows 10 then you don't need to install the driver if you don't want to, but then the Duet will show up as "USB Serial Device".
- If you print with hot end temperatures above 260C then you will need to add a M143 command in config.g, for example M143 S280 will increase the temperature limit to 280C.
- The recommended web interface is DWC 1.11.