Compare commits

...

848 Commits

Author SHA1 Message Date
thinkyhead
4d41e46481 [cron] Bump distribution date (2026-02-20) 2026-02-20 00:40:56 +00:00
schnurly
58405e3901 🐛 Fix MKS TFT UI filament change resume w/ PARK_HEAD_ON_PAUSE (#28344)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
2026-02-19 15:29:24 -06:00
thinkyhead
b7a1abfa2d [cron] Bump distribution date (2026-02-19) 2026-02-19 06:29:39 +00:00
Scott Lahteine
3ec17b3bdc 🧑‍💻 Replace %lu => %" PRIu32 "
Fixes #28325
2026-02-18 19:15:28 -06:00
Scott Lahteine
f6eee956a5 Move stm_flash_drive STM32 platform 2026-02-18 19:10:52 -06:00
thinkyhead
55070498db [cron] Bump distribution date (2026-02-18) 2026-02-18 18:22:20 +00:00
Scott Lahteine
55b5971739 ♻️ Motion encapsulation (3) 2026-02-18 07:45:38 -06:00
Scott Lahteine
fed6eb36c7 Move BIQU BX STM32 platform 2026-02-16 16:46:50 -06:00
thinkyhead
2a1b3fd181 [cron] Bump distribution date (2026-02-14) 2026-02-14 12:14:21 +00:00
Andrew
a74237306f 🐛 Fix ProUI Homing FR edit, etc. (#28336) 2026-02-14 01:23:52 -06:00
narno2202
c50c71a33c ♻️ Motion encapsulation (2) (#28341)
Followup to #27866
2026-02-14 01:05:22 -06:00
thinkyhead
ab9e452d40 [cron] Bump distribution date (2026-02-11) 2026-02-11 00:48:18 +00:00
Scott Lahteine
59bcaca96b ♻️ Motion encapsulation (#27866) 2026-02-10 01:16:41 -06:00
ellensp
f8cc1a0b4b 🧑‍💻 Memory Map Visualizer (#28301) 2026-02-10 00:45:01 -06:00
thinkyhead
ba9606694d [cron] Bump distribution date (2026-02-10) 2026-02-10 00:49:22 +00:00
Scott Lahteine
0aded84207 📝 Update AxisEnum notes 2026-02-09 15:59:05 -06:00
ellensp
097fc30201 🐛 Fix FT Motion motion+dir for endstops (#28326)
Co-Authored-By: Scott Lahteine <thinkyhead@users.noreply.github.com>
2026-02-09 15:35:40 -06:00
Scott Lahteine
5b71e64a77 🐛 Fix endstops_trigsteps value 2026-02-09 10:56:22 -06:00
Scott Lahteine
eba2e7b669 🧑‍💻 Rename plan pos elements 2026-02-09 10:06:33 -06:00
thinkyhead
0e4d82b680 [cron] Bump distribution date (2026-02-09) 2026-02-09 00:44:53 +00:00
Scott Lahteine
bdc57af40c 🌐 Language export -l argument 2026-02-08 14:39:25 -06:00
Scott Lahteine
544f9e6104 ️ Run motion logic before UI 2026-02-08 14:39:25 -06:00
David Buezas
e524a98418 ️ Buffer Runtime for FT Motion (#28327) 2026-02-08 14:19:14 -06:00
thinkyhead
4eea9e5d7b [cron] Bump distribution date (2026-02-08) 2026-02-08 06:23:41 +00:00
Scott Lahteine
12ee7e45f1 🎨 Misc. endstop-related tweaks 2026-02-07 19:47:14 -06:00
thinkyhead
8da0d0871c [cron] Bump distribution date (2026-02-07) 2026-02-07 00:40:14 +00:00
ellensp
7f51e49b08 🩹 Fix LED menu conditions (#28304) 2026-02-05 19:52:47 -06:00
thinkyhead
20d035d78c [cron] Bump distribution date (2026-02-06) 2026-02-06 00:40:25 +00:00
Scott Lahteine
f9d6093051 🩹 Center UBL measure_business_card_thickness 2026-02-05 17:52:39 -06:00
jaysuk
6561ecfcf5 Mellow Fly E3 Pro V3 (STM32F407VG) (#26214) 2026-02-05 13:37:36 -06:00
thinkyhead
a6a5be0ad4 [cron] Bump distribution date (2026-02-03) 2026-02-03 00:56:04 +00:00
Scott Lahteine
643704e318 🩹 Show Linear Advance for FT Motion (#28306)
Followup to 5a0923ed, #21827
2026-02-02 18:40:14 -06:00
Scott Lahteine
488bd82db0 🎨 stepper.ne => stepper.nle 2026-02-02 18:36:12 -06:00
Kadin Le
3f98310004 🐛 Fix FTM Linear Advance toggle (#28311) 2026-02-02 18:07:49 -06:00
thinkyhead
6179563e0b [cron] Bump distribution date (2026-02-02) 2026-02-02 06:31:17 +00:00
Scott Lahteine
d92f2e2f20 🌐 Language Export, then Re-import (#28316) 2026-02-01 22:04:14 -06:00
Scott Lahteine
8add6b12f5 🧑‍💻 Language export – LLM translation (#28303) 2026-02-01 21:27:34 -06:00
thinkyhead
18b5301c0d [cron] Bump distribution date (2026-01-28) 2026-01-28 00:35:56 +00:00
narno2202
3f4b22fef5 🩹 Apply 'M493 C' to specified axes (#28241) 2026-01-26 23:54:50 -06:00
Chris
e4eb1b5943 🔨 Update HC32 environments (#28286) 2026-01-26 20:00:46 -06:00
thinkyhead
3ac92f243c [cron] Bump distribution date (2026-01-27) 2026-01-27 00:37:53 +00:00
Harald Wagener
384ce42a45 🐛 Fix RP2040 timer trigger, FT Motion (#28288) 2026-01-26 15:48:08 -06:00
thinkyhead
05af2a49ed [cron] Bump distribution date (2026-01-25) 2026-01-25 06:11:36 +00:00
Scott Lahteine
c8207fbc15 🔧 No SHAPING_MENU without standard shapers 2026-01-24 23:15:21 -06:00
ellensp
b1fe363f2f 🐛 Fix G28 clearance needed check (#28298)
Followup to #28275
2026-01-24 20:23:11 -06:00
thinkyhead
16913e0163 [cron] Bump distribution date (2026-01-23) 2026-01-23 06:12:24 +00:00
Vovodroid
91a91562c2 🔧 Allow FTM + Nonlinear Extrusion (#28250)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
2026-01-22 21:14:42 -06:00
ellensp
2e456cea8f 📝 Fix endif comment (#28293) 2026-01-22 21:11:54 -06:00
ellensp
981f54a78e 🩹 Fix MMU2 build (#28292)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
2026-01-22 21:10:51 -06:00
ellensp
a68f7a0426 🔧 Check for maximum NeoPixels (#28276) 2026-01-22 20:06:01 -06:00
David Buezas
99768cffbe ️ FTM: Reuse trapezoid code in other traj. generators (#28249) 2026-01-22 19:59:37 -06:00
Scott Lahteine
ae6c9c154c 🔧 Fix some ProUI builds 2026-01-22 18:59:12 -06:00
thinkyhead
5ba219a1d0 [cron] Bump distribution date (2026-01-22) 2026-01-22 18:11:11 +00:00
Andrivet
3ac64db2ae 🐛 Fix TFT LVGL UI + Y-DIR conflict (#28291)
Fixes #22967
2026-01-22 10:41:28 -06:00
thinkyhead
fc641d39b6 [cron] Bump distribution date (2026-01-21) 2026-01-21 06:13:25 +00:00
DerAndere
7c29cdb685 SOFT_FEED_HOLD (#28265) 2026-01-20 21:58:28 -06:00
thinkyhead
367e2219e3 [cron] Bump distribution date (2026-01-18) 2026-01-18 06:11:21 +00:00
Scott Lahteine
1f4445a096 🔧 Clarify REINIT_NOISY_LCD warning 2026-01-17 18:44:22 -06:00
thinkyhead
ae5ae96e62 [cron] Bump distribution date (2026-01-17) 2026-01-17 06:10:52 +00:00
Andrew
803b78f196 📝 Apply Markdown formatting (#28283) 2026-01-16 19:49:42 -06:00
Andrew
dc5fabe3a9 🔨 Update use_example_configs refs (#28285) 2026-01-16 19:43:04 -06:00
thinkyhead
1692996979 [cron] Bump distribution date (2026-01-16) 2026-01-16 06:12:22 +00:00
Scott Lahteine
3791ca788b 🔨 Drop obsolete env STM32F103CB_malyan_maple 2026-01-15 19:31:12 -06:00
Scott Lahteine
4ba13912b7 🔨 Fix build env chitu_f103_maple 2026-01-15 18:31:26 -06:00
thinkyhead
2aa4baa5f8 [cron] Bump distribution date (2026-01-15) 2026-01-15 06:12:17 +00:00
ellensp
834241dfb5 🐛 Fix ADC calculation (#28279)
Followup to 89379cd
2026-01-14 20:19:45 -06:00
thinkyhead
d897251c17 [cron] Bump distribution date (2026-01-14) 2026-01-14 00:36:29 +00:00
Scott Lahteine
e0f73f51ee 🧑‍💻 Macros *_AXIS_ANY/ALL/NONE (#28275) 2026-01-13 17:50:05 -06:00
David Buezas
a73b08eba5 🐛 Fix FTM E value overflow; 🔧 FTM_DIR_CHANGE_HOLD_* (#28277)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
2026-01-13 17:27:20 -06:00
Reimnop
2048e8b173 Permit disable REINIT_NOISY_LCD (#28273)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
2026-01-13 16:28:16 -06:00
thinkyhead
c1e01eee35 [cron] Bump distribution date (2026-01-12) 2026-01-12 00:37:14 +00:00
Scott Lahteine
3bf6b3dee9 🐛 Fix FT Motion TMC2208 shutdown (2)
Followup to #28257
2026-01-11 01:06:49 -06:00
thinkyhead
6ec2a395e1 [cron] Bump distribution date (2026-01-11) 2026-01-11 06:11:29 +00:00
Scott Lahteine
468ad6f79e 🎨 Apostrophe 2026-01-10 20:24:13 -06:00
narno2202
a5a6732508 🐛 Fix FT Motion M496 processing, etc. (#28261)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
2026-01-10 19:57:20 -06:00
David Buezas
1e457650f3 🐛 Fix FT Motion TMC2208 shutdown (#28257)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
2026-01-10 19:44:51 -06:00
thinkyhead
75f0939b44 [cron] Bump distribution date (2026-01-10) 2026-01-10 01:14:45 +00:00
narno2202
33cd1e0767 🐛 Fix, optimize FTM Resonance Test (#28266) 2026-01-09 17:30:20 -06:00
Scott Lahteine
561c409d59 🧑‍💻 Adjust CardReader conditions 2026-01-09 15:58:58 -06:00
Scott Lahteine
606b6fe64f 🌐 Wide Preheat strings 2026-01-09 15:58:58 -06:00
thinkyhead
4447c3e445 [cron] Bump distribution date (2026-01-09) 2026-01-09 00:34:57 +00:00
Scott Lahteine
e966b83bb2 🧑‍💻 Casual types casting 2026-01-08 16:40:22 -06:00
Scott Lahteine
ffa5adb077 🩹 Skip One-Click on EEPROM error (#28260)
Fixes #28095
2026-01-08 16:37:44 -06:00
Scott Lahteine
f2532ec07a 📝 README (and other .md) updates (#28272) 2026-01-08 16:27:51 -06:00
thinkyhead
bc97723e02 [cron] Bump distribution date (2026-01-08) 2026-01-08 06:12:37 +00:00
ellensp
65b62a900f 🔨 More specific preprocess exception (#28256)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
2026-01-07 22:20:53 -06:00
thinkyhead
e61469f8c1 [cron] Bump distribution date (2026-01-05) 2026-01-05 00:38:17 +00:00
ellensp
4489832bf3 AtomStack FB5 V2 board (#28242) 2026-01-04 17:52:38 -06:00
ellensp
868843fc89 🔧 Creality 4.2.5 FAN1/2 and LED pins (#28232) 2026-01-04 17:45:51 -06:00
ellensp
5cb9474a7d 🧑‍💻 Old macros cleanup (2) (#28262)
Followup to ba8b685
2026-01-04 17:42:38 -06:00
narno2202
777bc842de ️ Optimize FTM resonance test (#28263)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
2026-01-04 17:17:01 -06:00
thinkyhead
04416f8cc3 [cron] Bump distribution date (2025-12-30) 2025-12-30 12:13:53 +00:00
David Buezas
d9ed6f0e5f 🩹 Ensure safe change of XYZ smoothing (#28247) 2025-12-30 02:40:40 -06:00
thinkyhead
c45354a38c [cron] Bump distribution date (2025-12-25) 2025-12-25 00:34:04 +00:00
Scott Lahteine
3ac9068e0e 🔨 Add build_example --noxfer flag 2025-12-24 17:02:28 -06:00
Scott Lahteine
4fccfa14e9 🔨 Match build env index, skip "_xfer" in MANY loop 2025-12-24 12:25:44 -06:00
thinkyhead
d22e61a12c [cron] Bump distribution date (2025-12-23) 2025-12-23 00:34:00 +00:00
ellensp
a595c48526 🔨 Pins 'find.py' script for Windows (#28195) 2025-12-22 14:41:21 +00:00
thinkyhead
0ca11bc2f0 [cron] Bump distribution date (2025-12-22) 2025-12-22 00:36:26 +00:00
Scott Lahteine
c346b07b91 🧑‍💻 Make action to Check URLs 2025-12-21 17:45:00 -06:00
Scott Lahteine
8d54de83d3 📝 Update other dead links 2025-12-21 17:40:10 -06:00
Scott Lahteine
6d416b34f6 📝 Update SVG dead links 2025-12-21 17:40:10 -06:00
ellensp
aa889ad8d4 🌐 Update Swedish language (#28219) 2025-12-21 13:34:06 -06:00
Scott Lahteine
e08f8498d2 🔧 Update settings sections (#28240) 2025-12-21 00:42:28 -06:00
thinkyhead
f8c6ba224f [cron] Bump distribution date (2025-12-21) 2025-12-21 00:37:13 +00:00
Scott Lahteine
cc3269a50b 🩹 Use E_TERN_ macros 2025-12-19 23:42:38 -06:00
Scott Lahteine
b28ad90d0e 📝 Comments for MarlinUI, etc. 2025-12-19 20:08:38 -06:00
Scott Lahteine
c81e74b478 🩹 FT Motion : Update E index 2025-12-19 20:06:37 -06:00
thinkyhead
574332c3d3 [cron] Bump distribution date (2025-12-20) 2025-12-20 00:32:37 +00:00
David Buezas
e561058051 🐛 Fix FT Motion edit with UI (#28233)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
2025-12-19 17:33:44 -06:00
thinkyhead
a47f53b8a6 [cron] Bump distribution date (2025-12-19) 2025-12-19 00:34:07 +00:00
ellensp
1a2bb68f85 ️ RP2040 HAL Improvements (#28215) 2025-12-17 18:56:59 -06:00
thinkyhead
fc519143fe [cron] Bump distribution date (2025-12-18) 2025-12-18 00:31:10 +00:00
Scott Lahteine
5a9ce77ab3 🔧 FT Motion keep MULTISTEPPING_LIMIT 2025-12-17 15:31:04 -06:00
Scott Lahteine
47fed759b6 📝 "Hisense" thermistor 13 2025-12-16 20:24:23 -06:00
David Buezas
07565d9016 🚸 Safer FTMotion parameter editing (#28191)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
2025-12-16 20:05:55 -06:00
thinkyhead
b73ebafa0f [cron] Bump distribution date (2025-12-17) 2025-12-17 00:40:16 +00:00
David Buezas
3e6a0ab713 🐛 FT Motion fix and refine (#28220)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
2025-12-16 17:25:37 -06:00
ellensp
ec752068a5 🩹 Fix up SD card sorting (#28218)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
2025-12-16 00:10:40 -06:00
Andrew
54dfe6237c 🔨 Fix and improve schema.py (#28228) 2025-12-15 23:34:18 -06:00
Scott Lahteine
c39f32c542 🧑‍💻 More MString debugging 2025-12-15 22:19:23 -06:00
Scott Lahteine
53c27cdd66 🎨 MMU3 cleanup 2025-12-15 22:19:17 -06:00
thinkyhead
3ba633a9e2 [cron] Bump distribution date (2025-12-16) 2025-12-16 00:34:34 +00:00
narno2202
6cf98d0f82 🩹 Ensure consistent FT Motion TICKS_BITS (#28223)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
2025-12-15 04:06:08 -06:00
Scott Lahteine
9aade7f5df 🔧 Reduce code for unused shapers
Followup to #28217
2025-12-15 02:04:48 -06:00
Scott Lahteine
0952a372b6 🔨 Preflight check MOTHERBOARD (#28221) 2025-12-14 20:26:08 -06:00
thinkyhead
44948ebc1f [cron] Bump distribution date (2025-12-15) 2025-12-15 00:36:26 +00:00
Scott Lahteine
1b194088e1 🔨 Single precision float (3) 2025-12-14 15:20:29 -06:00
Scott Lahteine
f74713da0c 📝 Specify mm for NOZZLE_TO_PROBE_OFFSET 2025-12-13 20:02:38 -06:00
Scott Lahteine
575136a82a 🎨 Clean up HAL/timers 2025-12-13 20:02:34 -06:00
thinkyhead
bcece89ad0 [cron] Bump distribution date (2025-12-14) 2025-12-14 00:37:23 +00:00
Scott Lahteine
02e1199d51 🔨 Single precision float (2) 2025-12-12 19:45:18 -06:00
thinkyhead
6f653f5993 [cron] Bump distribution date (2025-12-13) 2025-12-13 00:32:35 +00:00
Scott Lahteine
89379cd373 🔨 Single precision float 2025-12-12 17:29:11 -06:00
Scott Lahteine
b99f5c3618 🔧 Group motion conditionals 2025-12-12 17:09:10 -06:00
Harald Wagener
e434fd0aef FTM_SHAPER_* options (#28217)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
2025-12-11 20:50:13 -06:00
thinkyhead
7816f5dc46 [cron] Bump distribution date (2025-12-12) 2025-12-12 00:34:09 +00:00
narno2202
f2ac2e7cad 🚸 Optimize FTM menu code, use some setters (#28170)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
2025-12-11 16:15:49 -06:00
narno2202
4cd972c3bb 🐛 FT Motion - Set moving_axis_flag for each block (#28214) 2025-12-11 15:33:35 -06:00
David Buezas
9eb82d8894 🐛 Limit FTM reset-on-threshold E pos to maintain precision (#28192) 2025-12-11 15:30:17 -06:00
thinkyhead
a889336b25 [cron] Bump distribution date (2025-12-11) 2025-12-11 00:34:17 +00:00
Harald Wagener
9c29c634b7 NO_STANDARD_MOTION (#28212)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
2025-12-10 18:09:05 -06:00
thinkyhead
6b18b1bb8a [cron] Bump distribution date (2025-12-09) 2025-12-09 06:11:47 +00:00
Scott Lahteine
0e5a4cacf8 🧑‍💻 Remove unused servo fields 2025-12-08 21:04:01 -06:00
Miguel Risco-Castillo
2cee78634c 🎨 e3v2 -> dwin (#28211) 2025-12-08 19:58:13 -06:00
thinkyhead
19d7cd1a16 [cron] Bump distribution date (2025-12-07) 2025-12-07 00:37:23 +00:00
Harald Wagener
d56fbe21fc 🩹 Fix FTM without FTM_POLYS build (#28209) 2025-12-06 13:42:52 -06:00
Scott Lahteine
d14b8e4435 🔧 Clean up TEMP_SENSOR conditionals, SKRat fix 2025-12-06 12:56:03 -06:00
Naomi Rennie-Waldock
ef2fbcd2b6 🔨 Fix configuration.py URL fetch (#28208) 2025-12-06 11:26:21 -06:00
Miguel Risco-Castillo
3551a2613d 🩹 Consistent FTM timer types (#28204)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
2025-12-06 11:01:43 -06:00
thinkyhead
1acaa6dc15 [cron] Bump distribution date (2025-12-06) 2025-12-06 00:31:28 +00:00
Scott Lahteine
f139ffed75 REMAINING_TIME_PRIME 2025-12-05 00:56:33 -06:00
Scott Lahteine
98875d424f 🚸 Show estimated remaining time 2025-12-05 00:56:33 -06:00
Scott Lahteine
a995cbef50 🧑‍💻 Seconds units 2025-12-05 00:56:33 -06:00
Scott Lahteine
5f9205ef8f 🚸 Immediate Buttons and Menu Items (2)
Followup to #28180
2025-12-05 00:56:33 -06:00
thinkyhead
54f26e61dc [cron] Bump distribution date (2025-12-05) 2025-12-05 00:33:49 +00:00
Scott Lahteine
e42059f34a 🎨 Misc. cleanup Dec 4 2025-12-04 11:57:20 -06:00
thinkyhead
e819ba832e [cron] Bump distribution date (2025-12-04) 2025-12-04 00:35:26 +00:00
Scott Lahteine
d23ac65dd4 🐛 Fix Controller Fan Soft PWM speed
Co-Authored-By: wrathernaut <97267123+wrathernaut@users.noreply.github.com>
2025-12-03 18:33:01 -06:00
Scott Lahteine
938d3db36f 🎨 PSTR() => F() 2025-12-03 18:10:40 -06:00
Scott Lahteine
4cb827b51e 🧑‍💻 Editorconfig for contributed lib-uhs3 2025-12-03 18:10:40 -06:00
Scott Lahteine
92da094c9f 🧑‍💻 Editorconfig for contributed HAL/DUE/usb 2025-12-03 16:58:27 -06:00
Scott Lahteine
09e943a10c 🧑‍💻 duration_t::remainingEstimate 2025-12-03 00:58:58 -06:00
thinkyhead
a6d8c6d5b0 [cron] Bump distribution date (2025-12-03) 2025-12-03 00:32:57 +00:00
Scott Lahteine
3ee18bc667 🧑‍💻 FT Motion accessors, G-code style 2025-12-02 16:10:58 -06:00
Scott Lahteine
291a90ace4 🩹 Trajectory FTM_POLYS followup
Followup to #28197
2025-12-02 16:10:58 -06:00
Andrew
dd02b5ff0a 🩹 Fix and clean up some stuff (#28201) 2025-12-02 15:42:25 -06:00
David Buezas
14bed5aee8 ️ FTMotion optimized timing (#28187)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
2025-12-02 15:35:54 -06:00
Scott Lahteine
0265975178 FT_MOTION > FTM_POLYS (2)
Followup to #28197
2025-12-02 15:16:44 -06:00
Scott Lahteine
61a1c05d3a 🎨 Consistent tests paths 2025-12-02 15:13:07 -06:00
InsanityAutomation
bfe9885603 🚸 Extra parsing of safety commands (#26944)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
2025-12-02 15:12:35 -06:00
thinkyhead
333608a692 [cron] Bump distribution date (2025-12-02) 2025-12-02 00:33:25 +00:00
Scott Lahteine
e99d801e6b 🧑‍💻 Add a "Marlin" class 2025-11-30 20:07:48 -06:00
Scott Lahteine
0ac1435a8c 🧑‍💻 Reduction via TERF 2025-11-30 20:07:48 -06:00
Scott Lahteine
584abc5835 🎨 "controllerfan" 2025-11-30 20:07:48 -06:00
Scott Lahteine
73fa80f128 🎨 Pretty up timers 2025-11-30 20:07:48 -06:00
Scott Lahteine
7fcc605595 🧑‍💻 Relocate G38 data 2025-11-30 20:07:48 -06:00
Harald Wagener
35319049fe FT_MOTION > FTM_POLYS (#28197) 2025-11-30 20:05:45 -06:00
thinkyhead
544cde20fb [cron] Bump distribution date (2025-12-01) 2025-12-01 00:40:21 +00:00
Scott Lahteine
084b065f46 🩹 Fix MMU2 menu 2025-11-30 17:24:23 -06:00
Scott Lahteine
ec8a6fc7e2 🔧 Uppercase PID options (#27891) 2025-11-30 08:43:23 -06:00
thinkyhead
3d7f84dbb6 [cron] Bump distribution date (2025-11-30) 2025-11-30 00:38:07 +00:00
Scott Lahteine
7b70e39ff6 🧑‍💻 Clarify PID tuning macros 2025-11-28 21:23:00 -06:00
Scott Lahteine
58bce3781e 📝 Usage for run_tests 2025-11-28 19:15:06 -06:00
thinkyhead
578ee04243 [cron] Bump distribution date (2025-11-29) 2025-11-29 00:31:12 +00:00
Scott Lahteine
d061e6dbd6 📝 Motion comments
w/r/t https://github.com/MarlinFirmware/Marlin/issues/27918#issuecomment-3145339116
2025-11-28 13:28:28 -06:00
Vovodroid
12ac094992 PLR_HEAT_BED_ON_REBOOT (#26691) 2025-11-27 19:27:48 -06:00
thinkyhead
ac0fc603ae [cron] Bump distribution date (2025-11-28) 2025-11-28 00:53:52 +00:00
ellensp
e3ef8d2089 BOARD_RASPBERRY_PI_PICO (and other RP2040 updates) (#28181) 2025-11-27 17:28:32 -06:00
Vovodroid
b9f0c68e3c ️ Minimize M190 annealing code (#26888) 2025-11-27 16:41:20 -06:00
Axel Sepúlveda
64182d60aa 🎨 Patches for README (#28194)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
2025-11-27 14:38:04 -06:00
thinkyhead
3e4344ad7a [cron] Bump distribution date (2025-11-27) 2025-11-27 06:11:36 +00:00
Scott Lahteine
efb58a9a0d 🧑‍💻 Consolidate repetitious items 2025-11-26 23:04:31 -06:00
Scott Lahteine
2700af52c8 🧑‍💻 TERF - Single line shorthand 2025-11-26 21:42:16 -06:00
Scott Lahteine
c420a0b96a 🎨 Comments, refinements 2025-11-26 21:34:42 -06:00
Scott Lahteine
1832500eca 🧑‍💻 Single endstop state 2025-11-26 21:34:22 -06:00
thinkyhead
5bbf953711 [cron] Bump distribution date (2025-11-26) 2025-11-26 00:32:42 +00:00
Scott Lahteine
1f38b509e1 🔧 Update FAN pins 2025-11-25 14:36:51 -06:00
thinkyhead
38d9b97bbd [cron] Bump distribution date (2025-11-25) 2025-11-25 06:29:28 +00:00
Giuliano
c1908c865e 🩹 Fix case light menu build (2) (#28185)
Followup to #28143
2025-11-24 22:43:18 -06:00
David Buezas
ba34902610 🔧 Recommend FTM_SMOOTHING + FTM_SHAPER_E (#28190) 2025-11-24 22:40:27 -06:00
Andrew
e35bedab48 🔨 Importable configuration.py for mc-apply.py (#28182) 2025-11-24 19:57:47 -06:00
Andrew
50297c65d4 🚸 Update/fix JyersUI/ProUI park, leveling (#28183) 2025-11-24 19:56:11 -06:00
Scott Lahteine
fe1d6f93e2 🔨 STM32 build with -std=gnu++17 (#28188) 2025-11-24 19:55:30 -06:00
thinkyhead
46ee5b0a08 [cron] Bump distribution date (2025-11-24) 2025-11-24 00:35:08 +00:00
Scott Lahteine
9da6b580d9 🚸 Immediate Buttons and Menu Items (2)
Followup to #28180
2025-11-23 13:51:51 -06:00
Scott Lahteine
ccc69582ef 🧑‍💻 Warn about language features 2025-11-23 13:27:17 -06:00
thinkyhead
8dee0c1281 [cron] Bump distribution date (2025-11-20) 2025-11-20 06:10:58 +00:00
Scott Lahteine
06c6c479dd 🚸 Immediate Buttons and Menu Items (#28180) 2025-11-19 22:01:42 -06:00
thinkyhead
402aab968c [cron] Bump distribution date (2025-11-19) 2025-11-19 00:33:07 +00:00
Scott Lahteine
85b82e3ab6 🎨 Misc. ws and formatting 2025-11-17 19:16:15 -06:00
Giuliano
543af426ef 🌐 Update Italian translation (#28177) 2025-11-17 18:40:59 -06:00
thinkyhead
646f4c7d69 [cron] Bump distribution date (2025-11-18) 2025-11-18 00:38:53 +00:00
Scott Lahteine
9788a35107 🩹 Commas for devcontainer.json 2025-11-17 18:08:09 -06:00
Scott Lahteine
2774ee8290 🎨 Misc patches from ProUI (2) 2025-11-17 18:04:19 -06:00
Scott Lahteine
4f39b9c09d 🎨 Misc patches from ProUI
Co-Authored-By: Miguel Risco-Castillo <mriscoc@users.noreply.github.com>
2025-11-17 17:28:13 -06:00
thinkyhead
e6a615d882 [cron] Bump distribution date (2025-11-17) 2025-11-17 00:33:44 +00:00
Andrew
9d55440d38 🚸 'G27 P' parameter check (#28172)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
2025-11-16 13:19:59 -06:00
ellensp
c7e6b7924a 🚸🌡️ Refactor AUTOTEMP (2) (#28175)
Followup to #28155
2025-11-16 12:54:52 -06:00
ellensp
c6f4bc1aa1 GCODE_MACROS_IN_EEPROM (2) (#28174) 2025-11-16 12:24:09 -06:00
Vedran
98c72a3b65 DIFFERENTIAL_EXTRUDER (#28023) 2025-11-16 12:22:03 -06:00
Harald Wagener
ef8873d6ef 🔧 FLY D5 — Servo and Probe pins (#28166) 2025-11-16 09:12:38 -06:00
thinkyhead
eb2b8a1ddb [cron] Bump distribution date (2025-11-16) 2025-11-16 00:35:14 +00:00
Steven Haigh
a1a9904d32 🔨 Enhance mc-apply.py (#28157)
Enhance `mc-apply.py` with `configuration.py` features and value normalization:
- Verbose logging system with `--verbose` flag (0-2 levels)
- `fetch_example()` to download configs from GitHub (`examples/path` or URLs)
- `disable_all_options()` to comment out all `#define` statements
- Special directives support via directives JSON key
- Support for `[disable]`, `examples/path`, and direct URL directives

Implement value normalization for consistent behavior:
- "on", "true", true, "" => enable (uncomment `#define`)
- "off", "false", false => disable (comment out `#define`)
- All other values => set value (`#define OPTION value`)

Update example marlin_config.json to demonstrate different value formats and directive usage. Changes are fully backward compatible with existing JSON configuration files.
2025-11-15 15:44:16 -06:00
Scott Lahteine
1f3309ac06 🔨 Use config_dump 1 for mc.zip embedding 2025-11-14 23:47:20 -06:00
Andrew
b9e89a5378 🩹 Fix NeoPixel for stm32f1-maple (#28128) 2025-11-14 19:11:00 -06:00
Skruppy
e2250ce037 🩹 Fix case light menu build (#28143) 2025-11-14 19:06:22 -06:00
thinkyhead
f872750b70 [cron] Bump distribution date (2025-11-15) 2025-11-15 00:31:14 +00:00
nanctil
c9488b4f63 🐛 Fix Teensy 4.x stepper timing via HAL_timer_set_compare (#28169) 2025-11-14 13:52:34 -06:00
Scott Lahteine
8cd9c06084 🩹 Teensy 4.x timer mods 2025-11-14 13:46:37 -06:00
Scott Lahteine
1c6b723ee6 🧑‍💻 Timer general cleanup
erps
2025-11-14 13:45:55 -06:00
thinkyhead
0f044f76ec [cron] Bump distribution date (2025-11-14) 2025-11-14 06:10:47 +00:00
Axel Sepúlveda
8342a5a83e 🐛 Fix TPARA kinematics (#28068) 2025-11-13 20:14:57 -06:00
thinkyhead
e3fa27ac9f [cron] Bump distribution date (2025-11-13) 2025-11-13 00:31:59 +00:00
narno2202
3293b2780e 🩹 Prevent ÷ 0 in FT Motion (#28150) 2025-11-12 16:06:36 -06:00
thinkyhead
ebf9aa5c82 [cron] Bump distribution date (2025-11-12) 2025-11-12 06:11:20 +00:00
Scott Lahteine
54fe84ea32 🧑‍💻 Missed some
Followup to ba8b685ede
2025-11-11 22:01:38 -06:00
Scott Lahteine
b0f6155d99 🧑‍💻 FTM trajectory code tweaks 2025-11-11 21:47:58 -06:00
Scott Lahteine
ba8b685ede 🧑‍💻 Old macros cleanup 2025-11-11 21:47:58 -06:00
ellensp
579545177d GCODE_MACROS_IN_EEPROM (#28114) 2025-11-11 19:51:22 -06:00
thinkyhead
10009b018d [cron] Bump distribution date (2025-11-11) 2025-11-11 00:32:37 +00:00
Scott Lahteine
689c7b83e1 🎨 Move bubblesort string 2025-11-10 12:01:45 -06:00
Scott Lahteine
9393c1ed1b 🩹 Fix MBL + FT Motion build 2025-11-10 12:01:31 -06:00
Scott Lahteine
cda684b6fd 🎨 LCD cosmetic, babystep size 2025-11-10 00:18:11 -06:00
David Buezas
a420e3c155 🔧 PROBE_WAKEUP_TIME_MS 30 for BIQU probes (#28153) 2025-11-09 23:43:37 -06:00
Scott Lahteine
88a4e55945 🩹 Fix SMOOTH_SET
Followup to ce7edc6223
2025-11-09 21:25:46 -06:00
Scott Lahteine
27dcfe0ea8 New rule in use_example_configs 2025-11-09 18:37:18 -06:00
thinkyhead
cf609152c2 [cron] Bump distribution date (2025-11-10) 2025-11-10 00:34:05 +00:00
Scott Lahteine
6e01ba3ce8 🧑‍💻 Probe code refinements 2025-11-09 17:34:18 -06:00
thinkyhead
cf9f205030 [cron] Bump distribution date (2025-11-09) 2025-11-09 01:43:06 +00:00
ellensp
59cee1cb87 🔧 Custom boot screen for Graphical TFT (#28160) 2025-11-08 17:20:58 -06:00
ellensp
e53f2a3d82 🩹 Fix __ARM_ARCH check to omit M0+ (#28162) 2025-11-08 17:03:05 -06:00
narno2202
412513be43 FTM_RESONANCE_TEST (3) (#28164) 2025-11-08 17:01:05 -06:00
Mihai
f946b60670 S_CURVE_FACTOR (#27101) 2025-11-08 16:48:09 -06:00
Scott Lahteine
90363cefd0 🎨 Conditional HAS_VOLUMETRIC_EXTRUSION 2025-11-08 16:41:53 -06:00
Scott Lahteine
07630e6559 🎨 per => pct 2025-11-08 16:15:20 -06:00
Scott Lahteine
5b34686dda FTM_RESONANCE_TEST (2) 2025-11-08 16:04:40 -06:00
narno2202
667aa15b87 FTM_RESONANCE_TEST (#28158) 2025-11-08 15:16:06 -06:00
thinkyhead
f48aa53d7c [cron] Bump distribution date (2025-11-08) 2025-11-08 00:30:09 +00:00
Scott Lahteine
dd3c3d09f2 🩹 Quieter FTM build (2) 2025-11-07 12:43:38 -06:00
Scott Lahteine
d1f2b2d27b 🩹 Quieter FTM build 2025-11-07 01:43:22 -06:00
Scott Lahteine
2073b67e45 FT Motion test EXTRUDERS > 1 (2) 2025-11-07 00:21:09 -06:00
Scott Lahteine
e176df1e6d 🎨 FT Motion comments, style
Resolves #28151
2025-11-06 23:14:43 -06:00
thinkyhead
f6dbb59748 [cron] Bump distribution date (2025-11-07) 2025-11-07 00:31:58 +00:00
Scott Lahteine
39697628e7 FT Motion test EXTRUDERS > 1 2025-11-06 16:36:45 -06:00
thinkyhead
e9c5b99722 [cron] Bump distribution date (2025-11-06) 2025-11-06 06:10:44 +00:00
Scott Lahteine
8e9e039672 🧑‍💻 Rename Trajectory Gen 2025-11-05 19:19:58 -06:00
Scott Lahteine
ce7edc6223 🧑‍💻 Save some string space 2025-11-05 19:18:33 -06:00
Scott Lahteine
924c2ca0fe 🎨 Fix style snafus 2025-11-05 19:18:18 -06:00
thinkyhead
e0f0a9491d [cron] Bump distribution date (2025-11-05) 2025-11-05 00:32:26 +00:00
ellensp
8547f4f5b9 🔨🐛 Don't use broken 'board = fysetc_f6_13' (#28159) 2025-11-04 01:31:57 -06:00
Scott Lahteine
ac5836a2a2 🔨 Bring Makefile up to date 2025-11-04 01:16:23 -06:00
thinkyhead
6b14b948a9 [cron] Bump distribution date (2025-11-04) 2025-11-04 00:31:21 +00:00
Scott Lahteine
1774dbd539 🩹 Fix 'interval' type warning
Resolves #28156
2025-11-03 17:51:55 -06:00
zzcatvs
e9810691ec FYSETC Spider King V1.1 (STM32H723ZG) (#27125) 2025-11-03 14:09:08 -06:00
Scott Lahteine
29ad078fda 🚸🌡️ Refactor AUTOTEMP, apply to LCD temp change (#28155)
Fixes #28154
2025-11-02 21:48:24 -06:00
narno2202
0c4beea9be 🩹 Fix FT_MOTION + DISTINCT_E_FACTORS (#28106)
Fixes #28105
2025-11-02 21:16:44 -06:00
thinkyhead
79bd65be35 [cron] Bump distribution date (2025-11-03) 2025-11-03 00:34:02 +00:00
Scott Lahteine
150425e480 🔨 Update MarlinSimUI commit ID 2025-11-02 16:25:42 -06:00
Scott Lahteine
61cc3cdf09 🩹 Followup fix SD Quicksort, FT Motion, Simulator 2025-11-02 15:53:08 -06:00
David Buezas
252085f462 🐛 Fix some FT Motion probing issues (#28096)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
2025-11-02 01:19:03 -06:00
David Buezas
1ead60ec46 ️ FT Motion trajectories, smoothing, optimization (#28115)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
Co-authored-by: narno2202 <130909513+narno2202@users.noreply.github.com>
2025-11-01 23:50:48 -05:00
Scott Lahteine
5a0923ed28 🔧 Unified Linear Advance K
Part of #21827
2025-11-01 19:38:06 -05:00
Scott Lahteine
40beddeaa3 🚸 Simplified M493
Part of #21827
2025-11-01 19:38:06 -05:00
Scott Lahteine
05a64e2013 🚸 Fix 'M493 G', collisions 'E' 'O' (and 'M'), 'W' report
Part of #21827
2025-11-01 19:38:06 -05:00
thinkyhead
3fc45df62f [cron] Bump distribution date (2025-11-02) 2025-11-02 00:34:34 +00:00
Scott Lahteine
9c3d74f6d1 🩹 ProUI: Edit K for active E (2) 2025-11-01 18:57:12 -05:00
Scott Lahteine
bdfb0cc63f 🩹 ProUI: Edit K for active E 2025-11-01 16:25:17 -05:00
Scott Lahteine
8bf127afe6 🎨 Aesthetic tweaks 2025-11-01 16:21:52 -05:00
Scott Lahteine
33ad711ee8 Update some CI tests 2025-10-31 20:20:05 -05:00
Scott Lahteine
20e99497dd 🎨 AxisEnum style 2025-10-31 20:20:05 -05:00
Scott Lahteine
baa20d9ea2 🎨 Misc. HAL types, planner sq, etc. 2025-10-31 20:20:05 -05:00
Scott Lahteine
367bcedea7 🧑‍💻 Reuse FTM smoothing edit item macro 2025-10-31 20:20:05 -05:00
Scott Lahteine
5d59779a80 🧑‍💻 Combine G60-G61 (#28149) 2025-10-31 20:17:18 -05:00
thinkyhead
1c19cfcbc7 [cron] Bump distribution date (2025-11-01) 2025-11-01 00:34:02 +00:00
ellensp
14a83342e1 🔨 Add LIB_MAX31855 ini link (#28146) 2025-10-31 18:08:50 -05:00
Scott Lahteine
f11f42a23e 🐛 Fix MMU3 resume position (#28148) 2025-10-31 18:02:05 -05:00
thinkyhead
4bfbe70d66 [cron] Bump distribution date (2025-10-30) 2025-10-30 00:32:29 +00:00
Skruppy
93394f1ff5 Use TMC SoftwareSerial only if required (#28145) 2025-10-28 21:01:17 -05:00
Scott Lahteine
fa4b73ee04 📝 Document Marlin config includes 2025-10-28 19:45:50 -05:00
thinkyhead
5249d10369 [cron] Bump distribution date (2025-10-29) 2025-10-29 00:32:37 +00:00
Scott Lahteine
89a43a8b1a 🧑‍💻 Same types conversion suite 2025-10-27 21:59:23 -05:00
Scott Lahteine
db279967da 🧑‍💻 Simpler type conversion (defer!) 2025-10-27 20:57:50 -05:00
thinkyhead
41c860dce1 [cron] Bump distribution date (2025-10-28) 2025-10-28 00:30:25 +00:00
Scott Lahteine
bfb5430217 🔨 Comments for newer compilers 2025-10-27 17:27:56 -05:00
Scott Lahteine
e1e13ad72c 🎨 The Ultraviolet Apostrophe 2025-10-27 17:27:56 -05:00
Scott Lahteine
c941ce1a5b 🧑‍💻 Simpler type conversion 2025-10-27 17:27:56 -05:00
Scott Lahteine
7c760bd232 🧑‍💻 Misc. MMU3 tweaks, less STL 2025-10-27 17:27:56 -05:00
Scott Lahteine
42dc89ad32 🔨 Use 'which' in Makefile
Fixes #28141
2025-10-27 11:40:00 -05:00
Scott Lahteine
3a9394c308 🧑‍💻 Sync blocks 'const' hint 2025-10-27 11:13:40 -05:00
Scott Lahteine
97b5c2d3ea 🧑‍💻 Fix, extend 'types.h' operators 2025-10-27 11:12:44 -05:00
Scott Lahteine
f635a9d0c3 🎨 Negation without repetition 2025-10-26 23:37:39 -05:00
thinkyhead
d7550018e3 [cron] Bump distribution date (2025-10-27) 2025-10-27 00:43:00 +00:00
Scott Lahteine
6918959c07 📝 Comment for 'M900 U' 2025-10-26 16:07:17 -05:00
Scott Lahteine
908d30d4ce 🎨 Some chmod ug-x 2025-10-26 01:36:21 -05:00
ellensp
49b11f9490 🔧 ZONESTAR ZM3E2 shared MS1|2 pins (#28126) 2025-10-25 22:00:33 -05:00
thinkyhead
d09bf9d088 [cron] Bump distribution date (2025-10-26) 2025-10-26 00:33:31 +00:00
Scott Lahteine
47727cf0ae 🩹 Fix TFT Color UI (#28140)
Followup to #28103
2025-10-25 15:56:55 -05:00
Scott Lahteine
51ce1a147d 🔧 FT Motion n00b warnings 2025-10-25 01:48:10 -05:00
Scott Lahteine
0f6f125724 🧑‍💻 Fix, improve test scripts [3] 2025-10-25 01:18:27 -05:00
Scott Lahteine
52a4954b8a 🐛 FT Motion respect linearAdvEna flag 2025-10-25 01:13:41 -05:00
Scott Lahteine
4cab99e1d1 🧑‍💻 Fix, improve test scripts (2) 2025-10-24 22:43:24 -05:00
thinkyhead
2c57b184da [cron] Bump distribution date (2025-10-25) 2025-10-25 00:30:02 +00:00
Andrew
14b5d5ba84 🧑‍💻 Fix, improve test scripts (#28136)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
2025-10-24 19:05:59 -05:00
ellensp
5bd28cd840 🩹 Fix ZONESTAR_12864OLED build (et.al.) (#28137) 2025-10-24 12:04:16 -05:00
thinkyhead
fbc2c76870 [cron] Bump distribution date (2025-10-24) 2025-10-24 00:28:38 +00:00
Scott Lahteine
4349f4ab0c 🧑‍💻 Add 'make clean' 2025-10-23 17:44:23 -05:00
Harald Wagener
9eea88bbfc Update README.md (#28135)
* Update README.md

- Add some details about configuration branches
- Link to the download page
- Reword sections on 8 bit boards
- Add a short section on 32 bit boards
- Update Paragraph on HALs

* Update README.md

fix typo

Co-authored-by: David Buezas <dbuezas@users.noreply.github.com>

* code formatting with prettier, remove https URI to be consistent with other links

* expand on HALs

---------

Co-authored-by: David Buezas <dbuezas@users.noreply.github.com>
2025-10-23 13:56:03 -05:00
Scott Lahteine
3a77a7eefd 🐛 Fix SDSORT_QUICK with stack
Followup to #28069
2025-10-23 00:04:25 -05:00
thinkyhead
788e86ccc6 [cron] Bump distribution date (2025-10-23) 2025-10-23 00:30:51 +00:00
Scott Lahteine
27da1995f3 🚸 FT Motion toggle() more safely 2025-10-22 15:06:28 -05:00
Scott Lahteine
e3a5319e3c 🎨 Misc. cleanup, probe FR 2025-10-22 15:04:42 -05:00
Scott Lahteine
e4bc675fbf 🚸 Exit M122 S/P without report 2025-10-22 15:04:28 -05:00
Scott Lahteine
898dd19175 🔧 Update config.ini 2025-10-22 14:08:08 -05:00
thinkyhead
1b307f7c99 [cron] Bump distribution date (2025-10-22) 2025-10-22 06:34:59 +00:00
ellensp
d5977e7e2d 🔧 Separate Teensy 4.0 / 4.1 (#28122)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
2025-10-22 00:41:38 -05:00
thinkyhead
7aaaaec355 [cron] Bump distribution date (2025-10-21) 2025-10-21 00:32:13 +00:00
Scott Lahteine
8acd39c494 ️ Prefer multiply over divide 2025-10-20 19:13:17 -05:00
narno2202
cfac549240 🚸 Fix MKS H43 float display (#28121) 2025-10-20 12:54:13 -05:00
Scott Lahteine
0279f9cf09 🧑‍💻 Use Marlin maths macros 2025-10-20 11:56:16 -05:00
Scott Lahteine
37b5b49cce 📝 Remove old reference 2025-10-20 02:25:57 -05:00
thinkyhead
1a5550f643 [cron] Bump distribution date (2025-10-20) 2025-10-20 00:33:32 +00:00
Scott Lahteine
a3929b435b Moved BIQU/BX config 2025-10-19 19:01:04 -05:00
thinkyhead
7e6e25929b [cron] Bump distribution date (2025-10-19) 2025-10-19 00:34:38 +00:00
Scott Lahteine
f2b2389b8f 🔨 Rename to change case (2) 2025-10-18 18:30:43 -05:00
Scott Lahteine
9012b9a993 🔨 Rename to change case (1) 2025-10-18 18:30:39 -05:00
vicitacal
fde861ab8c 🚸 Fix MKS UI Decrease Feed Rate (#28109) 2025-10-18 18:20:23 -05:00
ellensp
9f0fa5a040 M265 I2C_SCANNER (#28117) 2025-10-18 18:18:02 -05:00
Scott Lahteine
fb95e66652 📝 (s) for FTM_MAX_SMOOTHING_TIME 2025-10-18 17:51:04 -05:00
narno2202
c44b9c1c28 🐛 Fix PLR with FT_MOTION (#28116)
Fixes #28102
2025-10-18 17:21:19 -05:00
ellensp
3753cb9a94 🧑‍💻 Fill in debuggable pins (#28119) 2025-10-18 17:17:11 -05:00
thinkyhead
81d8663f1f [cron] Bump distribution date (2025-10-18) 2025-10-18 00:28:29 +00:00
Andrew
2860d048e6 🧑‍💻 Fix linux_native_test (#28113) 2025-10-16 20:10:45 -05:00
thinkyhead
cc20b30775 [cron] Bump distribution date (2025-10-17) 2025-10-17 00:30:50 +00:00
Andrew
21f0333b43 SDSORT_QUICK (#28069) 2025-10-16 17:30:22 -05:00
Scott Lahteine
70d910ac8e 🚸 Fix Color UI menu item extra touch 2025-10-16 15:43:23 -05:00
Scott Lahteine
23e7905b20 ️ Optimize Graphical TFT (#28103) 2025-10-16 13:42:39 -05:00
thinkyhead
5e1a1fffcf [cron] Bump distribution date (2025-10-09) 2025-10-09 00:29:59 +00:00
Scott Lahteine
e48dd40b53 🧑‍💻 Misc. LCD pins corrections 2025-10-07 21:53:05 -05:00
David Buezas
4ddf626d46 🐛 FT Motion trajectory fixes (#28101) 2025-10-07 19:50:16 -05:00
thinkyhead
991fc9cf63 [cron] Bump distribution date (2025-10-08) 2025-10-08 00:29:44 +00:00
ellensp
ef3e9134dc 🔨 More compatible Makefile (#28094) 2025-10-07 02:30:06 -05:00
Scott Lahteine
35da223f0a 🧑‍💻 Py scripts refinements 2025-10-07 02:26:49 -05:00
Scott Lahteine
0937fe55a4 🎨 Fix echoes, dialect, etc. 2025-10-07 00:51:46 -05:00
Scott Lahteine
de98df1651 🎨 Apply sq, cu, const 2025-10-06 23:28:38 -05:00
thinkyhead
d7156decdc [cron] Bump distribution date (2025-10-07) 2025-10-07 00:30:11 +00:00
ThomasToka
e43c2752c7 🧑‍💻 Update Docker setup (#27998) 2025-10-06 14:36:36 -05:00
thinkyhead
bdf8b0703a [cron] Bump distribution date (2025-10-05) 2025-10-05 00:33:18 +00:00
Sylvain
a506701a8b WANHAO_D9 (need EXP) (#28073) 2025-10-04 14:23:40 -05:00
Scott Lahteine
b60838508b 🧑‍💻 Simplify some flag params 2025-10-03 23:17:51 -05:00
thinkyhead
0f76f17f16 [cron] Bump distribution date (2025-10-04) 2025-10-04 00:28:11 +00:00
Scott Lahteine
c00415b017 🧑‍💻 Simpler M260 R S 2025-10-03 18:49:40 -05:00
Scott Lahteine
3b149c3505 Skip zero length homing_move (#28090)
Fixes #23227

Co-authored-by: Alexey Melnikov <917089+sorgelig@users.noreply.github.com>
2025-10-03 14:16:07 -05:00
Scott Lahteine
d20d1f8712 🔨 Extend misplaced config check (#28093) 2025-10-03 11:41:55 -05:00
Scott Lahteine
c626e3efb2 🩹 BLTouch raise before deploy
Fixes #28092
2025-10-03 09:57:53 -05:00
thinkyhead
1cea29598c [cron] Bump distribution date (2025-10-03) 2025-10-03 00:29:01 +00:00
Scott Lahteine
cb0706f9cc 🔨 Fix misplaced config files check
Fixes #28091
2025-10-02 13:44:37 -05:00
Scott Lahteine
dadbedc4fd 📝 Prettier FINDA protocol 2025-10-02 01:15:12 -05:00
Scott Lahteine
3165beeba0 🩹 Mitigate watchdog timeout for file ops
See #28064, #28069
2025-10-02 00:53:25 -05:00
narno2202
1c9b1240ec 🔧 Option to use FT_MOTION for homing / probing (#28030)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
2025-10-01 23:51:11 -05:00
Scott Lahteine
122dfa13a2 🧑‍💻 Compatible sorted 'find' 2025-10-01 21:29:34 -05:00
thinkyhead
b32a818f37 [cron] Bump distribution date (2025-10-02) 2025-10-02 00:29:06 +00:00
Scott Lahteine
d8b83160ab 🔧 Configurator options TFT_FONT / TFT_THEME 2025-10-01 18:54:40 -05:00
ellensp
98d79fb8bb 🐛 Fix 'T' tool index handling (#28086) 2025-10-01 18:21:14 -05:00
David Buezas
eaefa299fb ️ FTMotion Trajectory: Fix for short blocks (silent curves), add S-curve (#28082) 2025-10-01 17:27:47 -05:00
ellensp
ba840750a0 🔨 Fix font data script #include handling (#28085) 2025-10-01 17:26:11 -05:00
Andrew
cdc960fd1d 🔨 Remove (BSD) -d flag from 'find' (#28013) 2025-10-01 15:47:10 -05:00
Scott Lahteine
c0a544d385 🚸 Filament Sensor, M412 changes 2025-10-01 14:46:44 -05:00
thinkyhead
84b22fcc1d [cron] Bump distribution date (2025-09-30) 2025-09-30 00:30:12 +00:00
Scott Lahteine
c6cd10a92d 🧑‍💻 Shaped axis macros, etc. (#28084) 2025-09-29 15:24:58 -05:00
thinkyhead
d08a7d4fd2 [cron] Bump distribution date (2025-09-29) 2025-09-29 00:31:25 +00:00
David Buezas
0ee1c1e4e1 🐛🚸 Fix stale LA block flag, FT Motion reporting (#28078) 2025-09-28 18:14:14 -05:00
David Buezas
dc9e57464f FTMotion Z shaping, axis sync, axis smoothing (#28055) 2025-09-27 19:42:33 -05:00
thinkyhead
657929740f [cron] Bump distribution date (2025-09-28) 2025-09-28 00:34:33 +00:00
Bob Kuhn
6e74409c14 🐛 Fix STM32 I2C 2-wire LCD, Soft I2C impl. (#26433) 2025-09-27 02:25:03 -05:00
thinkyhead
5af8425776 [cron] Bump distribution date (2025-09-27) 2025-09-27 00:29:05 +00:00
ThomasToka
0ca860b292 🧑‍💻 Resolve unused ftm_active warning (#28076) 2025-09-26 16:16:39 -05:00
ellensp
4dd5b713eb 🚸 M402 Report (BLTouch HS Mode) (#28072) 2025-09-26 04:03:53 -05:00
12oclocker
0628573fc3 🩹 Prevent RAMPS default X_MAX_PIN messing up AnyCubic i3 Mega (#28038) 2025-09-26 03:21:43 -05:00
Scott Lahteine
52cc705e60 🧑‍💻 Use basic PGM string with "S_FMT" 2025-09-26 02:40:28 -05:00
Scott Lahteine
2f987accaa 🧑‍💻 Pass Z to UBL::shift_mesh_height
Co-Authored-By: Selali <17497673+selalipop@users.noreply.github.com>
2025-09-25 23:52:57 -05:00
Scott Lahteine
66aa848b2f 🐛 Trigger instant runout on filament jam (#28074) 2025-09-25 23:39:52 -05:00
Scott Lahteine
6f3de26a4d 🧑‍💻 Prefer float over float& (#25716) 2025-09-25 23:32:32 -05:00
Scott Lahteine
b723e3fd02 🩹 Resume motion tracking on runout.reset()
Fix an issue where the filament motion sensor is ignored after a runout is resolved.
2025-09-25 22:18:15 -05:00
thinkyhead
7e4c6db12d [cron] Bump distribution date (2025-09-26) 2025-09-26 00:29:25 +00:00
narno2202
e228a222a3 🩹 Fix LA block flag for FTMotion (2) (#28070) 2025-09-25 15:47:31 -05:00
thinkyhead
fdac56da15 [cron] Bump distribution date (2025-09-25) 2025-09-25 12:12:25 +00:00
BeowulfNode42
7e62b60c94 🔧 Allow CHITU3D V6 override of Z_STOP_PIN (#28059) 2025-09-25 03:09:21 -05:00
Andrew
b6b0fccd5f 🚸 ProUI updates for Linear Advance (#28067) 2025-09-25 02:27:46 -05:00
thinkyhead
f2f6b6bd85 [cron] Bump distribution date (2025-09-23) 2025-09-23 18:09:48 +00:00
David Buezas
6ff18a942c 🩹 Fix LA block flag for FTMotion (#28065) 2025-09-23 13:02:44 -05:00
thinkyhead
25a2a89517 [cron] Bump distribution date (2025-09-22) 2025-09-22 00:33:02 +00:00
David Buezas
5917aa73b5 ️ Fix K, improve FTMotion linear advance (#28058) 2025-09-21 17:21:53 -05:00
thinkyhead
d0dc3b619f [cron] Bump distribution date (2025-09-15) 2025-09-15 00:32:42 +00:00
ThomasToka
d628d7de44 🔨 Improve build output (#28051)
- Respect bootloader offset for `maximum_flash_size` output
- Match the .elf name to the firmware name.
2025-09-14 18:58:00 -05:00
ellensp
8fe6bc6745 LIGHTWEIGHT_UI for Native/Simulator (#28049) 2025-09-14 18:31:14 -05:00
Andrew
dcbcbb54f9 🧑‍💻 Update datetime on same config rebuild (#28020) 2025-09-14 16:15:38 -05:00
ellensp
41f9eec4df 🩹 Retain TMC_DEBUG wrappers (#28052) 2025-09-14 14:47:14 -05:00
ellensp
33e942514b 📌 U8glib-HAL v0.5.5 (#28044) 2025-09-14 14:22:45 -05:00
thinkyhead
2aa9f70f5e [cron] Bump distribution date (2025-09-14) 2025-09-14 06:09:43 +00:00
Scott Lahteine
8aac26275e 🎨 Clean up FTM, etc. 2025-09-13 23:05:41 -05:00
thinkyhead
294903439a [cron] Bump distribution date (2025-09-11) 2025-09-11 00:29:48 +00:00
David Buezas
daa68d560e 🐛 Fix FT Motion step rate instability (#28043) 2025-09-10 18:24:32 -05:00
thinkyhead
4ce809380b [cron] Bump distribution date (2025-09-09) 2025-09-09 00:30:19 +00:00
Scott Lahteine
a614352fcf 🧑‍💻 Some FT Motion renames
To reduce changes in #28043
2025-09-07 22:42:06 -05:00
narno2202
a54daeeb39 ️ Optimize FT Motion load block data (#27991) 2025-09-07 20:38:37 -05:00
thinkyhead
fc4abd1335 [cron] Bump distribution date (2025-09-08) 2025-09-08 00:32:06 +00:00
Scott Lahteine
881ee69f34 SENSORLESS_STALLGUARD_DELAY 2025-09-06 21:50:35 -05:00
thinkyhead
5a8b9d649a [cron] Bump distribution date (2025-09-07) 2025-09-07 00:32:58 +00:00
ellensp
e80d8e9dcf 🐛 Fix UART pins for GD32 MFL (#28011) 2025-09-06 13:22:45 -05:00
thinkyhead
950d141958 [cron] Bump distribution date (2025-09-06) 2025-09-06 06:08:36 +00:00
Thijs Triemstra
52ea53a3dd 🎨 Spelling corrections (#28026) 2025-09-05 22:14:09 -05:00
Andrew
7526309ccf 🧑‍💻 Tweaks to our aging Arduino SdFat Library code (#28031)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
2025-09-05 22:00:28 -05:00
ellensp
4342a0f512 🩹 Fix RAMPS MINIPANEL BEEPER_PIN (#28033) 2025-09-05 21:13:16 -05:00
Scott Lahteine
4bca73dc5a Validate source formatting (#28028) 2025-09-05 20:30:39 -05:00
ellensp
67dc3e432f 🔧 Fix bad Config.h sanity-check (#28027) 2025-09-05 20:27:16 -05:00
thinkyhead
349c3a7243 [cron] Bump distribution date (2025-08-26) 2025-08-26 18:09:58 +00:00
Vovodroid
1bee2dab60 🩹 Fix PLR Z move precision (#27965) 2025-08-26 12:33:28 -05:00
Keith Bennett
1e51ff1306 🔧 Creality UI string heading & title options (#27944) 2025-08-26 12:28:49 -05:00
ellensp
aa0558eb3a Creality v252 board (2) (#28016)
Followup to #27996
2025-08-26 12:17:27 -05:00
thinkyhead
0878147f31 [cron] Bump distribution date (2025-08-18) 2025-08-18 00:35:57 +00:00
Andrew
7086ca632f 🧑‍💻 Omit unused ADC pins (#28007)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
2025-08-16 20:41:37 -05:00
thinkyhead
93783e993b [cron] Bump distribution date (2025-08-17) 2025-08-17 00:36:32 +00:00
ellensp
ab69f87989 Creality v252 board (#27996) 2025-08-16 18:26:59 -05:00
narno2202
b0c0074092 🔧 Support EXTRUDERS 0 with FT_MOTION (#27984) 2025-08-16 18:21:27 -05:00
Scott Lahteine
2110215a16 🧑‍💻 Add *_AXIS_PAIRED_LIST macros 2025-08-16 17:24:20 -05:00
ellensp
50d847a2fe 🔧 Support more CONTROLLER_FAN pins (2) (#28012)
Followup to #27961
2025-08-16 16:19:19 -05:00
thinkyhead
61c57825d7 [cron] Bump distribution date (2025-08-14) 2025-08-14 12:13:12 +00:00
Hannes
f81ca65a16 🐛 Provide 'M20 F' (list binary files) as needed (#27977)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
2025-08-14 02:23:01 -05:00
thinkyhead
a020a09903 [cron] Bump distribution date (2025-08-13) 2025-08-13 18:34:14 +00:00
Marcio T.
6361146f0f 🩹 Fix FILAMENT_MOTION_SENSOR + MarlinUI build (#27994) 2025-08-13 12:37:23 -05:00
Andrew
4fb984e960 🔨 Clean up and improve some Python scripts (#27752) 2025-08-13 12:33:09 -05:00
ellensp
081458a3c8 🔧 Support more CONTROLLER_FAN pins (#27961) 2025-08-13 12:26:51 -05:00
ellensp
02fe1ff95e 🩹 Distinct types for LEDs 1/2 (#27959) 2025-08-13 12:04:16 -05:00
thinkyhead
beb3a0fc4b [cron] Bump distribution date (2025-08-09) 2025-08-09 00:32:28 +00:00
ellensp
71834e204b 🔧 Sanity check PID_MAX, MAX_BED_POWER (#27979) 2025-08-08 14:08:48 -05:00
ellensp
9417af14e9 🩹 Fix G29_RETRY_AND_RECOVER + ExtUI (#27973) 2025-08-08 13:58:23 -05:00
ellensp
84448a78be 🩹 Fix Origin UI second extruder (#27974) 2025-08-08 13:50:00 -05:00
ellensp
1244a21a21 🔧 Extend bad merge checking (#27990) 2025-08-08 13:38:52 -05:00
thinkyhead
eff0de499f [cron] Bump distribution date (2025-07-30) 2025-07-30 00:35:08 +00:00
Scott Lahteine
de1b97a0ce Small checkout for each test 2025-07-29 13:13:15 -05:00
thinkyhead
624f429086 [cron] Bump distribution date (2025-07-29) 2025-07-29 06:11:28 +00:00
Vovodroid
0303a1bfb0 🔧 Configurable filament runout motion sensor distance (#27836) 2025-07-28 23:26:42 -05:00
Scott Lahteine
573c21e690 🩹 Fix EEPROM size sign warning 2025-07-28 23:23:13 -05:00
Scott Lahteine
80b8e66189 🎨 Tweak an LCD note 2025-07-28 22:46:34 -05:00
thinkyhead
8ec9c37940 [cron] Bump distribution date (2025-07-23) 2025-07-23 00:34:52 +00:00
Darsey Litzenberger
2e8833e315 🩹 Allow Nozzle Wipe odd linear count (2) (#27987) 2025-07-22 17:44:36 -05:00
thinkyhead
c403381172 [cron] Bump distribution date (2025-07-19) 2025-07-19 06:09:45 +00:00
Darsey Litzenberger
02e5225e10 🩹 Allow Nozzle Wipe odd linear count (#27952) 2025-07-19 00:48:08 -05:00
Keith Bennett
28839c60da ✏️ Fix Creality UI PLR typo (#27943) 2025-07-18 23:07:46 -05:00
RainMotorsports
e7ac0d14cd 🩹 Prevent BED_TRAMMING_Z_HOP too far (#27939) 2025-07-18 22:42:26 -05:00
thinkyhead
9a23bcec0b [cron] Bump distribution date (2025-07-18) 2025-07-18 00:33:57 +00:00
Scott Lahteine
6b9ec417b6 🩹 Fix various typos 2025-07-17 15:18:07 -05:00
thinkyhead
66474f6a13 [cron] Bump distribution date (2025-07-12) 2025-07-12 06:09:26 +00:00
Scott Lahteine
4f0329bb43 📝 Update links to Fysetc Mini12864_Panel 2025-07-11 21:05:37 -05:00
thinkyhead
dc6f23e435 [cron] Bump distribution date (2025-06-29) 2025-06-29 00:37:16 +00:00
Scott Lahteine
c7fc6eeb1e 🚸 Match M920 indexing to M919 2025-06-28 16:37:08 -05:00
thinkyhead
72c0437b48 [cron] Bump distribution date (2025-06-25) 2025-06-25 00:32:59 +00:00
Scott Lahteine
a6377e5215 🐛 Fix misc. build issues 2025-06-24 16:59:56 -05:00
thinkyhead
0459407a8e [cron] Bump distribution date (2025-06-23) 2025-06-23 00:35:18 +00:00
ellensp
685ccf3fdf 🔧 Fix TEMP_SENSOR_BED_USES_SW_SPI (#27938)
Followup to #26441
2025-06-22 12:40:29 -05:00
thinkyhead
de219dcd63 [cron] Bump distribution date (2025-06-22) 2025-06-22 12:38:05 -05:00
ellensp
cdc996dd68 🔧 Fix SPI_FLASH_BACKUP flag (#27934)
Followup to #27373
2025-06-22 12:38:05 -05:00
Vovodroid
fe6eb1745f 🐛 Fix NONLINEAR_EXTRUSION enabled check (#27926)
Followup to #27819
2025-06-21 16:36:22 -05:00
erril007
533d752707 EVENT_GCODE_(BEFORE|AFTER)_G34 (#27930) 2025-06-20 20:50:13 -05:00
thinkyhead
037b0096e2 [cron] Bump distribution date (2025-06-21) 2025-06-21 00:32:24 +00:00
ellensp
eefd63e408 🐛 Fix Hotend > 0 Preheat (#27932) 2025-06-20 16:18:40 -05:00
Scott Lahteine
5e410e35ab 🩹 Minor fixes, updates, comments 2025-06-20 16:05:06 -05:00
thinkyhead
62bb61b3d9 [cron] Bump distribution date (2025-06-17) 2025-06-17 00:32:42 +00:00
Andrew
a7f12169b9 📝 Review & update G-code comments (#27921) 2025-06-16 14:23:17 -05:00
thinkyhead
29ceba972c [cron] Bump distribution date (2025-06-15) 2025-06-15 00:36:55 +00:00
Keith Bennett
7965e066c7 🧑‍💻 Some TMC2240 updates (2) (#27919)
Followup to #27901
2025-06-14 16:22:29 -05:00
ellensp
f499735280 🩹 Fix Ender-3 S1 pin EXP3-4 (#27915) 2025-06-13 22:27:05 -05:00
Scott Lahteine
1e03f696f5 🧑‍💻 Some TMC2240 updates (#27901) 2025-06-13 22:13:09 -05:00
thinkyhead
7ac308fe4d [cron] Bump distribution date (2025-06-14) 2025-06-14 00:31:29 +00:00
Scott Lahteine
54a7ce999f 🎨 Update MPC sanity checka
Followup to #27911
2025-06-13 19:28:45 -05:00
tombrazier
89416a583c MPC_PTC (#27911) 2025-06-13 19:10:03 -05:00
Scott Lahteine
9ad9323aac 🎨 Minor ternary style tweak 2025-06-13 18:10:34 -05:00
thinkyhead
cf7f5bcdee [cron] Bump distribution date (2025-06-11) 2025-06-11 00:32:31 +00:00
Andrew
950f492ce7 🩹 Fix ProUI edit Lin.Adv.K (#27895) 2025-06-10 15:34:54 -05:00
narno2202
1bb1603886 🎨 FT Motion cleanup (#27910) 2025-06-10 15:31:02 -05:00
Scott Lahteine
68dc89cf75 🎨 Align Bed PID 2025-06-10 15:29:22 -05:00
thinkyhead
c2d586cf5f [cron] Bump distribution date (2025-06-10) 2025-06-10 00:32:33 +00:00
Scott Lahteine
fbce327402 🧑‍💻 TMCStepper => 0.8.7 2025-06-09 13:55:42 -05:00
staff1010
c09638f821 🚸 Improve XPT2046 touch, MKS UI calibration (#27892) 2025-06-09 13:37:38 -05:00
Scott Lahteine
348099dabb 🎨 MKS UI name adjustments 2025-06-09 13:35:34 -05:00
David Buezas
fbee2a2ff7 ️ SMOOTH_LIN_ADVANCE + S_CURVE_ACCELERATION (#27827) 2025-06-09 13:26:57 -05:00
thinkyhead
781d9c470e [cron] Bump distribution date (2025-06-09) 2025-06-09 06:10:43 +00:00
RainMotorsports
5a5354107b E3D BigBox Rumba board (#27897) 2025-06-08 22:18:35 -05:00
thinkyhead
127bc94891 [cron] Bump distribution date (2025-06-05) 2025-06-05 00:32:27 +00:00
Andrew
fca60335e1 🩹 Fix Nonlinear Extrusion build (#27906)
Fixes #27902
2025-06-03 19:54:22 -05:00
thinkyhead
27621290b8 [cron] Bump distribution date (2025-06-04) 2025-06-04 00:33:43 +00:00
Scott Lahteine
951b8be3a1 🩹 Update Creality CR4NS
Followup to #27003
2025-06-03 18:48:33 -05:00
thinkyhead
f1bb46f5b8 [cron] Bump distribution date (2025-06-03) 2025-06-03 00:32:58 +00:00
David Buezas
3bb9364c44 🧑‍💻 Add TMC2240 temperature reading (#27903) 2025-06-02 18:59:01 -05:00
Scott Lahteine
7df503de93 🩹 Fix FLY D5 / D7 serial for TMC2208
See MarlinFirmware/TMCStepper#5
2025-06-02 18:23:17 -05:00
David Buezas
098e0961dc 🩹 TMC2240 diag0 push-pull active HIGH (#27907) 2025-06-02 17:34:02 -05:00
Scott Lahteine
6ea4a16212 🌐 Automated README translations 2025-06-02 16:51:07 -05:00
Scott Lahteine
9f6cafbae3 🩹 Fix Nozzle Cleaning wait for pre-set temp
Fixes #27882
2025-06-01 20:47:55 -05:00
thinkyhead
8c6e9526b0 [cron] Bump distribution date (2025-06-02) 2025-06-02 00:34:11 +00:00
Scott Lahteine
cc05123a80 🩹 Fix EXP3_03_PIN for CREALITY_V24S1_301F4
Fixes #27904

Co-Authored-By: Nexrem <kristiana2000@abv.bg>
2025-06-01 16:31:04 -05:00
thinkyhead
823014868c [cron] Bump distribution date (2025-06-01) 2025-06-01 01:15:51 +00:00
Scott Lahteine
7c30124f80 📌 Versions for adafruit "SdFat", "Adafruit SPIFlash" 2025-05-31 18:17:43 -05:00
Scott Lahteine
3ddf728333 🩹 Fix some missed ONBOARD_SDIO 2025-05-31 16:54:57 -05:00
Scott Lahteine
9dbce712fc 🧑‍💻 TMCStepper => 0.8.5 2025-05-31 16:14:04 -05:00
Scott Lahteine
b59251c388 🧑‍💻 Macros for larger sets 2025-05-31 16:06:20 -05:00
Scott Lahteine
c377237fd8 🧑‍💻 Tweak G90 / G91 declaration 2025-05-31 16:06:19 -05:00
thinkyhead
a2452a577b [cron] Bump distribution date (2025-05-31) 2025-05-31 06:08:46 +00:00
Vovodroid
a6bfdf351f NONLINEAR_EXTRUSION_DEFAULT_ON (#27819)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
2025-05-30 22:53:21 -05:00
thinkyhead
e8f2430dac [cron] Bump distribution date (2025-05-30) 2025-05-30 00:32:05 +00:00
Scott Lahteine
8f19e2d7d4 🧑‍💻 TMCStepper => 0.8.4 2025-05-29 13:24:40 -05:00
thinkyhead
a270cc36e6 [cron] Bump distribution date (2025-05-29) 2025-05-29 00:31:57 +00:00
Scott Lahteine
fa25737a9f 🧑‍💻 TMCStepper => 0.8.3 2025-05-28 14:08:07 -05:00
thinkyhead
38eee76839 [cron] Bump distribution date (2025-05-28) 2025-05-28 00:32:03 +00:00
Giuliano
5b59424447 🌐 Fix Italian typo, etc. (#27890)
Followup to #27877

Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
2025-05-27 15:15:55 -05:00
staff1010
c20c6b61f1 🚸 Improve MKS UI with LVGL v6.1.2 (#27889) 2025-05-27 14:49:19 -05:00
David Buezas
d0e8edad3c 🐛 More robust Smooth Linear Advance (#27862)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
2025-05-27 13:15:38 -05:00
ellensp
88d368ad9d 🩹 Misc temp sensor fixups (#27884)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
2025-05-27 13:01:01 -05:00
Keith Bennett
843f79589c 🔧 Update BTT002 SPI driver conditionals (#27887)
Counterpart to #27886
2025-05-27 12:58:49 -05:00
Andrew
3494482cb0 🎨 Misc. cleanup, tweak unused LED_GraduallyControl (#27422)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
2025-05-27 01:05:01 -05:00
vehystrix
3572fd75b5 🐛 Fix M201 with XY_FREQUENCY_LIMIT (#27859)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
2025-05-26 23:46:46 -05:00
Keith Bennett
ebecd76492 🔧 Update BIQU BX SPI driver conditionals (#27886) 2025-05-26 22:51:41 -05:00
thinkyhead
3f3c8257f7 [cron] Bump distribution date (2025-05-27) 2025-05-27 00:35:13 +00:00
Vovodroid
e9ae5208cb EVENT_GCODE_AFTER_MPC_TUNE (#27865)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
2025-05-26 19:16:45 -05:00
narno2202
fde0eaf1e7 ️ Remove FT Motion extraneous code (#27881) 2025-05-26 17:36:14 -05:00
Andrew
122c4116f2 🚸 Misc. optimizations, cleanup, DWIN fixes… (#27858)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
2025-05-26 16:36:55 -05:00
Scott Lahteine
21559b0c59 🩹 Call SERIAL_IMPL.msgDone() after M105 2025-05-26 16:34:17 -05:00
Scott Lahteine
0916d32589 🧑‍💻 Serial ON_OFF, TRUE_FALSE 2025-05-26 15:33:26 -05:00
thinkyhead
af7b126edc [cron] Bump distribution date (2025-05-26) 2025-05-26 18:09:01 +00:00
Giuliano
bc990ccca6 🌐 Update Italian language (#27877) 2025-05-26 11:43:47 -05:00
Scott Lahteine
c7bcbf944e 🌐 Specific USB-FD strings 2025-05-26 11:32:00 -05:00
ellensp
7f9eb688ad 🐛 TMC2240: The Sequel (#27880)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
2025-05-26 10:50:22 -05:00
thinkyhead
dbd60fb38e [cron] Bump distribution date (2025-05-25) 2025-05-25 00:35:29 +00:00
B
6a871b2879 🧑‍💻 Get E axis in FTMotion::loadBlockData (#27870)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
2025-05-24 19:21:06 -05:00
Scott Lahteine
bd9d7a3c4d 🩹 Fix MKS UI E Max Feedrate items 2025-05-24 17:17:49 -05:00
Scott Lahteine
2976bb48ed 🔨 Better FT Motion menu string code 2025-05-24 16:57:03 -05:00
ellensp
4f93f31af0 🔨 Fix Windows/ReARM upload (#27872) 2025-05-24 16:53:52 -05:00
ellensp
d76c8c1fbd 🩹 Fix ProUI Linear Advance menu (#27878)
Followup to #27818
2025-05-24 16:49:44 -05:00
Keith Bennett
86c564121e 🩹 Fix Bluesky badge (#27879) 2025-05-24 15:38:51 -05:00
Scott Lahteine
db137df6df 🔨 TMC2240 Makefile update 2025-05-24 03:14:28 -05:00
Scott Lahteine
202ec4b58f Trinamic TMC2240 (SPI) (#25974)
Co-Authored-By: David Buezas <david.buezas@gmail.com>
Co-Authored-By: z1996xm <102506464+z1996xm@users.noreply.github.com>
2025-05-23 21:11:50 -05:00
thinkyhead
1258657b8d [cron] Bump distribution date (2025-05-24) 2025-05-24 00:30:50 +00:00
Scott Lahteine
f49e730b23 🔧 Allow TMCStepper with Zonestar ZM3 E2xx 2025-05-23 01:28:20 -05:00
thinkyhead
aa02bb05d3 [cron] Bump distribution date (2025-05-23) 2025-05-23 00:32:07 +00:00
Scott Lahteine
e7662920a6 🩹 Fix delay µs > 32767
Fixes #27753
2025-05-22 13:41:59 -05:00
thinkyhead
9c9ed690f7 [cron] Bump distribution date (2025-05-21) 2025-05-21 00:32:16 +00:00
Scott Lahteine
a4382b4dcd 🧑‍💻 Fix max_isr_rate sign warnings 2025-05-20 16:24:20 -05:00
Vovodroid
d5723fcafd 🔧 Allow SMOOTH_LIN_ADVANCE + NONLINEAR_EXTRUSION (#27861) 2025-05-20 14:52:51 -05:00
Scott Lahteine
af553d5fbd 🔨 Solve a linker error
Fixes #27864
2025-05-19 20:08:56 -05:00
thinkyhead
3cd945ab5d [cron] Bump distribution date (2025-05-20) 2025-05-20 00:32:44 +00:00
Scott Lahteine
ade6dbf01e 🔧 Fix Speed/Flow edit options (#27863)
Fixes #27849
2025-05-18 21:13:30 -05:00
Fly3DTeam
88a8e2127d 🔧 TMC Baud Rate for FLY D5/D7 (#27860) 2025-05-18 21:12:07 -05:00
thinkyhead
fe747ae4bf [cron] Bump distribution date (2025-05-19) 2025-05-19 00:37:46 +00:00
Scott Lahteine
bd4900d6cd Pre-fetch configs for CI tests 2025-05-18 18:56:32 -05:00
thinkyhead
8643fa0afb [cron] Bump distribution date (2025-05-16) 2025-05-16 00:32:02 +00:00
Scott Lahteine
487542083b 🧑‍💻 Update Sim, fix Mac native gcc 2025-05-15 15:54:17 -05:00
thinkyhead
b79f7f203a [cron] Bump distribution date (2025-05-15) 2025-05-15 00:30:52 +00:00
Matheus Mösken Diegues
0927e49756 🌐 README in Portuguese (Brazil) (#27854) 2025-05-14 15:23:04 -05:00
Keith Bennett
fbea4c6048 ✏️ Fix variant docs typo (#27850) 2025-05-14 15:18:53 -05:00
Scott Lahteine
4a0b3d1c9b 🧑‍💻 Consolidate MIN/MAX/STOP endstop pin assign (#27839) 2025-05-14 15:17:58 -05:00
ellensp
8e0f271f55 🔨 ESP3DLib update for compatibility (#27851) 2025-05-14 13:57:18 -05:00
Giuliano
8f13c1ecb2 🌐 Shorten Italian messages (#27855) 2025-05-14 13:55:45 -05:00
ellensp
10ecea62c1 🩹 Fix 'PIN_EXIST' typo (#27856) 2025-05-14 13:54:48 -05:00
thinkyhead
7a841cd8cf [cron] Bump distribution date (2025-05-14) 2025-05-14 00:31:35 +00:00
Scott Lahteine
c8265d61d5 🚸 Include 'R' in M208 report
Followup to #21335
2025-05-13 17:14:57 -05:00
Scott Lahteine
eaa836b6fc 🎨 May 13 code format 2025-05-13 16:52:54 -05:00
Scott Lahteine
5a88a80690 🚸 Extend M360 (a Repetier code) 2025-05-13 16:50:41 -05:00
David Buezas
12fdde24d8 ️ Optimize Smooth Linear Advance (via fixed-point) (#27818) 2025-05-13 16:14:04 -05:00
thinkyhead
4de6d655ac [cron] Bump distribution date (2025-05-10) 2025-05-10 00:30:25 +00:00
Scott Lahteine
b12028f4dd 🧑‍💻 ALIM(I,ARR) macro 2025-05-09 16:37:06 -05:00
Scott Lahteine
54c1a1df4e 🧑‍💻 Singleton notation 2025-05-09 16:23:37 -05:00
Scott Lahteine
fad7bc66e9 🧑‍💻 Use 'DISTINCT_E_FACTORS' 2025-05-09 16:23:14 -05:00
Scott Lahteine
6cda10de0f 🧑‍💻 Relocate some factory reset, etc. 2025-05-09 16:21:29 -05:00
B
b22df8b189 🧑‍💻 Fix GD32 EEPROM timings (#27846) 2025-05-09 11:58:25 -05:00
thinkyhead
94e2558e6c [cron] Bump distribution date (2025-05-09) 2025-05-09 00:31:31 +00:00
B
fd117480d2 ️ GD32: Fast GPIO optimization (#27845) 2025-05-08 16:17:47 -05:00
Scott Lahteine
72f3a4ac31 ️ Optimal recalculate_max_e_jerk 2025-05-08 13:46:02 -05:00
thinkyhead
aa7af2e2ea [cron] Bump distribution date (2025-05-08) 2025-05-08 00:31:45 +00:00
ellensp
a4d254ee62 🚸 Fix 16x4 SD Print Progress display (#27844) 2025-05-07 13:36:06 -05:00
David Buezas
222efe1382 🔧 No SMOOTH_LIN_ADVANCE + NONLINEAR_EXTRUSION (#27817) 2025-05-06 22:15:44 -05:00
Scott Lahteine
d806175a80 OTA_FIRMWARE_UPDATE (Creality STM32F401RE)
Followup to #25773
2025-05-06 22:10:44 -05:00
thinkyhead
5266ffb922 [cron] Bump distribution date (2025-05-07) 2025-05-07 00:31:25 +00:00
Scott Lahteine
b7a1681d38 🔨 Fix some build_flags inheritance 2025-05-05 22:15:22 -05:00
Scott Lahteine
3a3c3b8a22 🔨 Fix build flags for env:mks_monster8_usb_flash_drive 2025-05-05 20:32:02 -05:00
Andrew
67948ad6c6 🚸 Fix ProUI LCD wake up (2) (#27835)
Followup to #27832
2025-05-05 20:19:52 -05:00
thinkyhead
e2583b4f85 [cron] Bump distribution date (2025-05-06) 2025-05-06 00:31:19 +00:00
B
c9e7d6f55c 🧑‍💻 Update GD32 MFL Platform, Arduino Core (#27830) 2025-05-05 13:08:45 -05:00
Scott Lahteine
735cd9a092 🩹 Fix TH3D EZ V2 sensorless homing 2025-05-05 12:28:11 -05:00
thinkyhead
555b080d85 [cron] Bump distribution date (2025-05-05) 2025-05-05 00:33:33 +00:00
Scott Lahteine
44ef6e2b70 🩹 Fix Y_STOP_PIN alias for Y_MAX_PIN 2025-05-04 15:20:21 -05:00
Scott Lahteine
9bbbcd439b 🧑‍💻 Clarify parking_extruder_unpark_after_homing 2025-05-04 13:55:50 -05:00
Scott Lahteine
cbe8a6867c 🧑‍💻 Fix mac_gcc HOMEBREW_PATH 2025-05-03 21:56:33 -05:00
MrKuskov
1f31027fd2 FILAMENT_MOTION_DISTANCE_MM (#27812)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
2025-05-03 21:11:23 -05:00
InsanityAutomation
4e1e7fa1b0 SWITCHING_NOZZLE_LIFT_TO_PROBE (#27804) 2025-05-03 21:07:40 -05:00
Andrew
414951e42c 🚸 Fix ProUI LCD wake up (#27832) 2025-05-03 20:08:27 -05:00
Scott Lahteine
a8d18a0554 🎨 ProUI code style 2025-05-03 20:03:26 -05:00
thinkyhead
b9ffe93d1f [cron] Bump distribution date (2025-05-04) 2025-05-04 00:34:56 +00:00
B
0c72dc376c 🔨 Creality V4.2.7 (GD32) (#27796) 2025-05-03 15:20:29 -05:00
thinkyhead
019915b097 [cron] Bump distribution date (2025-05-02) 2025-05-02 18:08:56 +00:00
Scott Lahteine
b74c81d3e4 🔧 Bricolemon cleanup, update (#27829) 2025-05-02 11:58:45 -05:00
staff1010
e16885c558 🚸 Fix MKS UI G-code result display (#27825)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
2025-05-02 11:13:26 -05:00
thinkyhead
4096beaf52 [cron] Bump distribution date (2025-05-01) 2025-05-01 00:34:50 +00:00
ellensp
48cc310c58 🔧 More thorough TEMP_SENSOR_* cleanup (#27826) 2025-04-30 14:37:11 -05:00
Scott Lahteine
1c719fd10d 🎨 Cosmetic 04-29 2025-04-30 10:28:04 -05:00
thinkyhead
e3433ea599 [cron] Bump distribution date (2025-04-30) 2025-04-30 00:30:45 +00:00
Scott Lahteine
585cbbb203 🩹 Minor ExtUI/DGUS code fix/cleanup 2025-04-29 13:42:02 -05:00
thinkyhead
fea70777df [cron] Bump distribution date (2025-04-29) 2025-04-29 06:10:06 +00:00
Norman Chong
827c03b056 🩹 Fix Ultimain 2 MOTOR_CURRENT_PWM_RANGE (#27705) 2025-04-28 22:18:59 -05:00
Scott Lahteine
85f6090f20 🔧 Apply DEFAULT_VOLUME on boot 2025-04-28 22:09:09 -05:00
Scott Lahteine
99c29cd924 🚸 Simplified Media Menu 2025-04-28 22:09:09 -05:00
Scott Lahteine
f78aaf9562 🚸 Detect multi-volume insert / remove 2025-04-28 22:09:09 -05:00
Scott Lahteine
38d6d61912 🧑‍💻 MSC for RP2040 - alpha 2025-04-28 21:36:30 -05:00
Scott Lahteine
4d8f82df32 🧑‍💻 Organize some HAL code 2025-04-28 21:36:30 -05:00
thinkyhead
75d60b77ba [cron] Bump distribution date (2025-04-27) 2025-04-27 00:37:52 +00:00
Scott Lahteine
f60bc278fa 🩹 Misc. HAL, flag fixes 2025-04-26 17:22:03 -05:00
Scott Lahteine
e0d8ea57a8 🧑‍💻 Group HAL/*/eeprom code 2025-04-26 17:21:36 -05:00
thinkyhead
ad71b81b0c [cron] Bump distribution date (2025-04-25) 2025-04-25 00:31:00 +00:00
Scott Lahteine
1383a4e413 🔧 Allow SMOOTH_LIN_ADVANCE with DISTINCT_E_FACTORS 2025-04-23 22:04:42 -05:00
Scott Lahteine
06ef78dd19 🧑‍💻 Specific SD / FD methods 2025-04-23 19:48:24 -05:00
Scott Lahteine
5c0e8d594d 🧑‍💻 Stub CardReader, proper methods 2025-04-23 19:48:24 -05:00
Scott Lahteine
d16667838f 🧑‍💻 Clarify some SD / FD build flags 2025-04-23 19:48:24 -05:00
thinkyhead
62f2b8fc17 [cron] Bump distribution date (2025-04-24) 2025-04-24 00:30:48 +00:00
Scott Lahteine
1e6326e85f 🌐 Language for SD / USB 2025-04-23 16:33:19 -05:00
Scott Lahteine
e3a28afd51 🩹 Fix AboutScreen::onTouchEnd warning 2025-04-23 15:09:14 -05:00
Scott Lahteine
ef9cec9e40 🧑‍💻 FastIO AT90USB pins 46-47 (2)
also lang
2025-04-23 13:43:15 -05:00
Scott Lahteine
3df75188f3 🚸 Fix TFT GLCD "Select from Media" glitch 2025-04-23 12:57:53 -05:00
Scott Lahteine
7ee745b2da 🧑‍💻 TFT GLCD "panel_detected" 2025-04-23 12:57:50 -05:00
Scott Lahteine
3696cc3513 🚸 Clear alert on menu click 2025-04-23 12:55:01 -05:00
Scott Lahteine
efd875766a 🚸 "Inverted" text on GLCD 2025-04-23 12:55:01 -05:00
thinkyhead
21dadce958 [cron] Bump distribution date (2025-04-23) 2025-04-23 00:30:30 +00:00
Scott Lahteine
4b419eefd2 🔥 DEFAULT_VOLUME 2025-04-22 18:04:04 -05:00
Scott Lahteine
28a1355f29 🌐 Fix extra MSG_ATTACH_USB_MEDIA 2025-04-22 18:04:04 -05:00
InsanityAutomation
9a901941aa 🐛 Watchdog Reset PIO on DUE to prevent hang (#27803)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
2025-04-22 12:01:14 -05:00
thinkyhead
db3c5dd877 [cron] Bump distribution date (2025-04-22) 2025-04-22 06:09:47 +00:00
Scott Lahteine
24928f93ba 🧑‍💻 FastIO AT90USB pins 46-47 2025-04-21 20:25:13 -05:00
thinkyhead
1e009c2aa5 [cron] Bump distribution date (2025-04-21) 2025-04-21 00:32:59 +00:00
Scott Lahteine
d434729da6 🐛🔧 Move extra volume flags 2025-04-20 19:25:37 -05:00
B
b23f86f83f 🧑‍💻 GD32 fast write non-bool (#27806) 2025-04-20 12:12:02 -05:00
Scott Lahteine
d3687d933c 🧑‍💻 Add stepper/control.cpp (2) 2025-04-20 12:03:09 -05:00
Keith Bennett
4b32be9df0 🔧 Malyan M300 / Monoprice Mini alternate orientation (#27808) 2025-04-20 11:04:48 -05:00
David Buezas
f6c8915545 SMOOTH_LIN_ADVANCE (#27710)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
2025-04-20 00:18:45 -05:00
Scott Lahteine
b97b09413f 🧑‍💻 Add stepper/control.cpp 2025-04-19 20:13:34 -05:00
thinkyhead
87f26e77ff [cron] Bump distribution date (2025-04-20) 2025-04-20 00:33:22 +00:00
Scott Lahteine
26b3f0b00f 🧑‍💻 Planner::max_jerk always xyze_pos_t 2025-04-18 19:57:11 -05:00
B
067c830e84 📌 GD32 platform v1.0.3 (and Arduino v1.0.4) (#27801) 2025-04-18 19:55:26 -05:00
B
d40bf0d6b2 🐛 Fix GD32 ignoring SERIAL_DMA on init (#27800) 2025-04-18 19:53:18 -05:00
ellensp
d009c48b11 Simulator: Virtual servos, BLTouch (#27779)
Co-authored-by: Christopher Pepper <p3p@p3psoft.co.uk>
2025-04-18 19:43:31 -05:00
thinkyhead
3c32770faf [cron] Bump distribution date (2025-04-19) 2025-04-19 00:28:50 +00:00
ellensp
a653c3aca0 🎨 Binary Stream cleanup (#27799) 2025-04-18 17:36:22 -05:00
thinkyhead
7b083be5c5 [cron] Bump distribution date (2025-04-18) 2025-04-18 00:29:57 +00:00
Scott Lahteine
65b8ced80c 🧑‍💻 Clarify DEPLOY_ALARM 2025-04-17 17:29:20 -05:00
Scott Lahteine
4ea75ad284 🎨 Cosmetic updates, fix alias warning 2025-04-17 15:43:40 -05:00
Scott Lahteine
58f03953b8 🩹 Fix Linear Advance edit item 2025-04-17 15:43:35 -05:00
thinkyhead
62c1c116f7 [cron] Bump distribution date (2025-04-17) 2025-04-17 00:30:15 +00:00
Scott Lahteine
bd382fb8a1 🔨 Suppress generate_version (for now) 2025-04-16 14:43:53 -05:00
Scott Lahteine
f3be22c4ff 🎨 Delete libsam_sam3x8e_gcc_rel.a.txt 2025-04-16 14:43:50 -05:00
Scott Lahteine
8867c45831 🎨 Fix and/or warning 2025-04-16 14:43:50 -05:00
thinkyhead
c0e108b21d [cron] Bump distribution date (2025-04-16) 2025-04-16 00:30:52 +00:00
Andrew
f149e14d1a 🚸 Fix missing "echo:" in some reports (#27794) 2025-04-15 17:36:27 -05:00
Scott Lahteine
1242e875aa 🚸 More frequent button polling (#27797) 2025-04-15 15:49:23 -05:00
thinkyhead
1d4c002c2a [cron] Bump distribution date (2025-04-15) 2025-04-15 00:30:55 +00:00
B
7cd1b7708f 🐛 Fix Servos in GD32 HAL (#27791) 2025-04-14 17:52:51 -05:00
feldi12
5e8a5230a3 ️ Optimize PID, increase PID range (#27740) 2025-04-14 17:08:40 -05:00
DerAndere
b5d7b4aee6 DEFAULT_ACCELERATION_SPINDLE (#27759) 2025-04-14 16:50:26 -05:00
Scott Lahteine
7d82f95df8 🩹 Fix DWIN_CREALITY_LCD_STD_ICONS 2025-04-14 16:47:50 -05:00
thinkyhead
69464790e2 [cron] Bump distribution date (2025-04-14) 2025-04-14 00:32:24 +00:00
ellensp
db42741537 🔧 Raise MBL grid size limit (#27790)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
2025-04-13 03:27:45 -05:00
Scott Lahteine
9a6bf16938 🚸 Some default filament runout pins 2025-04-13 03:18:43 -05:00
Scott Lahteine
c173ecd89a 🎨 Misc. serial echo/char 2025-04-13 02:06:50 -05:00
narno2202
aee25d75ea 🧑‍💻 DGUSScreenHandler hack for MKS (#27789) 2025-04-13 01:36:21 -05:00
Scott Lahteine
a55355d088 🚸 FT Motion menu fix, neaten 2025-04-13 01:10:14 -05:00
Scott Lahteine
6d2dfcaa1c 🩹 Fix i2c encoder report 2025-04-13 01:10:14 -05:00
thinkyhead
d1947fac07 [cron] Bump distribution date (2025-04-13) 2025-04-13 00:56:12 +00:00
Keith Bennett
893dddcbd1 📝 Malyan LCD uses encoders (#27781) 2025-04-12 15:12:31 -05:00
thinkyhead
8cb6e57789 [cron] Bump distribution date (2025-04-10) 2025-04-10 00:31:25 +00:00
Andrew
47820cac8a 🎨 Whitespace cleanups (#27784) 2025-04-09 19:08:10 -05:00
Scott Lahteine
6f5e6fd25b 🩹 TFT_BUFFER_SIZE => _WORDS
Followup to #26011
2025-04-09 18:47:42 -05:00
thinkyhead
db4990f2c4 [cron] Bump distribution date (2025-04-08) 2025-04-08 00:29:33 +00:00
Scott Lahteine
cbd79a5e87 Tweak pip/PIO caching 2025-04-07 18:29:23 -05:00
Boyd
bdc0bd0eef Native GD32 support for Aquila v1.0.1 (#27765) 2025-04-07 18:22:58 -05:00
narno2202
ed4afab004 🚸 Fix FT Motion Linear Advance MarlinUI edit item (#27786) 2025-04-07 17:38:11 -05:00
Andrey Samokhin
6984c7f308 🔧 Max Stepper Rate sanity-checks (#27764) 2025-04-06 21:18:01 -05:00
Scott Lahteine
7bfecf659b 🧑‍💻 Misc. dgus/mks comments 2025-04-06 21:15:40 -05:00
narno2202
d7b73542a1 🚸 Refactor MKS H43 LCD (2) (#27780)
Followup to #27776
2025-04-06 20:58:05 -05:00
thinkyhead
9f0879785e [cron] Bump distribution date (2025-04-07) 2025-04-07 00:31:15 +00:00
Scott Lahteine
bc85f5bebf 🧑‍💻 Add Parser::has_string 2025-04-06 13:49:51 -05:00
Vovodroid
493c5eec21 🚸 Report M48 Max Delta (#26286) 2025-04-06 13:42:14 -05:00
thinkyhead
489727330b [cron] Bump distribution date (2025-04-05) 2025-04-05 06:08:15 +00:00
narno2202
c5de0c69e5 🚸 Refactor MKS H43 LCD (#27776)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
2025-04-04 23:17:30 -05:00
schnurly
7a257ef3e1 🚸 Fix MKS UI print done state (#27730) 2025-04-04 22:27:50 -05:00
Scott Lahteine
c080518b12 🎨 DGUS/MKS cosmetic fixes, most 2025-04-04 22:09:58 -05:00
thinkyhead
c6dad4d1aa [cron] Bump distribution date (2025-04-03) 2025-04-03 00:29:22 +00:00
Scott Lahteine
a4c35b1555 🚸 Disable MIN_CHAMBER_POWER 2025-04-01 23:40:35 -05:00
Scott Lahteine
9758f5e0ce 📝 Informative PID comments 2025-04-01 23:29:45 -05:00
thinkyhead
2f7d88d5c3 [cron] Bump distribution date (2025-04-02) 2025-04-02 00:30:08 +00:00
Scott Lahteine
13db322f0e 🎨 GD32 MFL followup
Followup to #27744
2025-04-01 04:32:04 -05:00
Scott Lahteine
30a10077cf 🧑‍💻 Menu code cleanup 2025-04-01 03:18:52 -05:00
Scott Lahteine
26551c17c2 🔨🩹 Drop old ULTIPANEL sanity check 2025-04-01 02:38:40 -05:00
Scott Lahteine
a80e790cf6 🔨🩹 Pass Ultipanel with HAS_SLOW_BUTTONS 2025-04-01 01:22:20 -05:00
Scott Lahteine
546a014a59 🔨🩹 Pass Ultipanel with HAS_TOUCH_BUTTONS 2025-03-31 23:33:59 -05:00
Scott Lahteine
2004198b07 🔨🩹 Pass Ultipanel with TOUCH_SCREEN 2025-03-31 22:53:47 -05:00
Scott Lahteine
59423da42f 🧑‍💻 HAS_MOTOR_CURRENT_PWM_Z 2025-03-31 22:33:11 -05:00
Boyd
99b790cc92 🔨 Fix GCC14 / C++23 volatile warnings (#27768) 2025-03-31 22:33:11 -05:00
Scott Lahteine
766dfda80e 🔨🩹 Pass Ultipanel with ADC_KEYPAD 2025-03-31 22:33:10 -05:00
thinkyhead
d638ee02c6 [cron] Bump distribution date (2025-04-01) 2025-04-01 00:34:19 +00:00
Scott Lahteine
15ce5d0612 🔨🩹 Misc. code corrections, notes 2025-03-30 23:34:15 -05:00
thinkyhead
d2b47c354c [cron] Bump distribution date (2025-03-31) 2025-03-31 00:31:54 +00:00
Scott Lahteine
43177af21c 🧑‍💻 Digipot settings cleanup 2025-03-30 14:57:01 -05:00
Scott Lahteine
73ed54308a 🧑‍💻 Move ENABLE to indirection.h
Followup to add72fd045
2025-03-30 14:56:58 -05:00
thinkyhead
fd17cc962b [cron] Bump distribution date (2025-03-30) 2025-03-30 06:08:25 +00:00
ellensp
aad10ea1c7 🐛 Fix E DIR init (#27770)
Followup to add72fd045
2025-03-29 20:58:16 -05:00
thinkyhead
849e432d62 [cron] Bump distribution date (2025-03-28) 2025-03-28 06:09:42 +00:00
Boyd
78d6fec652 🚀 HAL for GD32 MFL (Creality v4.2.2) (#27744) 2025-03-28 00:31:45 -05:00
Fermín Olaiz
f6eaca6fcd 🩹 MKS_TINYBEE ADC reference voltage warning (#27755) 2025-03-27 22:18:08 -05:00
Scott Lahteine
efa175820f 🧑‍💻 Allow for tests on macOS / Windows 2025-03-27 20:57:17 -05:00
Scott Lahteine
448ff71899 🧑‍💻 Tweak MAX7219 test pattern 2025-03-27 20:16:19 -05:00
Scott Lahteine
c1e8d46d21 ♻️ ELAPSED / PENDING (ms, start, duration) 2025-03-27 20:16:19 -05:00
Scott Lahteine
b5068bbc17 🔨 Reduce warnings on types 2025-03-27 17:36:16 -05:00
Scott Lahteine
9a8ad9d101 🎨 Comment long functions end 2025-03-27 17:34:33 -05:00
thinkyhead
5c59abaf6f [cron] Bump distribution date (2025-03-27) 2025-03-27 12:11:04 +00:00
Scott Lahteine
460bf112d8 EDITABLE_HOMING_CURRENT (#27760) 2025-03-27 03:33:27 -05:00
Scott Lahteine
7bd74fecbb 🧑‍💻 Language tweaks
lang
2025-03-27 02:29:58 -05:00
Scott Lahteine
add72fd045 🧑‍💻 Individual TMC flags 2025-03-27 02:29:11 -05:00
Scott Lahteine
ac5fa61de5 🧑‍💻 More robust TERN_ macro 2025-03-27 02:29:04 -05:00
thinkyhead
dda42fb599 [cron] Bump distribution date (2025-03-26) 2025-03-26 00:29:30 +00:00
Scott Lahteine
a8fea3d674 🩹 Cleanup (for STM32 I2C LCD)
Followup to 9a8b1eab
2025-03-25 16:41:48 -05:00
Scott Lahteine
1701fd8f64 🔥 DELTA_MAX_RADIUS 2025-03-25 16:39:09 -05:00
thinkyhead
14fa705771 [cron] Bump distribution date (2025-03-22) 2025-03-22 00:28:38 +00:00
Scott Lahteine
91a87f45d9 🧑‍💻 Some millis() 'unsigned long' 2025-03-21 14:00:44 -05:00
Teemo Vaas
363f324179 🚸 Fix G4 Dwell overflow 2025-03-21 13:59:29 -05:00
ellensp
a68b70de15 📌 Clean up ESP32 build (#27672) 2025-03-20 21:48:18 -05:00
ellensp
c29b44fcca 🩹 Fix Simulator KILL pin overlap (#27668) 2025-03-20 21:44:43 -05:00
ellensp
2cf4d02a32 🩹 Fix TOUCH_UI_FTDI_EVE build (#27667)
Followup to #27275
2025-03-20 21:03:14 -05:00
Scott Lahteine
9a8b1eab93 🩹 Cleanup (for STM32 I2C LCD)
In advance of #26433
2025-03-20 20:28:30 -05:00
thinkyhead
57fe45a2a6 [cron] Bump distribution date (2025-03-21) 2025-03-21 00:29:17 +00:00
Scott Lahteine
5d755676a9 🧑‍💻 Silence findMissingTranslations grep output 2025-03-19 20:40:54 -05:00
Andrew
d9f2c6444f 🚸 ProUI "View Mesh (grid)" item (#26181)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
2025-03-19 20:01:47 -05:00
thinkyhead
4895388909 [cron] Bump distribution date (2025-03-20) 2025-03-20 00:28:49 +00:00
Scott Lahteine
c7e64371c9 🧑‍💻 ProUI: pre-calculate menu sizes 2025-03-19 17:36:19 -05:00
ellensp
58749a9a0e 🩹 BTT Manta M8P V2.0 fixes (#27748)
The notorious curse of incorrect BTT pins rears its head once again!
2025-03-19 16:02:01 -05:00
ellensp
26aac7aaab 🐛 Fix RAMPS AUX1 RX/TX pins (#27745) 2025-03-19 15:45:30 -05:00
Scott Lahteine
a7684ecd67 🧑‍💻 Reuse MarlinUI::apply_preheat 2025-03-19 15:31:07 -05:00
Scott Lahteine
fc49efcaef 🧑‍💻 Lambda for MarlinUI media items 2025-03-19 14:36:04 -05:00
Sophist
4f3279fa31 🚸 Move About / Games to menu bottom (#26820) 2025-03-18 22:28:56 -05:00
ellensp
719bb9c03b 🔧 LCD_PINS_ENABLE => LCD_PINS_EN (#27700) 2025-03-18 21:14:58 -05:00
ellensp
15ee0d0e08 MAG_MOUNTED_PROBE_SERVO_NR (#27551)
Co-authored-by: gjdodd <graham.dodd@airintake.co.uk>
2025-03-18 20:39:24 -05:00
thinkyhead
23fa94178e [cron] Bump distribution date (2025-03-19) 2025-03-19 00:31:12 +00:00
Scott Lahteine
4ad6fa59df 🧑‍💻 More extensible Temperature::lcd_preheat 2025-03-18 18:35:39 -05:00
InsanityAutomation
367cea0d0d 🚸 Chamber Preheat completion (#26864)
Followup to #21156

Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
2025-03-17 21:35:20 -05:00
thinkyhead
0a07bba213 [cron] Bump distribution date (2025-03-18) 2025-03-18 00:28:49 +00:00
Andrew
2f4f2bce15 🔨 PowerShell compatibility (#27720) 2025-03-17 18:04:59 -05:00
David Buezas
0d87dd9d51 LCD_DOUBLE_BUFFER (#26713) 2025-03-17 16:27:51 -05:00
Scott Lahteine
e11a5ee717 📝 Some config comment updates
Co-Authored-By: Andrew <18502096+classicrocker883@users.noreply.github.com>
2025-03-17 16:24:05 -05:00
Scott Lahteine
e8c0363051 🎨 cosmetics 2025-03-17 15:19:21 -05:00
Scott Lahteine
2d6454b352 🩹 Update some SD SS pins
Followup to #27650
2025-03-17 15:06:35 -05:00
ellensp
28548efa75 🚸 Improve TFT touch calibrate (#26200) 2025-03-17 12:54:21 -05:00
thinkyhead
da0bef50e1 [cron] Bump distribution date (2025-03-17) 2025-03-17 00:30:31 +00:00
Scott Lahteine
b954959f55 M550 CONFIGURABLE_MACHINE_NAME (#27731) 2025-03-16 03:24:00 -05:00
Scott Lahteine
434bf81f8e 🩹 Fix max Y/Z endstop pins on GMARSH X6 REV1 2025-03-16 00:52:22 -05:00
Scott Lahteine
82d3d78e31 🔧 BOARD_LCD_SERIAL_PORT 2025-03-15 21:40:06 -05:00
thinkyhead
fb4d465360 [cron] Bump distribution date (2025-03-16) 2025-03-16 00:32:26 +00:00
Marcio T.
3827ceaf66 🩹 Fix color game compile (#27721) 2025-03-15 17:31:32 -05:00
thinkyhead
6ba08130f0 [cron] Bump distribution date (2025-03-15) 2025-03-15 00:28:35 +00:00
Keith Bennett
78f871567f 🔨 Rename FYSETC S6/Spider envs (#27122) 2025-03-14 13:11:45 -05:00
thinkyhead
9e30173b13 [cron] Bump distribution date (2025-03-14) 2025-03-14 00:28:40 +00:00
ellensp
f0bd400002 🩹🔧 Fix LCD_LANGUAGE for HD44780 (#27729) 2025-03-13 17:21:28 -05:00
Scott Lahteine
0fa3d2642a MIN_POWER (#27742)
Followup to #14746

Co-authored-by: mikeshub <2420379+mikeshub@users.noreply.github.com>
2025-03-13 17:19:23 -05:00
ellensp
4cf4647c9a 🔧 More serial ports for Teensy HALs (#27736)
Followup to #27648

Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
2025-03-12 20:35:12 -05:00
thinkyhead
5766dc0ece [cron] Bump distribution date (2025-03-13) 2025-03-13 00:29:12 +00:00
Scott Lahteine
01990f2bf4 📝 Document planner modifier methods 2025-03-12 17:28:22 -05:00
thinkyhead
d74ee8ccc4 [cron] Bump distribution date (2025-03-12) 2025-03-12 00:28:38 +00:00
Scott Lahteine
953b6844ca 📝 Config comments with units 2025-03-10 22:12:40 -05:00
thinkyhead
e6ccf3b72b [cron] Bump distribution date (2025-03-11) 2025-03-11 00:28:55 +00:00
Scott Lahteine
d9229ff355 🔨 Fix CONFIG_EXPORT 1, (embed = 101)
Followup to #27628
See #27612
2025-03-10 19:06:47 -05:00
thinkyhead
ee35929b61 [cron] Bump distribution date (2025-03-10) 2025-03-10 00:25:20 +00:00
Scott Lahteine
07b979012a 🧑‍💻 Probe Wizard comments 2025-03-09 15:52:25 -05:00
Scott Lahteine
126e78dcce 🐛 Fix quoted string value detection 2025-03-09 15:46:13 -05:00
thinkyhead
e02de3a256 [cron] Bump distribution date (2025-03-07) 2025-03-07 06:09:07 +00:00
narno2202
97a7c2160e ️ FT Motion: Fill window in makeVector (#27718) 2025-03-06 19:43:02 -06:00
thinkyhead
caf5d5b134 [cron] Bump distribution date (2025-03-05) 2025-03-05 06:09:08 +00:00
Fly3DTeam
05a46084b6 FLY_D5, FLY_DP5, FLY_D7, FLY_D8, FLY_D8_PRO, FLY_SUPER8_PRO, FLY_CDY_V3 (#27580) 2025-03-04 21:08:04 -06:00
thinkyhead
e676d833a3 [cron] Bump distribution date (2025-03-02) 2025-03-02 00:30:52 +00:00
ellensp
73a0f33767 BUILD_INFO_MENU_ITEM (#27590) 2025-03-01 17:45:31 -06:00
ellensp
e787c8f26b 🚸 Fix extra echo: in M218 report (#27674) 2025-03-01 15:00:28 -06:00
Scott Lahteine
147dcaf600 📝 Update MAX31865 comment 2025-03-01 14:30:15 -06:00
Farva42
dd3bf2995b 🔧 Static assert Dual X min/max (#27701) 2025-03-01 00:26:56 -06:00
thinkyhead
142177426b [cron] Bump distribution date (2025-03-01) 2025-03-01 06:07:59 +00:00
Keith Bennett
072b90d105 💚 Fix Simulator CI build (#27712) 2025-02-28 20:57:40 -06:00
thinkyhead
efba06c4ce [cron] Bump distribution date (2025-02-20) 2025-02-20 00:28:00 +00:00
Scott Lahteine
2cc35a9ad1 🎨 Wrap BABYSTEP_SIZE_* 2025-02-19 15:36:59 -06:00
Farva42
b748506230 🩹 Fix MKS boards runout sensor pins (#27687)
Followup to #27640
2025-02-19 12:45:40 -06:00
thinkyhead
c3a4ef77af [cron] Bump distribution date (2025-02-19) 2025-02-19 06:08:42 +00:00
narno2202
86c1fde309 ️ Always "optimize" FT Motion DIR states (#27692) 2025-02-18 19:38:28 -06:00
Luc
89def456e8 🔨 Fix pioarduino path check for xtensa-esp32 (#27693) 2025-02-18 19:33:54 -06:00
thinkyhead
0518737119 [cron] Bump distribution date (2025-02-16) 2025-02-16 00:30:26 +00:00
Keith Bennett
12b3f18bb2 🔨 mac_gcc: Use configured brew/port paths (#27655) 2025-02-15 16:11:57 -06:00
thinkyhead
4d0c6841f8 [cron] Bump distribution date (2025-02-04) 2025-02-04 12:10:52 +00:00
Scott Lahteine
99c3a7136d 🎨 Standard logical FLIP(X) 2025-02-03 15:43:17 -06:00
Scott Lahteine
cd3997f045 🧑‍💻 More binary file types 2025-02-03 15:43:17 -06:00
thinkyhead
479074ccba [cron] Bump distribution date (2025-02-02) 2025-02-02 06:07:35 +00:00
Scott Lahteine
a21fc27056 🎨 Minor config style updates 2025-02-01 00:12:26 -06:00
thinkyhead
485fbf2040 [cron] Bump distribution date (2025-01-28) 2025-01-28 06:08:30 +00:00
Scott Lahteine
09a519bfb5 🔥 Not using .astylerc 2025-01-27 21:18:29 -06:00
Scott Lahteine
81ef02e41f 🔨 Fix sim build with gcc-14 2025-01-27 21:17:53 -06:00
thinkyhead
0226692e6b [cron] Bump distribution date (2025-01-27) 2025-01-27 00:28:09 +00:00
Andrew
0cd1d9c3c9 🩹 Update some hex-printing (#27654)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
2025-01-25 23:58:40 -06:00
Scott Lahteine
ab7137ab8e 🩹 RP2040 has PIN_SPI_SS
Followup to #27650
2025-01-25 20:17:59 -06:00
Scott Lahteine
84113367fc 📝 CardReader comments 2025-01-25 20:17:59 -06:00
thinkyhead
c24ecfb6f0 [cron] Bump distribution date (2025-01-26) 2025-01-26 00:27:46 +00:00
Scott Lahteine
442f0baf14 🔨 Script for gcc setup on macOS (Simulator build) 2025-01-25 17:11:37 -06:00
thinkyhead
40aab1e298 [cron] Bump distribution date (2025-01-25) 2025-01-25 00:26:20 +00:00
Scott Lahteine
09fbe372da 🔨 Elegoo Neptune boards ("elegoo.bin") (#24895) 2025-01-24 17:53:19 -06:00
Scott Lahteine
279a393e81 🌐 Attach media messages 2025-01-24 17:51:34 -06:00
Scott Lahteine
1e2e0c3a36 🎨 Flash EEPROM pins cleanup 2025-01-24 17:51:34 -06:00
Scott Lahteine
86f03cf57a 🎨 Shared USB build flags 2025-01-24 17:51:34 -06:00
rondlh
7f598ae66d ️ STM32H7 Serial DMA (#27633) 2025-01-23 21:18:46 -06:00
Andrew
0a598071af 🎨 Adjust some Python formatting (#27649) 2025-01-23 19:48:58 -06:00
thinkyhead
861dd33fa1 [cron] Bump distribution date (2025-01-24) 2025-01-24 00:27:01 +00:00
Scott Lahteine
ac14c65643 ♻️ SD- and SPI-related pins cleanup (#27650) 2025-01-23 18:00:17 -06:00
Scott Lahteine
0f7fb5d88d 🧑‍💻 Media conditionals 2025-01-22 22:46:45 -06:00
Scott Lahteine
428f721cbf 🔧 Sequential Opulo boards 2025-01-22 19:09:08 -06:00
thinkyhead
31bc23b6e3 [cron] Bump distribution date (2025-01-23) 2025-01-23 00:26:51 +00:00
Scott Lahteine
a1ba166740 ♻️ Common serial ports header (#27648) 2025-01-22 14:46:04 -06:00
thinkyhead
88829bd92d [cron] Bump distribution date (2025-01-22) 2025-01-22 06:08:44 +00:00
narno2202
7e0208940b 🚸 Disable FT Motion during Biqu Microprobe use (#27368)
Co-authored-by: Scott Lahteine <thinkyhead@users.noreply.github.com>
2025-01-21 21:10:52 -06:00
Scott Lahteine
12d491c5f7 🐛 Don't reset axis_did_move in ftmotion.reset
Co-Authored-By: narno2202 <130909513+narno2202@users.noreply.github.com>
2025-01-21 21:09:13 -06:00
Scott Lahteine
29635232d3 🔨 Prevent ESP32 bad dependency 2025-01-21 20:57:43 -06:00
thinkyhead
4e72b17a88 [cron] Bump distribution date (2025-01-17) 2025-01-17 00:26:47 +00:00
1432 changed files with 66066 additions and 41503 deletions

View File

@@ -38,14 +38,14 @@
"platformio.platformio-ide",
"marlinfirmware.auto-build",
"editorconfig.editorconfig"
],
]
// Use 'forwardPorts' to make a list of ports inside the container available locally.
// "forwardPorts": [],
// , "forwardPorts": []
// Use 'postCreateCommand' to run commands after the container is created.
// "postCreateCommand": "pip3 install --user -r requirements.txt",
// , "postCreateCommand": "pip3 install --user -r requirements.txt"
// Comment out connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root.
// "remoteUser": "vscode"
// , "remoteUser": "vscode"
}

View File

@@ -8,19 +8,19 @@ In the interest of fostering an open and welcoming environment, we as contributo
Examples of behavior that contributes to creating a positive environment include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
- Using welcoming and inclusive language
- Being respectful of differing viewpoints and experiences
- Gracefully accepting constructive criticism
- Focusing on what is best for the community
- Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a professional setting
- The use of sexualized language or imagery and unwelcome sexual attention or advances
- Trolling, insulting/derogatory comments, and personal or political attacks
- Public or private harassment
- Publishing others' private information, such as a physical or electronic address, without explicit permission
- Other conduct which could reasonably be considered inappropriate in a professional setting
## Our Responsibilities

View File

@@ -11,18 +11,21 @@ The following is a set of guidelines for contributing to Marlin, hosted by the [
[I don't want to read this whole thing, I just have a question!!!](#i-dont-want-to-read-this-whole-thing-i-just-have-a-question)
[How Can I Contribute?](#how-can-i-contribute)
* [Reporting Bugs](#reporting-bugs)
* [Suggesting Features or Changes](#suggesting-features-or-changes)
* [Your First Code Contribution](#your-first-code-contribution)
* [Pull Requests](#pull-requests)
- [Reporting Bugs](#reporting-bugs)
- [Suggesting Features or Changes](#suggesting-features-or-changes)
- [Your First Code Contribution](#your-first-code-contribution)
- [Pull Requests](#pull-requests)
[Styleguides](#styleguides)
* [Git Commit Messages](#git-commit-messages)
* [C++ Coding Standards](#c++-coding-standards)
* [Documentation Styleguide](#documentation)
- [Git Commit Messages](#git-commit-messages)
- [C++ Coding Standards](#c++-coding-standards)
- [Documentation Styleguide](#documentation)
[Additional Notes](#additional-notes)
* [Issue and Pull Request Labels](#issue-and-pull-request-labels)
- [Issue and Pull Request Labels](#issue-and-pull-request-labels)
## Code of Conduct
@@ -31,6 +34,7 @@ This project and everyone participating in it is governed by the [Marlin Code of
## I don't want to read this whole thing I just have a question!!!
> [!NOTE]
>
> Please don't file an issue to ask a question. You'll get faster results by using the resources below.
We have a Message Board and a Facebook group where our knowledgable user community can provide helpful advice if you have questions.
@@ -43,10 +47,10 @@ We have a Message Board and a Facebook group where our knowledgable user communi
If chat is more your speed, you can join the MarlinFirmware Discord server:
* Use the link https://discord.com/servers/marlin-firmware-461605380783472640 to join up as a General User.
* Even though our Discord is pretty active, it may take a while for community members to respond &mdash; please be patient!
* Use the `#general` channel for general questions or discussion about Marlin.
* Other channels exist for certain topics or are limited to Patrons. Check the channel list.
- Use the link https://discord.com/servers/marlin-firmware-461605380783472640 to join up as a General User.
- Even though our Discord is pretty active, it may take a while for community members to respond &mdash; please be patient!
- Use the `#general` channel for general questions or discussion about Marlin.
- Other channels exist for certain topics or are limited to Patrons. Check the channel list.
## How Can I Contribute?
@@ -57,6 +61,7 @@ This section guides you through submitting a Bug Report for Marlin. Following th
Before creating a Bug Report, please test the "nightly" development branch, as you might find out that you don't need to create one. When you are creating a Bug Report, please [include as many details as possible](#how-do-i-submit-a-good-bug-report). Fill out [the required template](ISSUE_TEMPLATE/bug_report.yml), the information it asks for helps us resolve issues faster.
> [!NOTE]
>
> Regressions can happen. If you find a **Closed** issue that seems like your issue, go ahead and open a new issue and include a link to the original issue in the body of your new one. All you need to create a link is the issue number, preceded by #. For example, #8888.
#### How Do I Submit A (Good) Bug Report?
@@ -65,29 +70,29 @@ Bugs are tracked as [GitHub issues](https://guides.github.com/features/issues/).
Explain the problem and include additional details to help maintainers reproduce the problem:
* **Use a clear and descriptive title** for the issue to identify the problem.
* **Describe the exact steps which reproduce the problem** in as many details as possible. For example, start by explaining how you started Marlin, e.g. which command exactly you used in the terminal, or how you started Marlin otherwise. When listing steps, **don't just say what you did, but explain how you did it**. For example, if you moved the cursor to the end of a line, explain if you used the mouse, or a keyboard shortcut or an Marlin command, and if so which one?
* **Provide specific examples to demonstrate the steps**. Include links to files or GitHub projects, or copy/pasteable snippets, which you use in those examples. If you're providing snippets or log output in the issue, use [Markdown code blocks](https://help.github.com/articles/markdown-basics/#multiple-lines).
* **Describe the behavior you observed after following the steps** and point out what exactly is the problem with that behavior.
* **Explain which behavior you expected to see instead and why.**
* **Include detailed log output** especially for probing and leveling. See below for usage of `DEBUG_LEVELING_FEATURE`.
* **Include screenshots, links to videos, etc.** which clearly demonstrate the problem.
* **Include G-code** (if relevant) that reliably causes the problem to show itself.
* **If the problem wasn't triggered by a specific action**, describe what you were doing before the problem happened and share more information using the guidelines below.
- **Use a clear and descriptive title** for the issue to identify the problem.
- **Describe the exact steps which reproduce the problem** in as many details as possible. For example, start by explaining how you started Marlin, e.g. which command exactly you used in the terminal, or how you started Marlin otherwise. When listing steps, **don't just say what you did, but explain how you did it**. For example, if you moved the cursor to the end of a line, explain if you used the mouse, or a keyboard shortcut or an Marlin command, and if so which one?
- **Provide specific examples to demonstrate the steps**. Include links to files or GitHub projects, or copy/pasteable snippets, which you use in those examples. If you're providing snippets or log output in the issue, use [Markdown code blocks](https://help.github.com/articles/markdown-basics/#multiple-lines).
- **Describe the behavior you observed after following the steps** and point out what exactly is the problem with that behavior.
- **Explain which behavior you expected to see instead and why.**
- **Include detailed log output** especially for probing and leveling. See below for usage of `DEBUG_LEVELING_FEATURE`.
- **Include screenshots, links to videos, etc.** which clearly demonstrate the problem.
- **Include G-code** (if relevant) that reliably causes the problem to show itself.
- **If the problem wasn't triggered by a specific action**, describe what you were doing before the problem happened and share more information using the guidelines below.
Provide more context:
* **Can you reproduce the problem with a minimum of options enabled?**
* **Did the problem start happening recently** (e.g. after updating to a new version of Marlin) or was this always a problem?
* If the problem started happening recently, **can you reproduce the problem in an older version of Marlin?** What's the most recent version in which the problem doesn't happen? You can download older versions of Marlin from [the releases page](https://github.com/MarlinFirmware/Marlin/releases).
* **Can you reliably reproduce the issue?** If not, provide details about how often the problem happens and under which conditions it normally happens.
- **Can you reproduce the problem with a minimum of options enabled?**
- **Did the problem start happening recently** (e.g. after updating to a new version of Marlin) or was this always a problem?
- If the problem started happening recently, **can you reproduce the problem in an older version of Marlin?** What's the most recent version in which the problem doesn't happen? You can download older versions of Marlin from [the releases page](https://github.com/MarlinFirmware/Marlin/releases).
- **Can you reliably reproduce the issue?** If not, provide details about how often the problem happens and under which conditions it normally happens.
Include details about your configuration and environment:
* **Which version of Marlin are you using?** Marlin's exact version and build date can be seen in the startup message when a host connects to Marlin, or in the LCD Info menu (if enabled).
* **What kind of 3D Printer and electronics are you using**?
* **What kind of add-ons (probe, filament sensor) do you have**?
* **Include your Configuration files.** Make a ZIP file containing `Configuration.h` and `Configuration_adv.h` and drop it on your reply.
- **Which version of Marlin are you using?** Marlin's exact version and build date can be seen in the startup message when a host connects to Marlin, or in the LCD Info menu (if enabled).
- **What kind of 3D Printer and electronics are you using**?
- **What kind of add-ons (probe, filament sensor) do you have**?
- **Include your Configuration files.** Make a ZIP file containing `Configuration.h` and `Configuration_adv.h` and drop it on your reply.
### Suggesting Features or Changes
@@ -97,52 +102,52 @@ Before creating a suggestion, please check [this list](https://github.com/Marlin
#### Before Submitting a Feature Request
* **Check the [Marlin website](https://marlinfw.org/)** for tips — you might discover that the feature is already included. Most importantly, check if you're using [the latest version of Marlin](https://github.com/MarlinFirmware/Marlin/releases) and if you can get the desired behavior by changing [Marlin's config settings](https://marlinfw.org/docs/configuration/configuration.html).
* **Perform a [cursory search](https://github.com/MarlinFirmware/Marlin/issues?q=is%3Aopen+is%3Aissue+label%3A%22T%3A+Feature+Request%22)** to see if the enhancement has already been suggested. If it has, add a comment to the existing issue instead of opening a new one.
- **Check the [Marlin website](https://marlinfw.org/)** for tips — you might discover that the feature is already included. Most importantly, check if you're using [the latest version of Marlin](https://github.com/MarlinFirmware/Marlin/releases) and if you can get the desired behavior by changing [Marlin's config settings](https://marlinfw.org/docs/configuration/configuration.html).
- **Perform a [cursory search](https://github.com/MarlinFirmware/Marlin/issues?q=is%3Aopen+is%3Aissue+label%3A%22T%3A+Feature+Request%22)** to see if the enhancement has already been suggested. If it has, add a comment to the existing issue instead of opening a new one.
#### How Do I Submit A (Good) Feature Request?
Feature Requests are tracked as [GitHub issues](https://guides.github.com/features/issues/). Please follow these guidelines in your request:
* **Use a clear and descriptive title** for the issue to identify the suggestion.
* **Provide a step-by-step description of the requested feature** in as much detail as possible.
* **Provide specific examples to demonstrate the steps**.
* **Describe the current behavior** and **explain which behavior you expected to see instead** and why.
* **Include screenshots and links to videos** which demonstrate the feature or point out the part of Marlin to which the request is related.
* **Explain why this feature would be useful** to most Marlin users.
* **Name other firmwares that have this feature, if any.**
- **Use a clear and descriptive title** for the issue to identify the suggestion.
- **Provide a step-by-step description of the requested feature** in as much detail as possible.
- **Provide specific examples to demonstrate the steps**.
- **Describe the current behavior** and **explain which behavior you expected to see instead** and why.
- **Include screenshots and links to videos** which demonstrate the feature or point out the part of Marlin to which the request is related.
- **Explain why this feature would be useful** to most Marlin users.
- **Name other firmwares that have this feature, if any.**
### Your First Code Contribution
Unsure where to begin contributing to Marlin? You can start by looking through these `good-first-issue` and `help-wanted` issues:
* [Beginner issues][good-first-issue] - issues which should only require a few lines of code, and a test or two.
* [Help Wanted issues][help-wanted] - issues which should be a bit more involved than `beginner` issues.
- [Beginner issues][good-first-issue] - issues which should only require a few lines of code, and a test or two.
- [Help Wanted issues][help-wanted] - issues which should be a bit more involved than `beginner` issues.
### Pull Requests
Pull Requests should always be targeted to working branches (e.g., `bugfix-2.1.x` and/or `bugfix-1.1.x`) and never to release branches (e.g., `2.0.x` and/or `1.1.x`). If this is your first Pull Request, please read our [Guide to Pull Requests](https://marlinfw.org/docs/development/getting_started_pull_requests.html) and Github's [Pull Request](https://help.github.com/articles/creating-a-pull-request/) documentation.
Pull Requests should always be targeted to working branches (e.g., `bugfix-2.1.x` and/or `bugfix-1.1.x`) and never to release branches (e.g., `2.0.x` and/or `1.1.x`). If this is your first Pull Request, please read our [Guide to Pull Requests](https://marlinfw.org/docs/development/getting_started_pull_requests.html) and GitHub's [Pull Request](https://help.github.com/articles/creating-a-pull-request/) documentation.
* Fill in [the required template](pull_request_template.md).
* Don't include issue numbers in the PR title.
* Include pictures, diagrams, and links to videos in your Pull Request to demonstrate your changes, if needed.
* Follow the [Coding Standards](https://marlinfw.org/docs/development/coding_standards.html) posted on our website.
* Document new code with clear and concise comments.
* End all files with a newline.
- Fill in [the required template](pull_request_template.md).
- Don't include issue numbers in the PR title.
- Include pictures, diagrams, and links to videos in your Pull Request to demonstrate your changes, if needed.
- Follow the [Coding Standards](https://marlinfw.org/docs/development/coding_standards.html) posted on our website.
- Document new code with clear and concise comments.
- End all files with a newline.
## Styleguides
### Git Commit Messages
* Use the present tense ("Add feature" not "Added feature").
* Use the imperative mood ("Move cursor to..." not "Moves cursor to...").
* Limit the first line to 72 characters or fewer.
* Reference issues and Pull Requests liberally after the first line.
- Use the present tense ("Add feature" not "Added feature").
- Use the imperative mood ("Move cursor to..." not "Moves cursor to...").
- Limit the first line to 72 characters or fewer.
- Reference issues and Pull Requests liberally after the first line.
### C++ Coding Standards
* Please read and follow the [Coding Standards](https://marlinfw.org/docs/development/coding_standards.html) posted on our website. Failure to follow these guidelines will delay evaluation and acceptance of Pull Requests.
- Please read and follow the [Coding Standards](https://marlinfw.org/docs/development/coding_standards.html) posted on our website. Failure to follow these guidelines will delay evaluation and acceptance of Pull Requests.
### Documentation
* Guidelines for documentation are still under development. In-general, be clear, concise, and to-the-point.
- Guidelines for documentation are still under development. In-general, be clear, concise, and to-the-point.

View File

@@ -21,6 +21,7 @@ on:
branches:
- bugfix-2.1.x
- 2.1.x
- release-*
paths-ignore:
- config/**
- data/**
@@ -36,6 +37,9 @@ jobs:
runs-on: ubuntu-22.04
env:
CONFIG_BRANCH: ${{ github.base_ref || github.ref_name }}
strategy:
fail-fast: true
matrix:
@@ -54,7 +58,7 @@ jobs:
- at90usb1286_dfu
# AVR Extended
- FYSETC_F6
- mega2560ext
- melzi_optiboot
- rambo
- sanguino1284p
@@ -113,7 +117,7 @@ jobs:
- BTT_GTR_V1_0
- BTT_SKR_PRO
- FLYF407ZG
- FYSETC_S6
- STM32F446VE_fysetc
- LERDGEK
- LERDGEX
- mks_robin_pro2
@@ -151,6 +155,12 @@ jobs:
# HC32
- HC32F460C_aquila_101
# GD32F3
- GD32F303RE_creality_mfl
# GD32F1
- GD32F103RC_aquila_mfl
# LPC176x - Lengthy tests
- LPC1768
- LPC1769
@@ -164,15 +174,20 @@ jobs:
uses: actions/cache@v4
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
key: ${{ runner.os }}-pip-build-v1
restore-keys: |
${{ runner.os }}-pip-
${{ runner.os }}-pip-build-
- name: Cache PlatformIO
uses: actions/cache@v4
with:
path: ~/.platformio
key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }}
path: |
~/.platformio
.pio/build
.pio/libdeps
key: ${{ runner.os }}-pio-build-v1
restore-keys: |
${{ runner.os }}-pio-build-
- name: Select Python 3.9
uses: actions/setup-python@v5
@@ -188,6 +203,7 @@ jobs:
- name: Install Simulator dependencies
run: |
sudo apt-get update
sudo apt-get install build-essential
sudo apt-get install libsdl2-dev
sudo apt-get install libsdl2-net-dev

View File

@@ -46,15 +46,20 @@ jobs:
uses: actions/cache@v4
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
key: ${{ runner.os }}-pip-unit-v1
restore-keys: |
${{ runner.os }}-pip-
${{ runner.os }}-pip-unit-
- name: Cache PlatformIO
uses: actions/cache@v4
with:
path: ~/.platformio
key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }}
path: |
~/.platformio
.pio/build
.pio/libdeps
key: ${{ runner.os }}-pio-tests-v1
restore-keys: |
${{ runner.os }}-pio-tests-
- name: Select Python 3.9
uses: actions/setup-python@v5

View File

@@ -9,14 +9,14 @@ name: CI - Validate boards.h
on:
pull_request:
branches:
- bugfix-2.1.x
- bugfix-2.1.x
paths:
- 'Marlin/src/core/boards.h'
- "Marlin/src/core/boards.h"
push:
branches:
- bugfix-2.1.x
- bugfix-2.1.x
paths:
- 'Marlin/src/core/boards.h'
- "Marlin/src/core/boards.h"
jobs:
validate_pins_files:
@@ -26,23 +26,23 @@ jobs:
runs-on: ubuntu-22.04
steps:
- name: Check out the PR
uses: actions/checkout@v4
- name: Check out the PR
uses: actions/checkout@v4
- name: Cache pip
uses: actions/cache@v4
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
restore-keys: |
${{ runner.os }}-pip-
- name: Cache pip
uses: actions/cache@v4
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-validation-v1
restore-keys: |
${{ runner.os }}-pip-validation-
- name: Select Python 3.9
uses: actions/setup-python@v5
with:
python-version: '3.9'
architecture: 'x64'
- name: Select Python 3.9
uses: actions/setup-python@v5
with:
python-version: "3.9"
architecture: "x64"
- name: Validate core/boards.h
run: |
make validate-boards -j
- name: Validate core/boards.h
run: |
make validate-boards -j

40
.github/workflows/ci-validate-lines.yml vendored Normal file
View File

@@ -0,0 +1,40 @@
#
# ci-validate-lines.yml
# Validate that all text files are unchanged by linesformat.py
#
name: CI - Validate Source Files
on:
pull_request:
branches:
- bugfix-2.1.x
- 2.1.x
push:
branches:
- bugfix-2.1.x
- 2.1.x
jobs:
validate_source_files:
name: Validate Source Files
if: github.repository == 'MarlinFirmware/Marlin'
runs-on: ubuntu-22.04
steps:
- name: Check out the PR
uses: actions/checkout@v4
- name: Cache node_modules
uses: actions/cache@v4
with:
path: node_modules
key: ${{ runner.os }}-npm-lines-v1
restore-keys: |
${{ runner.os }}-npm-lines-
- name: Validate text file formatting
run: |
npm install --save-dev prettier
make validate-lines -j

View File

@@ -8,18 +8,18 @@ name: CI - Validate Pins Files
on:
pull_request:
branches:
- bugfix-2.1.x
- bugfix-2.1.x
# Cannot be enabled on 2.1.x until it contains the unit test framework
#- 2.1.x
paths:
- 'Marlin/src/pins/*/**'
- "Marlin/src/pins/*/**"
push:
branches:
- bugfix-2.1.x
- bugfix-2.1.x
# Cannot be enabled on 2.1.x until it contains the unit test framework
#- 2.1.x
paths:
- 'Marlin/src/pins/*/**'
- "Marlin/src/pins/*/**"
jobs:
validate_pins_files:
@@ -29,23 +29,23 @@ jobs:
runs-on: ubuntu-22.04
steps:
- name: Check out the PR
uses: actions/checkout@v4
- name: Check out the PR
uses: actions/checkout@v4
- name: Cache pip
uses: actions/cache@v4
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
restore-keys: |
${{ runner.os }}-pip-
- name: Cache pip
uses: actions/cache@v4
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-validation-v1
restore-keys: |
${{ runner.os }}-pip-validation-
- name: Select Python 3.9
uses: actions/setup-python@v5
with:
python-version: '3.9'
architecture: 'x64'
- name: Select Python 3.9
uses: actions/setup-python@v5
with:
python-version: "3.9"
architecture: "x64"
- name: Validate all pins files
run: |
make validate-pins -j
- name: Validate all pins files
run: |
make validate-pins -j

5
.gitignore vendored Executable file → Normal file
View File

@@ -31,6 +31,11 @@ out-language/
*.gen
*.sublime-workspace
# npm
node_modules/
package.json
package-lock.json
# OS
applet/
.DS_Store

10
.prettierignore Normal file
View File

@@ -0,0 +1,10 @@
# Prettier Ignore file
*.min.js
web-ui/
buildroot/share/PlatformIO/boards
buildroot/share/PlatformIO/variants
*.sublime-project
*.sublime-syntax
.github
.vscode
launch.json

View File

@@ -1,15 +1,42 @@
SCRIPTS_DIR := buildroot/share/scripts
MAKESCRIPTS_DIR := buildroot/share/make
CONTAINER_RT_BIN := docker
CONTAINER_RT_OPTS := --rm -v $(PWD):/code -v platformio-cache:/root/.platformio
CONTAINER_IMAGE := marlin-dev
UNIT_TEST_CONFIG ?= default
# Find a Python 3 interpreter
ifeq ($(OS),Windows_NT)
# Windows: use `where` fall back through the three common names
PYTHON := $(shell which python 2>nul || which python3 2>nul || which py 2>nul)
# Windows: Use Python script to find pins files
PINS := $(shell $(PYTHON) $(MAKESCRIPTS_DIR)/find.py Marlin/src/pins -mindepth 2 -name 'pins_*.h')
else
# POSIX: use `command -v` prefer python3 over python
PYTHON := $(shell command -v python3 2>/dev/null || command -v python 2>/dev/null)
# Unix/Linux: Use find command
PINS := $(shell find Marlin/src/pins -mindepth 2 -name 'pins_*.h')
endif
# Check that the found interpreter is Python 3
# Error if there's no Python 3 available
ifneq ($(strip $(PYTHON)),)
PYTHON_VERSION := $(shell $(PYTHON) -c "import sys; print(sys.version_info[0])" 2>/dev/null)
ifneq ($(PYTHON_VERSION),3)
$(error $(PYTHON) is not Python 3 install a Python3.x interpreter or adjust your PATH)
endif
else
$(error No Python executable found install Python 3.x and make sure it is in your PATH)
endif
help:
@echo "Tasks for local development:"
@echo "make marlin : Build Marlin for the configured board"
@echo "make format-pins -j : Reformat all pins files (-j for parallel execution)"
@echo "make validate-lines -j : Validate line endings, fails on trailing whitespace, etc."
@echo "make validate-pins -j : Validate all pins files, fails if any require reformatting"
@echo "make validate-boards -j : Validate boards.h and pins.h for standards compliance"
@echo "make validate-urls : Validate URLs in source files"
@echo "make tests-single-ci : Run a single test from inside the CI"
@echo "make tests-single-local : Run a single test locally"
@echo "make tests-single-local-docker : Run a single test locally, using docker"
@@ -17,9 +44,9 @@ help:
@echo "make tests-all-local-docker : Run all tests locally, using docker"
@echo "make unit-test-single-local : Run unit tests for a single config locally"
@echo "make unit-test-single-local-docker : Run unit tests for a single config locally, using docker"
@echo "make unit-test-all-local : Run all code tests locally"
@echo "make unit-test-all-local : Run all code tests locally"
@echo "make unit-test-all-local-docker : Run all code tests locally, using docker"
@echo "make setup-local-docker : Setup local docker using buildx"
@echo "make setup-local-docker : Setup local docker"
@echo ""
@echo "Options for testing:"
@echo " TEST_TARGET Set when running tests-single-*, to select the"
@@ -40,6 +67,9 @@ marlin:
./buildroot/bin/mftest -a
.PHONY: marlin
clean:
rm -rf .pio/build*
tests-single-ci:
export GIT_RESET_HARD=true
$(MAKE) tests-single-local TEST_TARGET=$(TEST_TARGET) PLATFORMIO_BUILD_FLAGS=-DGITHUB_ACTION
@@ -56,10 +86,10 @@ tests-single-local-docker:
$(CONTAINER_RT_BIN) run $(CONTAINER_RT_OPTS) $(CONTAINER_IMAGE) make tests-single-local TEST_TARGET=$(TEST_TARGET) VERBOSE_PLATFORMIO=$(VERBOSE_PLATFORMIO) GIT_RESET_HARD=$(GIT_RESET_HARD) ONLY_TEST="$(ONLY_TEST)"
tests-all-local:
@python -c "import yaml" 2>/dev/null || (echo 'pyyaml module is not installed. Install it with "python -m pip install pyyaml"' && exit 1)
@$(PYTHON) -c "import yaml" 2>/dev/null || (echo 'pyyaml module is not installed. Install it with "$(PYTHON) -m pip install pyyaml"' && exit 1)
export PATH="./buildroot/bin/:./buildroot/tests/:${PATH}" \
&& export VERBOSE_PLATFORMIO=$(VERBOSE_PLATFORMIO) \
&& for TEST_TARGET in $$(python $(SCRIPTS_DIR)/get_test_targets.py) ; do \
&& for TEST_TARGET in $$($(PYTHON) $(MAKESCRIPTS_DIR)/get_test_targets.py) ; do \
if [ "$$TEST_TARGET" = "linux_native" ] && [ "$$(uname)" = "Darwin" ]; then \
echo "Skipping tests for $$TEST_TARGET on macOS" ; \
continue ; \
@@ -87,27 +117,60 @@ unit-test-all-local-docker:
@if ! $(CONTAINER_RT_BIN) images -q $(CONTAINER_IMAGE) > /dev/null ; then $(MAKE) setup-local-docker ; fi
$(CONTAINER_RT_BIN) run $(CONTAINER_RT_OPTS) $(CONTAINER_IMAGE) make unit-test-all-local
setup-local-docker:
$(CONTAINER_RT_BIN) buildx build -t $(CONTAINER_IMAGE) -f docker/Dockerfile .
USERNAME := $(shell whoami)
USER_ID := $(shell id -u)
GROUP_ID := $(shell id -g)
PINS := $(shell find Marlin/src/pins -mindepth 2 -name '*.h')
.PHONY: setup-local-docker setup-local-docker-old
setup-local-docker:
@echo "Building marlin-dev Docker image..."
$(CONTAINER_RT_BIN) build -t $(CONTAINER_IMAGE) \
--build-arg USERNAME=$(USERNAME) \
--build-arg USER_ID=$(USER_ID) \
--build-arg GROUP_ID=$(GROUP_ID) \
-f docker/Dockerfile .
@echo
@echo "To run all tests in Docker:"
@echo " make tests-all-local-docker"
@echo "To run a single test in Docker:"
@echo " make tests-single-local-docker TEST_TARGET=mega2560"
setup-local-docker-old:
$(CONTAINER_RT_BIN) buildx build -t $(CONTAINER_IMAGE) -f docker/Dockerfile .
.PHONY: $(PINS) format-pins validate-pins
$(PINS): %:
@echo "Formatting $@"
@python $(SCRIPTS_DIR)/pinsformat.py $< $@
@echo "Formatting pins $@"
@$(PYTHON) $(SCRIPTS_DIR)/pinsformat.py $< $@
format-pins: $(PINS)
@echo "Processed $(words $(PINS)) pins files"
validate-pins: format-pins
@echo "Validating pins files"
@git diff --exit-code || (git status && echo "\nError: Pins files are not formatted correctly. Run \"make format-pins\" to fix.\n" && exit 1)
.PHONY: format-lines validate-lines validate-urls
format-lines:
@echo "Formatting all sources"
@$(PYTHON) $(SCRIPTS_DIR)/linesformat.py buildroot
@$(PYTHON) $(SCRIPTS_DIR)/linesformat.py Marlin
validate-lines:
@echo "Validating text formatting"
@npx prettier --check . --editorconfig --object-wrap preserve --prose-wrap never
validate-urls:
@echo "Checking URLs in source files"
@$(MAKESCRIPTS_DIR)/check-urls.sh
BOARDS_FILE := Marlin/src/core/boards.h
.PHONY: validate-boards
validate-boards:
@echo "Validating boards.h file"
@python $(SCRIPTS_DIR)/validate_boards.py $(BOARDS_FILE) || (echo "\nError: boards.h file is not valid. Please check and correct it.\n" && exit 1)
@$(PYTHON) $(MAKESCRIPTS_DIR)/validate_boards.py $(BOARDS_FILE) || (echo "\nError: boards.h file is not valid. Please check and correct it.\n" && exit 1)

View File

@@ -61,7 +61,7 @@
// @section info
// Author info of this build printed to the host during boot and M115
#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Original author or contributor.
#define STRING_CONFIG_H_AUTHOR "(MarlinFirmware)" // Original author or contributor.
//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
// @section machine
@@ -129,6 +129,7 @@
// Name displayed in the LCD "Ready" message and Info menu
//#define CUSTOM_MACHINE_NAME "3D Printer"
//#define CONFIGURABLE_MACHINE_NAME // Add G-code M550 to set/report the machine name
// Printer's unique ID, used by some programs to differentiate between machines.
// Choose your own or use a service like https://www.uuidgenerator.net/version4
@@ -147,9 +148,9 @@
* Options: A4988, A5984, DRV8825, LV8729, TB6560, TB6600, TMC2100,
* TMC2130, TMC2130_STANDALONE, TMC2160, TMC2160_STANDALONE,
* TMC2208, TMC2208_STANDALONE, TMC2209, TMC2209_STANDALONE,
* TMC2660, TMC2660_STANDALONE, TMC5130, TMC5130_STANDALONE,
* TMC5160, TMC5160_STANDALONE
* :['A4988', 'A5984', 'DRV8825', 'LV8729', 'TB6560', 'TB6600', 'TMC2100', 'TMC2130', 'TMC2130_STANDALONE', 'TMC2160', 'TMC2160_STANDALONE', 'TMC2208', 'TMC2208_STANDALONE', 'TMC2209', 'TMC2209_STANDALONE', 'TMC2660', 'TMC2660_STANDALONE', 'TMC5130', 'TMC5130_STANDALONE', 'TMC5160', 'TMC5160_STANDALONE']
* TMC2240, TMC2660, TMC2660_STANDALONE,
* TMC5130, TMC5130_STANDALONE, TMC5160, TMC5160_STANDALONE
* :['A4988', 'A5984', 'DRV8825', 'LV8729', 'TB6560', 'TB6600', 'TMC2100', 'TMC2130', 'TMC2130_STANDALONE', 'TMC2160', 'TMC2160_STANDALONE', 'TMC2208', 'TMC2208_STANDALONE', 'TMC2209', 'TMC2209_STANDALONE', 'TMC2240', 'TMC2660', 'TMC2660_STANDALONE', 'TMC5130', 'TMC5130_STANDALONE', 'TMC5160', 'TMC5160_STANDALONE']
*/
#define X_DRIVER_TYPE A4988
#define Y_DRIVER_TYPE A4988
@@ -259,6 +260,7 @@
#define SWITCHING_NOZZLE_SERVO_ANGLES { 0, 90 } // A pair of angles for { E0, E1 }.
// For Dual Servo use two pairs: { { lower, raise }, { lower, raise } }
#define SWITCHING_NOZZLE_SERVO_DWELL 2500 // Dwell time to wait for servo to make physical move
#define SWITCHING_NOZZLE_LIFT_TO_PROBE // Lift toolheads out of the way while probing
#endif
// Switch nozzles by bumping the toolhead. Requires EVENT_GCODE_TOOLCHANGE_#.
@@ -303,6 +305,18 @@
#endif
/**
* Differential Extruder
*
* The X and E steppers work together to create a differential drive system.
* Simple : E steps = X + E ; X steps = X (E drives a loop, X stays the same)
* Balanced: E steps = X + E/2 ; X steps = X - E/2 (Dual loop system)
*/
//#define DIFFERENTIAL_EXTRUDER
#if ENABLED(DIFFERENTIAL_EXTRUDER)
//#define BALANCED_DIFFERENTIAL_EXTRUDER
#endif
/**
* Switching Toolhead
*
@@ -454,7 +468,7 @@
//===========================================================================
//============================= Thermal Settings ============================
//===========================================================================
// @section temperature
// @section temperature sensors
/**
* Temperature Sensors:
@@ -486,7 +500,7 @@
* 10 : 100kΩ RS PRO 198-961
* 11 : 100kΩ Keenovo AC silicone mats, most Wanhao i3 machines - beta 3950, 1%
* 12 : 100kΩ Vishay 0603 SMD NTCS0603E3104FXT (#8) - calibrated for Makibox hot bed
* 13 : 100kΩ Hisens up to 300°C - for "Simple ONE" & "All In ONE" hotend - beta 3950, 1%
* 13 : 100kΩ Hisense up to 300°C - for "Simple ONE" & "All In ONE" hotend - beta 3950, 1%
* 14 : 100kΩ (R25), 4092K (beta25), 4.7kΩ pull-up, bed thermistor as used in Ender-5 S1
* 15 : 100kΩ Calibrated for JGAurora A5 hotend
* 17 : 100kΩ Dagoma NTC white thermistor
@@ -586,7 +600,7 @@
#define DUMMY_THERMISTOR_998_VALUE 25
#define DUMMY_THERMISTOR_999_VALUE 100
// Resistor values when using MAX31865 sensors (-5) on TEMP_SENSOR_0 / 1
// Resistor values when using MAX31865 sensors (-5) on TEMP_SENSOR_0 / 1 / 2 / BED
#if TEMP_SENSOR_IS_MAX_TC(0)
#define MAX31865_SENSOR_OHMS_0 100 // (Ω) Typically 100 or 1000 (PT100 or PT1000)
#define MAX31865_CALIBRATION_OHMS_0 430 // (Ω) Typically 430 for Adafruit PT100; 4300 for Adafruit PT1000
@@ -638,6 +652,8 @@
#define TEMP_SENSOR_REDUNDANT_MAX_DIFF 10 // (°C) Temperature difference that will trigger a print abort.
#endif
// @section temperature
// Below this temperature the heater will be switched off
// because it probably indicates a broken thermistor wire.
#define HEATER_0_MINTEMP 5
@@ -695,20 +711,22 @@
#define PID_K1 0.95 // Smoothing factor within any PID loop
#if ENABLED(PIDTEMP)
//#define PID_DEBUG // Print PID debug data to the serial port. Use 'M303 D' to toggle activation.
//#define MIN_POWER 0 // Min power to improve PID stability (0..PID_MAX).
// Get the power from the temperature report ('M105' => @:nnn) and try P*2-20 to P*2-10.
//#define PID_DEBUG // Print PID debug data to the serial port. Use 'M303 D' to enable/disable.
//#define PID_PARAMS_PER_HOTEND // Use separate PID parameters for each extruder (useful for mismatched extruders)
// Set/get with G-code: M301 E[extruder number, 0-2]
#if ENABLED(PID_PARAMS_PER_HOTEND)
// Specify up to one value per hotend here, according to your setup.
// If there are fewer values, the last one applies to the remaining hotends.
#define DEFAULT_Kp_LIST { 22.20, 22.20 }
#define DEFAULT_Ki_LIST { 1.08, 1.08 }
#define DEFAULT_Kd_LIST { 114.00, 114.00 }
#define DEFAULT_KP_LIST { 22.20, 22.20 }
#define DEFAULT_KI_LIST { 1.08, 1.08 }
#define DEFAULT_KD_LIST { 114.00, 114.00 }
#else
#define DEFAULT_Kp 22.20
#define DEFAULT_Ki 1.08
#define DEFAULT_Kd 114.00
#define DEFAULT_KP 22.20
#define DEFAULT_KI 1.08
#define DEFAULT_KD 114.00
#endif
#else
#define BANG_MAX 255 // Limit hotend current while in bang-bang mode; 255=full current
@@ -731,7 +749,12 @@
//#define MPC_AUTOTUNE_MENU // Add MPC auto-tuning to the "Advanced Settings" menu. (~350 bytes of flash)
#define MPC_MAX 255 // (0..255) Current to nozzle while MPC is active.
#define MPC_HEATER_POWER { 40.0f } // (W) Heat cartridge powers.
#define MPC_HEATER_POWER { 40.0f } // (W) Nominal heat cartridge powers.
//#define MPC_PTC // Hotend power changes with temperature (e.g., PTC heat cartridges).
#if ENABLED(MPC_PTC)
#define MPC_HEATER_ALPHA { 0.0028f } // Temperature coefficient of resistance of the heat cartridges.
#define MPC_HEATER_REFTEMP { 20 } // (°C) Reference temperature for MPC_HEATER_POWER and MPC_HEATER_ALPHA.
#endif
#define MPC_INCLUDE_FAN // Model the fan speed?
@@ -763,6 +786,7 @@
#define MPC_TUNING_POS { X_CENTER, Y_CENTER, 1.0f } // (mm) M306 Autotuning position, ideally bed center at first layer height.
#define MPC_TUNING_END_Z 10.0f // (mm) M306 Autotuning final Z position.
//#define EVENT_GCODE_AFTER_MPC_TUNE "M84" // G-code to execute after MPC tune finished and Z raised.
#endif
//===========================================================================
@@ -794,14 +818,15 @@
//#define PIDTEMPBED
#if ENABLED(PIDTEMPBED)
//#define MIN_BED_POWER 0
//#define PID_BED_DEBUG // Print Bed PID debug data to the serial port.
//#define MIN_BED_POWER 0 // Min power to improve PID stability (0..MAX_BED_POWER).
// Get the power from the temperature report ('M105' => B@:nnn) and try P*2-20 to P*2-10.
//#define PID_BED_DEBUG // Print Bed PID debug data to the serial port. Use 'M303 D' to enable/disable.
// 120V 250W silicone heater into 4mm borosilicate (MendelMax 1.5+)
// from FOPDT model - kp=.39 Tp=405 Tdead=66, Tc set to 79.2, aggressive factor of .15 (vs .1, 1, 10)
#define DEFAULT_bedKp 10.00
#define DEFAULT_bedKi .023
#define DEFAULT_bedKd 305.4
#define DEFAULT_BED_KP 10.00
#define DEFAULT_BED_KI 0.023
#define DEFAULT_BED_KD 305.4
// FIND YOUR OWN: "M303 E-1 C8 S90" to run autotune on the bed at 90 degreesC for 8 cycles.
#else
@@ -876,15 +901,15 @@
#define MAX_CHAMBER_POWER 255 // limits duty cycle to chamber heater; 255=full current
#if ENABLED(PIDTEMPCHAMBER)
#define MIN_CHAMBER_POWER 0
//#define PID_CHAMBER_DEBUG // Print Chamber PID debug data to the serial port.
//#define MIN_CHAMBER_POWER 0 // Min power to improve PID stability. (0..MAX_CHAMBER_POWER)
// Get the power from the temperature report ('M105' => C@:nnn) and try P*2-20 to P*2-10.
//#define PID_CHAMBER_DEBUG // Print Chamber PID debug data to the serial port. Use 'M303 D' to enable/disable.
// Lasko "MyHeat Personal Heater" (200w) modified with a Fotek SSR-10DA to control only the heating element
// and placed inside the small Creality printer enclosure tent.
//
#define DEFAULT_chamberKp 37.04
#define DEFAULT_chamberKi 1.40
#define DEFAULT_chamberKd 655.17
#define DEFAULT_CHAMBER_KP 37.04
#define DEFAULT_CHAMBER_KI 1.40
#define DEFAULT_CHAMBER_KD 655.17
// M309 P37.04 I1.04 D655.17
// FIND YOUR OWN: "M303 E-2 C8 S50" to run autotune on the chamber at 50 degreesC for 8 cycles.
@@ -895,7 +920,7 @@
#if ANY(PIDTEMP, PIDTEMPBED, PIDTEMPCHAMBER)
//#define PID_OPENLOOP // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
//#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
#define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
#define PID_FUNCTIONAL_RANGE 20 // If the temperature difference between the target temperature and the actual temperature
// is more than PID_FUNCTIONAL_RANGE then the PID will be shut off and the heater will be set to min/max.
//#define PID_EDIT_MENU // Add PID editing to the "Advanced Settings" menu. (~700 bytes of flash)
@@ -931,7 +956,7 @@
* protect against a broken or disconnected thermistor wire.
*
* The issue: If a thermistor falls out, it will report the much lower
* temperature of the air in the room, and the the firmware will keep
* temperature of the air in the room, and the firmware will keep
* the heater on.
*
* If you get "Thermal Runaway" or "Heating failed" errors the
@@ -1023,9 +1048,6 @@
// Print surface diameter/2 minus unreachable space (avoid collisions with vertical towers).
#define PRINTABLE_RADIUS 140.0 // (mm)
// Maximum reachable area
#define DELTA_MAX_RADIUS 140.0 // (mm)
// Center-to-center distance of the holes in the diagonal push rods.
#define DELTA_DIAGONAL_ROD 250.0 // (mm)
@@ -1045,7 +1067,8 @@
// Delta radius and diagonal rod adjustments
//#define DELTA_RADIUS_TRIM_TOWER { 0.0, 0.0, 0.0 } // (mm)
//#define DELTA_DIAGONAL_ROD_TRIM_TOWER { 0.0, 0.0, 0.0 } // (mm)
#endif
#endif // DELTA
// @section scara
@@ -1101,17 +1124,37 @@
#define TPARA_LINKAGE_1 120 // (mm)
#define TPARA_LINKAGE_2 120 // (mm)
// TPARA tower offset (position of Tower relative to bed zero position)
// Height of the Shoulder axis (pivot) relative to the tower floor
#define TPARA_SHOULDER_AXIS_HEIGHT 135.0 // (mm)
// The position of the last linkage relative to the robot arm origin
// (intersection of the base axis and floor) when at the home position
#define TPARA_ARM_X_HOME_POS 28.75 // (mm) Measured from shoulder axis to tool holder axis in home position
#define TPARA_ARM_Y_HOME_POS 0 // (mm)
#define TPARA_ARM_Z_HOME_POS 250.00 // (mm) Measured from tool holder axis to the floor
// TPARA Workspace offset relative to the tower (position of workspace origin relative to robot Tower origin )
// This needs to be reasonably accurate as it defines the printbed position in the TPARA space.
#define TPARA_OFFSET_X 0 // (mm)
#define TPARA_OFFSET_Y 0 // (mm)
#define TPARA_OFFSET_Z 0 // (mm)
#define TPARA_OFFSET_X 127.0 // (mm) to coincide with minimum radius MIDDLE_DEAD_ZONE_R, and W(0,0,0) is reachable
#define TPARA_OFFSET_Y 0.0 // (mm)
#define TPARA_OFFSET_Z 0.0 // (mm)
// TPARA tool connection point offset, relative to the tool moving frame origin which is in the last linkage axis,
// (TCP: tool center/connection point) of the robot,
// the plane of measured offset must be alligned with home position plane
#define TPARA_TCP_OFFSET_X 27.0 // (mm) Tool flange: 27 (distance from pivot to bolt holes), extruder tool: 50.0,
#define TPARA_TCP_OFFSET_Y 0.0 // (mm)
#define TPARA_TCP_OFFSET_Z -65.0 // (mm) Tool flange (bottom): -6 (caution as Z 0 posiion will crash second linkage to the floor, -35 is safe for testing with no tool), extruder tool (depends on extruder): -65.0
#define FEEDRATE_SCALING // Convert XY feedrate from mm/s to degrees/s on the fly
// Radius around the center where the arm cannot reach
#define MIDDLE_DEAD_ZONE_R 0 // (mm)
#endif
// For now use a hardcoded uniform limit, although it should be calculated, or fix a limit for each axis angle
#define MIDDLE_DEAD_ZONE_R 100 // (mm)
// Max angle between L1 and L2
#define TPARA_MAX_L1L2_ANGLE 140.0f // (degrees)
#endif // AXEL_TPARA
// @section polar
@@ -1387,6 +1430,11 @@
* See https://github.com/synthetos/TinyG/wiki/Jerk-Controlled-Motion-Explained
*/
//#define S_CURVE_ACCELERATION
#if ENABLED(S_CURVE_ACCELERATION)
// Define to use 4th instead of 6th order motion curve
//#define S_CURVE_FACTOR 0.25 // Initial and final acceleration factor, ideally 0.1 to 0.4.
// Shouldn't generally require tuning.
#endif
//===========================================================================
//============================= Z Probe Options =============================
@@ -1511,7 +1559,6 @@
* For information about this sensor https://github.com/bigtreetech/MicroProbe
*
* Also requires PROBE_ENABLE_DISABLE
* With FT_MOTION requires ENDSTOP_INTERRUPTS_FEATURE
*/
//#define BIQU_MICROPROBE_V1 // Triggers HIGH
//#define BIQU_MICROPROBE_V2 // Triggers LOW
@@ -1539,6 +1586,20 @@
#define PROBE_DEPLOY_FEEDRATE (133*60) // (mm/min) Probe deploy speed
#define PROBE_STOW_FEEDRATE (133*60) // (mm/min) Probe stow speed
/**
* Magnetically Mounted Probe with a Servo mechanism
* Probe Deploy and Stow both follow the same basic sequence:
* - Rotate the SERVO to its Deployed angle
* - Perform XYZ moves to deploy or stow the PROBE
* - Rotate the SERVO to its Stowed angle
*/
//#define MAG_MOUNTED_PROBE_SERVO_NR 0 // Servo Number for this probe
#ifdef MAG_MOUNTED_PROBE_SERVO_NR
#define MAG_MOUNTED_PROBE_SERVO_ANGLES { 90, 0 } // Servo Angles for Deployed, Stowed
#define MAG_MOUNTED_PRE_DEPLOY { PROBE_DEPLOY_FEEDRATE, { 15, 160, 30 } } // Safe position for servo activation
#define MAG_MOUNTED_PRE_STOW { PROBE_DEPLOY_FEEDRATE, { 15, 160, 30 } } // Safe position for servo deactivation
#endif
#define MAG_MOUNTED_DEPLOY_1 { PROBE_DEPLOY_FEEDRATE, { 245, 114, 30 } } // Move to side Dock & Attach probe
#define MAG_MOUNTED_DEPLOY_2 { PROBE_DEPLOY_FEEDRATE, { 210, 114, 30 } } // Move probe off dock
#define MAG_MOUNTED_DEPLOY_3 { PROBE_DEPLOY_FEEDRATE, { 0, 0, 0 } } // Extra move if needed
@@ -1602,7 +1663,7 @@
* Nozzle-to-Probe offsets { X, Y, Z }
*
* X and Y offset
* Use a caliper or ruler to measure the distance from the tip of
* Use a caliper or ruler to measure the distance (in mm) from the tip of
* the Nozzle to the center-point of the Probe in the X and Y axes.
*
* Z offset
@@ -1638,7 +1699,7 @@
* | [-] |
* O-- FRONT --+
*/
#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 }
#define NOZZLE_TO_PROBE_OFFSET { 10, 10, 0 } // (mm) X, Y, Z distance from Nozzle tip to Probe trigger-point
// Enable and set to use a specific tool for probing. Disable to allow any tool.
#define PROBING_TOOL 0
@@ -1646,6 +1707,8 @@
//#define PROBE_TOOLCHANGE_NO_MOVE // Suppress motion on probe tool-change
#endif
//#define PROBE_WAKEUP_TIME_MS 30 // (ms) Time for the probe to wake up
// Most probes should stay away from the edges of the bed, but
// with NOZZLE_AS_PROBE this can be negative for a wider probing area.
#define PROBING_MARGIN 10
@@ -1799,15 +1862,12 @@
//#define DISABLE_V
//#define DISABLE_W
// Turn off the display blinking that warns about possible accuracy reduction
//#define DISABLE_REDUCED_ACCURACY_WARNING
// @section extruder
//#define DISABLE_E // Disable the extruder when not stepping
#define DISABLE_OTHER_EXTRUDERS // Keep only the active extruder enabled
// @section motion
// @section stepper drivers
// Invert the stepper direction. Change (or reverse the motor connector) if an axis goes the wrong way.
#define INVERT_X_DIR false
@@ -1820,8 +1880,6 @@
//#define INVERT_V_DIR false
//#define INVERT_W_DIR false
// @section extruder
// For direct drive extruder v9 set to true, for geared extruder set to false.
#define INVERT_E0_DIR false
#define INVERT_E1_DIR false
@@ -2022,8 +2080,11 @@
//#define FILAMENT_MOTION_SENSOR
#if ENABLED(FILAMENT_MOTION_SENSOR)
//#define FILAMENT_SWITCH_AND_MOTION
//#define FILAMENT_SWITCH_AND_MOTION // Define separate pins below to sense motion
#if ENABLED(FILAMENT_SWITCH_AND_MOTION)
#define FILAMENT_MOTION_DISTANCE_MM 3.0 // (mm) Missing distance required to trigger runout
#define NUM_MOTION_SENSORS 1 // Number of sensors, up to one per extruder. Define a FIL_MOTION#_PIN for each.
//#define FIL_MOTION1_PIN -1
@@ -2059,7 +2120,7 @@
//#define FIL_MOTION8_STATE LOW
//#define FIL_MOTION8_PULLUP
//#define FIL_MOTION8_PULLDOWN
#endif
#endif // FILAMENT_SWITCH_AND_MOTION
#endif // FILAMENT_MOTION_SENSOR
#endif // FILAMENT_RUNOUT_DISTANCE_MM
#endif // FILAMENT_RUNOUT_SENSOR
@@ -2262,7 +2323,7 @@
//===========================================================================
#define MESH_INSET 10 // Set Mesh bounds as an inset region of the bed
#define GRID_MAX_POINTS_X 3 // Don't use more than 7 points per axis, implementation limited.
#define GRID_MAX_POINTS_X 3
#define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X
//#define MESH_G28_REST_ORIGIN // After homing all axes ('G28' or 'G28 XYZ') rest Z at Z_MIN_POS
@@ -2463,7 +2524,7 @@
//
//#define TEMPERATURE_UNITS_SUPPORT
// @section temperature
// @section temperature presets
//
// Preheat Constants - Up to 10 are supported without changes
@@ -2898,13 +2959,15 @@
//
//#define MAKEBOARD_MINI_2_LINE_DISPLAY_1602
//
// ANET and Tronxy 20x4 Controller
//
//#define ZONESTAR_LCD // Requires ADC_KEYPAD_PIN to be assigned to an analog pin.
// This LCD is known to be susceptible to electrical interference
// which scrambles the display. Pressing any button clears it up.
// This is a LCD2004 display with 5 analog buttons.
/**
* ANET and Tronxy 20x4 Controller
* LCD2004 display with 5 analog buttons.
*
* NOTE: Requires ADC_KEYPAD_PIN to be assigned to an analog pin.
* This LCD is known to be susceptible to electrical interference which
* scrambles the display. Press any button to clear it up.
*/
//#define ZONESTAR_LCD
//
// Generic 16x2, 16x4, 20x2, or 20x4 character-based LCD.
@@ -3092,7 +3155,7 @@
//
// FYSETC variant of the MINI12864 graphic controller with SD support
// https://wiki.fysetc.com/Mini12864_Panel/
// https://wiki.fysetc.com/docs/Mini12864Panel
//
//#define FYSETC_MINI_12864_X_X // Type C/D/E/F. No tunable RGB Backlight by default
//#define FYSETC_MINI_12864_1_2 // Type C/D/E/F. Simple RGB Backlight (always on)
@@ -3181,14 +3244,14 @@
//
// Tiny, but very sharp OLED display
//
//#define MKS_12864OLED // Uses the SH1106 controller (default)
//#define MKS_12864OLED // Uses the SH1106 controller
//#define MKS_12864OLED_SSD1306 // Uses the SSD1306 controller
//
// Zonestar OLED 128×64 Full Graphics Controller
//
//#define ZONESTAR_12864LCD // Graphical (DOGM) with ST7920 controller
//#define ZONESTAR_12864OLED // 1.3" OLED with SH1106 controller (default)
//#define ZONESTAR_12864OLED // 1.3" OLED with SH1106 controller
//#define ZONESTAR_12864OLED_SSD1306 // 0.96" OLED with SSD1306 controller
//
@@ -3266,7 +3329,7 @@
#endif
//
// Touch-screen LCD for Malyan M200/M300 printers
// LCD for Malyan M200/M300 printers
//
//#define MALYAN_LCD
@@ -3437,20 +3500,22 @@
#if ENABLED(TFT_COLOR_UI)
/**
* TFT Font for Color_UI. Choose one of the following:
* TFT Font for Color UI. Choose one of the following:
*
* NOTOSANS - Default font with anti-aliasing. Supports Latin Extended and non-Latin characters.
* UNIFONT - Lightweight font, no anti-aliasing. Supports Latin Extended and non-Latin characters.
* HELVETICA - Lightweight font, no anti-aliasing. Supports Basic Latin (0x0020-0x007F) and Latin-1 Supplement (0x0080-0x00FF) characters only.
* :['NOTOSANS', 'UNIFONT', 'HELVETICA']
*/
#define TFT_FONT NOTOSANS
/**
* TFT Theme for Color_UI. Choose one of the following or add a new one to 'Marlin/src/lcd/tft/themes' directory
* TFT Theme for Color UI. Choose one of the following or add a new one to 'Marlin/src/lcd/tft/themes' directory
*
* BLUE_MARLIN - Default theme with 'midnight blue' background
* BLACK_MARLIN - Theme with 'black' background
* ANET_BLACK - Theme used for Anet ET4/5
* :['BLUE_MARLIN', 'BLACK_MARLIN', 'ANET_BLACK']
*/
#define TFT_THEME BLACK_MARLIN
@@ -3488,6 +3553,11 @@
//#define DWIN_MARLINUI_PORTRAIT // MarlinUI (portrait orientation)
//#define DWIN_MARLINUI_LANDSCAPE // MarlinUI (landscape orientation)
#if ENABLED(DWIN_CREALITY_LCD)
//#define USE_STRING_HEADINGS // Use string headings for Creality UI instead of images
//#define USE_STRING_TITLES // Use string titles for Creality UI instead of images
#endif
//
// Touch Screen Settings
//
@@ -3522,7 +3592,9 @@
// https://reprapworld.com/products/electronics/ramps/keypad_v1_0_fully_assembled/
//
//#define REPRAPWORLD_KEYPAD
//#define REPRAPWORLD_KEYPAD_MOVE_STEP 10.0 // (mm) Distance to move per key-press
#if ENABLED(REPRAPWORLD_KEYPAD)
//#define REPRAPWORLD_KEYPAD_MOVE_STEP 10.0 // (mm) Distance to move per key-press
#endif
//
// EasyThreeD ET-4000+ with button input and status LED
@@ -3539,22 +3611,26 @@
// :[1,2,3,4,5,6,7,8]
//#define NUM_M106_FANS 1
// Use software PWM to drive the fan, as for the heaters. This uses a very low frequency
// which is not as annoying as with the hardware PWM. On the other hand, if this frequency
// is too low, you should also increment SOFT_PWM_SCALE.
/**
* Use software PWM to drive the fan, as for the heaters. This uses a very low frequency
* which is not as annoying as with the hardware PWM. On the other hand, if this frequency
* is too low, you should also increment SOFT_PWM_SCALE.
*/
//#define FAN_SOFT_PWM
// Incrementing this by 1 will double the software PWM frequency,
// affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
// However, control resolution will be halved for each increment;
// at zero value, there are 128 effective control positions.
// :[0,1,2,3,4,5,6,7]
/**
* Incrementing this by 1 will double the software PWM frequency, affecting heaters, and
* the fan if FAN_SOFT_PWM is enabled. However, control resolution will be halved for each
* increment; at zero value, there are 128 effective control positions.
* :[0,1,2,3,4,5,6,7]
*/
#define SOFT_PWM_SCALE 0
// If SOFT_PWM_SCALE is set to a value higher than 0, dithering can
// be used to mitigate the associated resolution loss. If enabled,
// some of the PWM cycles are stretched so on average the desired
// duty cycle is attained.
/**
* If SOFT_PWM_SCALE is set to a value higher than 0, dithering can be used to mitigate the
* associated resolution loss. If enabled, some of the PWM cycles are stretched so on average
* the desired duty cycle is attained.
*/
//#define SOFT_PWM_DITHER
// @section extras
@@ -3564,9 +3640,11 @@
// @section lights
// Temperature status LEDs that display the hotend and bed temperature.
// If all hotends, bed temperature, and target temperature are under 54C
// then the BLUE led is on. Otherwise the RED led is on. (1C hysteresis)
/**
* Temperature status LEDs that display the hotend and bed temperature.
* If all hotends, bed temperature, and target temperature are under 54C
* the BLUE led is on. Otherwise the RED led is on. (1C hysteresis)
*/
//#define TEMP_STAT_LEDS
// Support for BlinkM/CyzRgb

View File

@@ -297,7 +297,7 @@
* protect against a broken or disconnected thermistor wire.
*
* The issue: If a thermistor falls out, it will report the much lower
* temperature of the air in the room, and the the firmware will keep
* temperature of the air in the room, and the firmware will keep
* the heater on.
*
* The solution: Once the temperature reaches the target, start observing.
@@ -415,14 +415,19 @@
// A well-chosen Kc value should add just enough power to melt the increased material volume.
//#define PID_EXTRUSION_SCALING
#if ENABLED(PID_EXTRUSION_SCALING)
#define DEFAULT_Kc (100) // heating power = Kc * e_speed
#define LPQ_MAX_LEN 50
#define DEFAULT_KC 100 // heating power = Kc * e_speed
#if ENABLED(PID_PARAMS_PER_HOTEND)
// Specify up to one value per hotend here, according to your setup.
// If there are fewer values, the last one applies to the remaining hotends.
#define DEFAULT_KC_LIST { DEFAULT_KC, DEFAULT_KC } // heating power = Kc * e_speed
#endif
#endif
/**
* Add an additional term to the heater power, proportional to the fan speed.
* A well-chosen Kf value should add just enough power to compensate for power-loss from the cooling fan.
* You can either just add a constant compensation with the DEFAULT_Kf value
* You can either just add a constant compensation with the DEFAULT_KF value
* or follow the instruction below to get speed-dependent compensation.
*
* Constant compensation (use only with fan speeds of 0% and 100%)
@@ -453,21 +458,26 @@
#if ENABLED(PID_FAN_SCALING_ALTERNATIVE_DEFINITION)
// The alternative definition is used for an easier configuration.
// Just figure out Kf at full speed (255) and PID_FAN_SCALING_MIN_SPEED.
// DEFAULT_Kf and PID_FAN_SCALING_LIN_FACTOR are calculated accordingly.
// DEFAULT_KF and PID_FAN_SCALING_LIN_FACTOR are calculated accordingly.
#define PID_FAN_SCALING_AT_FULL_SPEED 13.0 //=PID_FAN_SCALING_LIN_FACTOR*255+DEFAULT_Kf
#define PID_FAN_SCALING_AT_MIN_SPEED 6.0 //=PID_FAN_SCALING_LIN_FACTOR*PID_FAN_SCALING_MIN_SPEED+DEFAULT_Kf
#define PID_FAN_SCALING_AT_FULL_SPEED 13.0 //=PID_FAN_SCALING_LIN_FACTOR*255+DEFAULT_KF
#define PID_FAN_SCALING_AT_MIN_SPEED 6.0 //=PID_FAN_SCALING_LIN_FACTOR*PID_FAN_SCALING_MIN_SPEED+DEFAULT_KF
#define PID_FAN_SCALING_MIN_SPEED 10.0 // Minimum fan speed at which to enable PID_FAN_SCALING
#define DEFAULT_Kf (255.0*PID_FAN_SCALING_AT_MIN_SPEED-PID_FAN_SCALING_AT_FULL_SPEED*PID_FAN_SCALING_MIN_SPEED)/(255.0-PID_FAN_SCALING_MIN_SPEED)
#define PID_FAN_SCALING_LIN_FACTOR (PID_FAN_SCALING_AT_FULL_SPEED-DEFAULT_Kf)/255.0
#define DEFAULT_KF (255.0*PID_FAN_SCALING_AT_MIN_SPEED-PID_FAN_SCALING_AT_FULL_SPEED*PID_FAN_SCALING_MIN_SPEED)/(255.0-PID_FAN_SCALING_MIN_SPEED)
#define PID_FAN_SCALING_LIN_FACTOR (PID_FAN_SCALING_AT_FULL_SPEED-DEFAULT_KF)/255.0
#else
#define PID_FAN_SCALING_LIN_FACTOR (0) // Power-loss due to cooling = Kf * (fan_speed)
#define DEFAULT_Kf 10 // A constant value added to the PID-tuner
#define DEFAULT_KF 10 // A constant value added to the PID-tuner
#define PID_FAN_SCALING_MIN_SPEED 10 // Minimum fan speed at which to enable PID_FAN_SCALING
#endif
#endif
#if ENABLED(PID_PARAMS_PER_HOTEND)
// Specify up to one value per hotend here, according to your setup.
// If there are fewer values, the last one applies to the remaining hotends.
#define DEFAULT_KF_LIST { DEFAULT_KF, DEFAULT_KF }
#endif
#endif
/**
@@ -486,15 +496,15 @@
#define AUTOTEMP
#if ENABLED(AUTOTEMP)
#define AUTOTEMP_OLDWEIGHT 0.98 // Factor used to weight previous readings (0.0 < value < 1.0)
#define AUTOTEMP_MIN 210
#define AUTOTEMP_MAX 250
#define AUTOTEMP_MIN 210
#define AUTOTEMP_MAX 250
#define AUTOTEMP_FACTOR 0.1f
// Turn on AUTOTEMP on M104/M109 by default using proportions set here
//#define AUTOTEMP_PROPORTIONAL
#if ENABLED(AUTOTEMP_PROPORTIONAL)
#define AUTOTEMP_MIN_P 0 // (°C) Added to the target temperature
#define AUTOTEMP_MAX_P 5 // (°C) Added to the target temperature
#define AUTOTEMP_FACTOR_P 1 // Apply this F parameter by default (overridden by M104/M109 F)
#define AUTOTEMP_MIN_P 0 // (°C) Added to the target temperature
#define AUTOTEMP_MAX_P 5 // (°C) Added to the target temperature
#define AUTOTEMP_FACTOR_P 1 // Apply this F parameter by default (overridden by M104/M109 F)
#endif
#endif
@@ -778,7 +788,7 @@
// @section endstops
// If you want endstops to stay on (by default) even when not homing
// If you want endstops to stay on (by default) even when not homing,
// enable this option. Override at any time with M120, M121.
//#define ENDSTOPS_ALWAYS_ON_DEFAULT
@@ -1081,11 +1091,26 @@
#define G34_MAX_GRADE 5 // (%) Maximum incline that G34 will handle
#define Z_STEPPER_ALIGN_ITERATIONS 5 // Number of iterations to apply during alignment
#define Z_STEPPER_ALIGN_ACC 0.02 // Stop iterating early if the accuracy is better than this
#define RESTORE_LEVELING_AFTER_G34 // Restore leveling after G34 is done?
// After G34, re-home Z (G28 Z) or just calculate it from the last probe heights?
// Re-homing might be more precise in reproducing the actual 'G28 Z' homing height, especially on an uneven bed.
#define HOME_AFTER_G34
#endif
/**
* Commands to execute at the start of G34 probing,
* after switching to the PROBING_TOOL.
*/
//#define EVENT_GCODE_BEFORE_G34 "M300 P440 S200"
/**
* Commands to execute at the end of G34 probing.
* Useful to retract or move the Z probe out of the way.
*/
//#define EVENT_GCODE_AFTER_G34 "G1 Z10 F12000\nG1 X15 Y330\nG1 Z0.5\nG1 Z10"
#endif // Z_STEPPER_AUTO_ALIGN
/**
* Assisted Tramming
@@ -1128,67 +1153,111 @@
/**
* Fixed-time-based Motion Control -- BETA FEATURE
* Enable/disable and set parameters with G-code M493.
* Enable/disable and set parameters with G-code M493 and M494.
* See ft_types.h for named values used by FTM options.
*/
//#define FT_MOTION
#if ENABLED(FT_MOTION)
//#define FTM_IS_DEFAULT_MOTION // Use FT Motion as the factory default?
#define FTM_DEFAULT_DYNFREQ_MODE dynFreqMode_DISABLED // Default mode of dynamic frequency calculation. (DISABLED, Z_BASED, MASS_BASED)
//#define FTM_IS_DEFAULT_MOTION // Use FT Motion as the factory default?
//#define FT_MOTION_MENU // Provide a MarlinUI menu to set M493 and M494 parameters
//#define NO_STANDARD_MOTION // Disable the standard motion system entirely to save Flash and RAM
#if DISABLED(NO_STANDARD_MOTION)
//#define FTM_HOME_AND_PROBE // Use FT Motion for homing / probing. Disable if FT Motion breaks these functions.
#endif
//#define FTM_DYNAMIC_FREQ // Enable for linear adjustment of XY shaping frequency according to Z or E
#if ENABLED(FTM_DYNAMIC_FREQ)
#define FTM_DEFAULT_DYNFREQ_MODE dynFreqMode_DISABLED // Default mode of dynamic frequency calculation. (DISABLED, Z_BASED, MASS_BASED)
#endif
// Disable unused shapers if you need more free space
#define FTM_SHAPER_ZV
#define FTM_SHAPER_ZVD
#define FTM_SHAPER_ZVDD
#define FTM_SHAPER_ZVDDD
#define FTM_SHAPER_EI
#define FTM_SHAPER_2HEI
#define FTM_SHAPER_3HEI
#define FTM_SHAPER_MZV
#define FTM_DEFAULT_SHAPER_X ftMotionShaper_NONE // Default shaper mode on X axis (NONE, ZV, ZVD, ZVDD, ZVDDD, EI, 2HEI, 3HEI, MZV)
#define FTM_SHAPING_DEFAULT_FREQ_X 37.0f // (Hz) Default peak frequency used by input shapers
#define FTM_SHAPING_ZETA_X 0.1f // Zeta used by input shapers for X axis
#define FTM_SHAPING_V_TOL_X 0.05f // Vibration tolerance used by EI input shapers for X axis
#define FTM_DEFAULT_SHAPER_Y ftMotionShaper_NONE // Default shaper mode on Y axis
#define FTM_SHAPING_DEFAULT_FREQ_X 37.0f // (Hz) Default peak frequency used by input shapers
#define FTM_SHAPING_DEFAULT_FREQ_Y 37.0f // (Hz) Default peak frequency used by input shapers
#define FTM_LINEAR_ADV_DEFAULT_ENA false // Default linear advance enable (true) or disable (false)
#define FTM_LINEAR_ADV_DEFAULT_K 0.0f // Default linear advance gain. (Acceleration-based scaling factor.)
#define FTM_SHAPING_ZETA_X 0.1f // Zeta used by input shapers for X axis
#define FTM_SHAPING_ZETA_Y 0.1f // Zeta used by input shapers for Y axis
#define FTM_SHAPING_DEFAULT_FREQ_Y 37.0f // (Hz) Default peak frequency used by input shapers
#define FTM_SHAPING_ZETA_Y 0.1f // Zeta used by input shapers for Y axis
#define FTM_SHAPING_V_TOL_Y 0.05f // Vibration tolerance used by EI input shapers for Y axis
#define FTM_SHAPING_V_TOL_X 0.05f // Vibration tolerance used by EI input shapers for X axis
#define FTM_SHAPING_V_TOL_Y 0.05f // Vibration tolerance used by EI input shapers for Y axis
//#define FTM_SHAPER_Z // Include Z shaping support
#define FTM_DEFAULT_SHAPER_Z ftMotionShaper_NONE // Default shaper mode on Z axis
#define FTM_SHAPING_DEFAULT_FREQ_Z 21.0f // (Hz) Default peak frequency used by input shapers
#define FTM_SHAPING_ZETA_Z 0.03f // Zeta used by input shapers for Z axis
#define FTM_SHAPING_V_TOL_Z 0.05f // Vibration tolerance used by EI input shapers for Z axis
//#define FT_MOTION_MENU // Provide a MarlinUI menu to set M493 parameters
//#define FTM_SHAPER_E // Include E shaping support
// Required to synchronize extruder with XYZ (better quality)
#define FTM_DEFAULT_SHAPER_E ftMotionShaper_NONE // Default shaper mode on Extruder axis
#define FTM_SHAPING_DEFAULT_FREQ_E 21.0f // (Hz) Default peak frequency used by input shapers
#define FTM_SHAPING_ZETA_E 0.03f // Zeta used by input shapers for E axis
#define FTM_SHAPING_V_TOL_E 0.05f // Vibration tolerance used by EI input shapers for E axis
//#define FTM_RESONANCE_TEST // Sine sweep motion for resonance study
//#define FTM_SMOOTHING // Smoothing can reduce artifacts and make steppers quieter
// on sharp corners, but too much will round corners.
#if ENABLED(FTM_SMOOTHING)
#define FTM_MAX_SMOOTHING_TIME 0.10f // (s) Maximum smoothing time. Higher values consume more RAM.
// Increase smoothing time to reduce jerky motion, ghosting and noises.
#define FTM_SMOOTHING_TIME_X 0.00f // (s) Smoothing time for X axis. Zero means disabled.
#define FTM_SMOOTHING_TIME_Y 0.00f // (s) Smoothing time for Y axis
#define FTM_SMOOTHING_TIME_Z 0.00f // (s) Smoothing time for Z axis
#define FTM_SMOOTHING_TIME_E 0.02f // (s) Smoothing time for E axis. Prevents noise/skipping from LA by
// smoothing acceleration peaks, which may also smooth curved surfaces.
#endif
#define FTM_POLYS // Disable POLY5/6 to save ~3k of Flash. Preserves TRAPEZOIDAL.
#if ENABLED(FTM_POLYS)
#define FTM_TRAJECTORY_TYPE TRAPEZOIDAL // Block acceleration profile (TRAPEZOIDAL, POLY5, POLY6)
// TRAPEZOIDAL: Continuous Velocity. Max acceleration is respected.
// POLY5: Like POLY6 with 1.5x but uses less CPU.
// POLY6: Continuous Acceleration (aka S_CURVE).
// POLY trajectories not only reduce resonances without rounding corners, but also
// reduce extruder strain due to linear advance.
#define FTM_POLY6_ACCELERATION_OVERSHOOT 1.875f // Max acceleration overshoot factor for POLY6 (1.25 to 1.875)
#endif
/**
* Advanced configuration
*/
#define FTM_UNIFIED_BWS // DON'T DISABLE unless you use Ulendo FBS (not implemented)
#if ENABLED(FTM_UNIFIED_BWS)
#define FTM_BW_SIZE 100 // Unified Window and Batch size with a ratio of 2
#else
#define FTM_WINDOW_SIZE 200 // Custom Window size for trajectory generation needed by Ulendo FBS
#define FTM_BATCH_SIZE 100 // Custom Batch size for trajectory generation needed by Ulendo FBS
#define FTM_BUFFER_SIZE 128 // Window size for trajectory generation, must be a power of 2 (e.g 64, 128, 256, ...)
// The total buffered time in seconds is (FTM_BUFFER_SIZE/FTM_FS)
#define FTM_FS 1000 // (Hz) Frequency for trajectory generation.
#define FTM_MIN_SHAPE_FREQ 20 // (Hz) Minimum shaping frequency, lower consumes more RAM
/**
* TMC2208 / TMC2208_STANDALONE drivers require a brief pause after a DIR change
* to prevent a standstill shutdown when using StealthChop (the standalone default).
* These options cause FT Motion to delay for > 750µs after a DIR change on a given axis.
* Disable only if you are certain that this can never happen with your TMC2208s.
*/
#if AXIS_DRIVER_TYPE_X(TMC2208) || AXIS_DRIVER_TYPE_X(TMC2208_STANDALONE)
#define FTM_DIR_CHANGE_HOLD_X
#endif
#if AXIS_DRIVER_TYPE_Y(TMC2208) || AXIS_DRIVER_TYPE_Y(TMC2208_STANDALONE)
#define FTM_DIR_CHANGE_HOLD_Y
#endif
#if AXIS_DRIVER_TYPE_Z(TMC2208) || AXIS_DRIVER_TYPE_Z(TMC2208_STANDALONE)
#define FTM_DIR_CHANGE_HOLD_Z
#endif
#if HAS_E_DRIVER(TMC2208) || HAS_E_DRIVER(TMC2208_STANDALONE)
#define FTM_DIR_CHANGE_HOLD_E
#endif
#define FTM_FS 1000 // (Hz) Frequency for trajectory generation. (Reciprocal of FTM_TS)
#define FTM_TS 0.001f // (s) Time step for trajectory generation. (Reciprocal of FTM_FS)
#if DISABLED(COREXY)
#define FTM_STEPPER_FS 20000 // (Hz) Frequency for stepper I/O update
// Use this to adjust the time required to consume the command buffer.
// Try increasing this value if stepper motion is choppy.
#define FTM_STEPPERCMD_BUFF_SIZE 3000 // Size of the stepper command buffers
#else
// CoreXY motion needs a larger buffer size. These values are based on our testing.
#define FTM_STEPPER_FS 30000
#define FTM_STEPPERCMD_BUFF_SIZE 6000
#endif
#define FTM_STEPS_PER_UNIT_TIME (FTM_STEPPER_FS / FTM_FS) // Interpolated stepper commands per unit time
#define FTM_CTS_COMPARE_VAL (FTM_STEPS_PER_UNIT_TIME / 2) // Comparison value used in interpolation algorithm
#define FTM_MIN_TICKS ((STEPPER_TIMER_RATE) / (FTM_STEPPER_FS)) // Minimum stepper ticks between steps
#define FTM_MIN_SHAPE_FREQ 10 // Minimum shaping frequency
#define FTM_RATIO (FTM_FS / FTM_MIN_SHAPE_FREQ) // Factor for use in FTM_ZMAX. DON'T CHANGE.
#define FTM_ZMAX (FTM_RATIO * 2) // Maximum delays for shaping functions (even numbers only!)
// Calculate as:
// ZV : FTM_RATIO / 2
// ZVD, MZV : FTM_RATIO
// 2HEI : FTM_RATIO * 3 / 2
// 3HEI : FTM_RATIO * 2
#endif
#endif // FT_MOTION
/**
* Input Shaping
@@ -1342,20 +1411,20 @@
//#define CALIBRATION_SCRIPT_PRE "M117 Starting Auto-Calibration\nT0\nG28\nG12\nM117 Calibrating..."
//#define CALIBRATION_SCRIPT_POST "M500\nM117 Calibration data saved"
#define CALIBRATION_FEEDRATE_SLOW 60 // mm/min
#define CALIBRATION_FEEDRATE_FAST 1200 // mm/min
#define CALIBRATION_FEEDRATE_TRAVEL 3000 // mm/min
#define CALIBRATION_FEEDRATE_SLOW 60 // (mm/min)
#define CALIBRATION_FEEDRATE_FAST 1200 // (mm/min)
#define CALIBRATION_FEEDRATE_TRAVEL 3000 // (mm/min)
// The following parameters refer to the conical section of the nozzle tip.
#define CALIBRATION_NOZZLE_TIP_HEIGHT 1.0 // mm
#define CALIBRATION_NOZZLE_OUTER_DIAMETER 2.0 // mm
#define CALIBRATION_NOZZLE_TIP_HEIGHT 1.0 // (mm)
#define CALIBRATION_NOZZLE_OUTER_DIAMETER 2.0 // (mm)
// Uncomment to enable reporting (required for "G425 V", but consumes flash).
//#define CALIBRATION_REPORTING
// The true location and dimension the cube/bolt/washer on the bed.
#define CALIBRATION_OBJECT_CENTER { 264.0, -22.0, -2.0 } // mm
#define CALIBRATION_OBJECT_DIMENSIONS { 10.0, 10.0, 10.0 } // mm
#define CALIBRATION_OBJECT_CENTER { 264.0, -22.0, -2.0 } // (mm)
#define CALIBRATION_OBJECT_DIMENSIONS { 10.0, 10.0, 10.0 } // (mm)
// Comment out any sides which are unreachable by the probe. For best
// auto-calibration results, all sides must be reachable.
@@ -1394,7 +1463,7 @@
* Multi-stepping sends steps in bursts to reduce MCU usage for high step-rates.
* This allows higher feedrates than the MCU could otherwise support.
*/
#define MULTISTEPPING_LIMIT 16 //: [1, 2, 4, 8, 16, 32, 64, 128]
#define MULTISTEPPING_LIMIT 16 // :[1, 2, 4, 8, 16, 32, 64, 128]
/**
* Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
@@ -1419,24 +1488,24 @@
#define MICROSTEP_MODES { 16, 16, 16, 16, 16, 16 } // [1,2,4,8,16]
/**
* @section stepper motor current
* @section stepper motor current
*
* Some boards have a means of setting the stepper motor current via firmware.
* Some boards have a means of setting the stepper motor current via firmware.
*
* The power on motor currents are set by:
* PWM_MOTOR_CURRENT - used by MINIRAMBO & ULTIMAIN_2
* known compatible chips: A4982
* DIGIPOT_MOTOR_CURRENT - used by BQ_ZUM_MEGA_3D, RAMBO & SCOOVO_X9H
* known compatible chips: AD5206
* DAC_MOTOR_CURRENT_DEFAULT - used by PRINTRBOARD_REVF & RIGIDBOARD_V2
* known compatible chips: MCP4728
* DIGIPOT_I2C_MOTOR_CURRENTS - used by 5DPRINT, AZTEEG_X3_PRO, AZTEEG_X5_MINI_WIFI, MIGHTYBOARD_REVE
* known compatible chips: MCP4451, MCP4018
* The power on motor currents are set by:
* PWM_MOTOR_CURRENT - used by MINIRAMBO & ULTIMAIN_2
* known compatible chips: A4982
* DIGIPOT_MOTOR_CURRENT - used by BQ_ZUM_MEGA_3D, RAMBO & SCOOVO_X9H
* known compatible chips: AD5206
* DAC_MOTOR_CURRENT_DEFAULT - used by PRINTRBOARD_REVF & RIGIDBOARD_V2
* known compatible chips: MCP4728
* DIGIPOT_I2C_MOTOR_CURRENTS - used by 5DPRINT, AZTEEG_X3_PRO, AZTEEG_X5_MINI_WIFI, MIGHTYBOARD_REVE
* known compatible chips: MCP4451, MCP4018
*
* Motor currents can also be set by M907 - M910 and by the LCD.
* M907 - applies to all.
* M908 - BQ_ZUM_MEGA_3D, RAMBO, PRINTRBOARD_REVF, RIGIDBOARD_V2 & SCOOVO_X9H
* M909, M910 & LCD - only PRINTRBOARD_REVF & RIGIDBOARD_V2
* Motor currents can also be set by M907 - M910 and by the LCD.
* M907 - applies to all.
* M908 - BQ_ZUM_MEGA_3D, RAMBO, PRINTRBOARD_REVF, RIGIDBOARD_V2 & SCOOVO_X9H
* M909, M910 & LCD - only PRINTRBOARD_REVF & RIGIDBOARD_V2
*/
//#define PWM_MOTOR_CURRENT { 1300, 1300, 1250 } // Values in milliamps
//#define DIGIPOT_MOTOR_CURRENT { 135,135,135,135,135 } // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A)
@@ -1476,6 +1545,9 @@
// @section lcd
// Turn off the display blinking that warns about possible accuracy reduction
//#define DISABLE_REDUCED_ACCURACY_WARNING
#if HAS_MANUAL_MOVE_MENU
#define MANUAL_FEEDRATE { 50*60, 50*60, 4*60, 2*60 } // (mm/min) Feedrates for manual moves along X, Y, Z, E from panel
#define FINE_MANUAL_MOVE 0.025 // (mm) Smallest manual move (< 0.1mm) applying to Z on most machines
@@ -1551,6 +1623,7 @@
//#define LCD_INFO_MENU
#if ENABLED(LCD_INFO_MENU)
//#define LCD_PRINTER_INFO_IS_BOOTSCREEN // Show bootscreen(s) instead of Printer Info pages
//#define BUILD_INFO_MENU_ITEM // Add a menu item to display the build date and time
#endif
/**
@@ -1606,7 +1679,7 @@
#if HAS_MARLINUI_U8GLIB
//#define BOOT_MARLIN_LOGO_ANIMATED // Animated Marlin logo. Costs ~3260 (or ~940) bytes of flash.
#endif
#if ANY(HAS_MARLINUI_U8GLIB, TOUCH_UI_FTDI_EVE, HAS_MARLINUI_HD44780)
#if ANY(HAS_MARLINUI_U8GLIB, TOUCH_UI_FTDI_EVE, HAS_MARLINUI_HD44780, HAS_GRAPHICAL_TFT)
//#define SHOW_CUSTOM_BOOTSCREEN // Show the bitmap in Marlin/_Bootscreen.h on startup.
#endif
#endif
@@ -1618,6 +1691,10 @@
//#define SOUND_MENU_ITEM // Add a mute option to the LCD menu
#define SOUND_ON_DEFAULT // Buzzer/speaker default enabled state
#if ENABLED(U8GLIB_SSD1309)
//#define LCD_DOUBLE_BUFFER // Optimize display updates. Costs ~1K of SRAM.
#endif
#if HAS_WIRED_LCD
//#define DOUBLE_LCD_FRAMERATE // Not recommended for slow boards.
#endif
@@ -1668,11 +1745,12 @@
#endif // HAS_DISPLAY
#if HAS_FEEDRATE_EDIT
// Some displays offer Feedrate / Flow editing.
#if ANY(HAS_MARLINUI_MENU, DWIN_CREALITY_LCD, DWIN_LCD_PROUI, MALYAN_LCD, TOUCH_SCREEN, ULTIPANEL_FEEDMULTIPLY)
#define SPEED_EDIT_MIN 10 // (%) Feedrate percentage edit range minimum
#define SPEED_EDIT_MAX 999 // (%) Feedrate percentage edit range maximum
#endif
#if HAS_FLOW_EDIT
#if ANY(HAS_MARLINUI_MENU, DWIN_CREALITY_LCD, DWIN_LCD_PROUI, MALYAN_LCD, TOUCH_SCREEN)
#define FLOW_EDIT_MIN 10 // (%) Flow percentage edit range minimum
#define FLOW_EDIT_MAX 999 // (%) Flow percentage edit range maximum
#endif
@@ -1723,6 +1801,12 @@
*/
//#define SD_SPI_SPEED SPI_HALF_SPEED
/**
* Reinit the LCD after SD Card insert/remove or when entering the menu.
* Required for some LCDs that use shared SPI with an external SD Card reader.
*/
#define REINIT_NOISY_LCD
// The standard SD detect circuit reads LOW when media is inserted and HIGH when empty.
// Enable this option and set to HIGH if your SD cards are incorrectly detected.
//#define SD_DETECT_STATE HIGH
@@ -1757,6 +1841,14 @@
#define PE_LEDS_COMPLETED_TIME (30*60) // (seconds) Time to keep the LED "done" color before restoring normal illumination
#endif
/**
* Priming for the Remaining Time estimate
* Long processes at the start of a G-code file can skew the Remaining Time estimate.
* Enable these options to start this estimation at a later point in the G-code file.
*/
//#define REMAINING_TIME_PRIME // Provide G-code 'M75 R' to prime the Remaining Time estimate
//#define REMAINING_TIME_AUTOPRIME // Prime the Remaining Time estimate later (e.g., at the end of 'M109')
/**
* Continue after Power-Loss (Creality3D)
*
@@ -1768,6 +1860,8 @@
//#define POWER_LOSS_RECOVERY
#if ENABLED(POWER_LOSS_RECOVERY)
#define PLR_ENABLED_DEFAULT false // Power-Loss Recovery enabled by default. (Set with 'M413 Sn' & M500)
//#define PLR_HEAT_BED_ON_REBOOT // Heat up bed immediately on reboot to mitigate object detaching/warping.
//#define PLR_HEAT_BED_EXTRA 0 // (°C) Relative increase of bed temperature for better adhesion (limited by max temp).
//#define PLR_BED_THRESHOLD BED_MAXTEMP // (°C) Skip user confirmation at or above this bed temperature (0 to disable)
//#define POWER_LOSS_PIN 44 // Pin to detect power-loss. Set to -1 to disable default pin on boards without module, or comment to use board default.
@@ -1821,16 +1915,21 @@
// SD Card Sorting options
#if ENABLED(SDCARD_SORT_ALPHA)
#define SDSORT_REVERSE false // Default to sorting file names in reverse order.
#define SDSORT_LIMIT 40 // Maximum number of sorted items (10-256). Costs 27 bytes each.
#define SDSORT_FOLDERS -1 // -1=above 0=none 1=below
#define SDSORT_GCODE false // Enable G-code M34 to set sorting behaviors: M34 S<-1|0|1> F<-1|0|1>
#define SDSORT_USES_RAM false // Pre-allocate a static array for faster pre-sorting.
#define SDSORT_USES_STACK false // Prefer the stack for pre-sorting to give back some SRAM. (Negated by next 2 options.)
#define SDSORT_CACHE_NAMES false // Keep sorted items in RAM longer for speedy performance. Most expensive option.
#define SDSORT_DYNAMIC_RAM false // Use dynamic allocation (within SD menus). Least expensive option. Set SDSORT_LIMIT before use!
#define SDSORT_CACHE_VFATS 2 // Maximum number of 13-byte VFAT entries to use for sorting.
// Note: Only affects SCROLL_LONG_FILENAMES with SDSORT_CACHE_NAMES but not SDSORT_DYNAMIC_RAM.
#define SDSORT_QUICK true // Use Quick Sort as a sorting algorithm. Otherwise use Bubble Sort.
#define SDSORT_REVERSE false // Default to sorting file names in reverse order.
#define SDSORT_LIMIT 40 // Maximum number of sorted items (10-256). Costs 27 bytes each.
#define SDSORT_FOLDERS -1 // -1=above 0=none 1=below
#define SDSORT_GCODE false // Enable G-code M34 to set sorting behaviors: M34 S<-1|0|1> F<-1|0|1>
#define SDSORT_USES_STACK false // Prefer the stack for pre-sorting to give back some SRAM. (Negated by next 2 options.)
#define SDSORT_USES_RAM false // Pre-allocate a static array for faster pre-sorting.
#if ENABLED(SDSORT_USES_RAM)
#define SDSORT_CACHE_NAMES false // Keep sorted items in RAM longer for speedy performance. Most expensive option.
#if ENABLED(SDSORT_CACHE_NAMES)
#define SDSORT_DYNAMIC_RAM false // Use dynamic allocation (within SD menus). Least expensive option. Set SDSORT_LIMIT before use!
#define SDSORT_CACHE_VFATS 2 // Maximum number of 13-byte VFAT entries to use for sorting.
// Note: Only affects SCROLL_LONG_FILENAMES with SDSORT_CACHE_NAMES but not SDSORT_DYNAMIC_RAM.
#endif
#endif
#endif
// Allow international symbols in long filenames. To display correctly, the
@@ -1869,7 +1968,7 @@
*
* SCLK, MOSI, MISO --> SCLK, MOSI, MISO
* INT --> SD_DETECT_PIN [1]
* SS --> SDSS
* SS --> SD_SS_PIN
*
* [1] On AVR an interrupt-capable pin is best for UHS3 compatibility.
*/
@@ -1896,7 +1995,7 @@
//#define USE_OTG_USB_HOST
#if DISABLED(USE_OTG_USB_HOST)
#define USB_CS_PIN SDSS
#define USB_CS_PIN SD_SS_PIN
#define USB_INTR_PIN SD_DETECT_PIN
#endif
#endif
@@ -1933,6 +2032,9 @@
//#define CUSTOM_FIRMWARE_UPLOAD
#endif
// "Over-the-air" Firmware Update with M936 - Required to set EEPROM flag
//#define OTA_FIRMWARE_UPDATE
/**
* Set this option to one of the following (or the board's defaults apply):
*
@@ -1955,8 +2057,8 @@
#if ENABLED(MULTI_VOLUME)
#define VOLUME_SD_ONBOARD
#define VOLUME_USB_FLASH_DRIVE
#define DEFAULT_VOLUME SV_SD_ONBOARD
#define DEFAULT_SHARED_VOLUME SV_USB_FLASH_DRIVE
#define DEFAULT_VOLUME SD_ONBOARD // :[ 'SD_ONBOARD', 'USB_FLASH_DRIVE' ]
#define DEFAULT_SHARED_VOLUME USB_FLASH_DRIVE // :[ 'SD_ONBOARD', 'USB_FLASH_DRIVE' ]
#endif
#endif // HAS_MEDIA
@@ -2007,7 +2109,7 @@
#if IS_U8GLIB_ST7920
// Enable this option and reduce the value to optimize screen updates.
// The normal delay is 10µs. Use the lowest value that still gives a reliable display.
//#define DOGM_SPI_DELAY_US 5
//#define DOGM_SPI_DELAY_US 5 // (µs) Delay after each SPI transfer
//#define LIGHTWEIGHT_UI
#if ENABLED(LIGHTWEIGHT_UI)
@@ -2226,7 +2328,7 @@
// Developer menu (accessed by touching "About Printer" copyright text)
//#define TOUCH_UI_DEVELOPER_MENU
#endif
#endif // TOUCH_UI_FTDI_EVE
//
// Classic UI Options
@@ -2260,9 +2362,11 @@
// ADC Button Debounce
//
#if HAS_ADC_BUTTONS
#define ADC_BUTTON_DEBOUNCE_DELAY 16 // Increase if buttons bounce or repeat too fast
#define ADC_BUTTON_DEBOUNCE_DELAY 16 // (count) Increase if buttons bounce or repeat too fast
#endif
//#define FAST_BUTTON_POLLING // Poll buttons at ~1kHz on 8-bit AVR. Set to 'false' for slow polling on 32-bit.
// @section safety
/**
@@ -2279,7 +2383,7 @@
//#define WATCHDOG_RESET_MANUAL
#endif
// @section lcd
// @section baby-stepping
/**
* Babystepping enables movement of the axes by tiny increments without changing
@@ -2301,7 +2405,7 @@
//#define DOUBLECLICK_FOR_Z_BABYSTEPPING // Double-click on the Status Screen for Z Babystepping.
#if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
#define DOUBLECLICK_MAX_INTERVAL 1250 // Maximum interval between clicks, in milliseconds.
#define DOUBLECLICK_MAX_INTERVAL 1250 // (ms) Maximum interval between clicks.
// Note: Extra time may be added to mitigate controller latency.
//#define MOVE_Z_WHEN_IDLE // Jump to the move Z menu on double-click when printer is idle.
#if ENABLED(MOVE_Z_WHEN_IDLE)
@@ -2336,15 +2440,37 @@
* See https://marlinfw.org/docs/features/lin_advance.html for full instructions.
*/
//#define LIN_ADVANCE
#if ENABLED(LIN_ADVANCE)
#if ANY(LIN_ADVANCE, FT_MOTION)
#if ENABLED(DISTINCT_E_FACTORS)
#define ADVANCE_K { 0.22 } // (mm) Compression length per 1mm/s extruder speed, per extruder
#define ADVANCE_K { 0.22 } // (mm) Compression length per 1mm/s extruder speed, per extruder. Override with 'M900 T<tool> K<mm>'.
#else
#define ADVANCE_K 0.22 // (mm) Compression length applying to all extruders
#define ADVANCE_K 0.22 // (mm) Compression length for all extruders. Override with 'M900 K<mm>'.
#endif
//#define ADVANCE_K_EXTRA // Add a second linear advance constant, configurable with M900 L.
//#define ADVANCE_K_EXTRA // Add a second linear advance constant, configurable with 'M900 L'.
#endif
#if ENABLED(LIN_ADVANCE)
//#define LA_DEBUG // Print debug information to serial during operation. Disable for production use.
//#define EXPERIMENTAL_I2S_LA // Allow I2S_STEPPER_STREAM to be used with LA. Performance degrades as the LA step rate reaches ~20kHz.
//#define SMOOTH_LIN_ADVANCE // Remove limits on acceleration by gradual increase of nozzle pressure
#if ENABLED(SMOOTH_LIN_ADVANCE)
/**
* ADVANCE_TAU is also the time ahead that the smoother needs to look
* into the planner, so the planner needs to have enough blocks loaded.
* For k=0.04 at 10k acceleration and an "Orbiter 2" extruder it can be as low as 0.0075.
* Adjust by lowering the value until you observe the extruder skipping, then raise slightly.
* Higher k and higher XY acceleration may require larger ADVANCE_TAU to avoid skipping steps.
*/
#if ENABLED(DISTINCT_E_FACTORS)
#define ADVANCE_TAU { 0.02 } // (s) Smoothing time to reduce extruder acceleration, per extruder
#else
#define ADVANCE_TAU 0.02 // (s) Smoothing time to reduce extruder acceleration
#endif
#define SMOOTH_LIN_ADV_HZ 1000 // (Hz) How often to update extruder speed
#define INPUT_SHAPING_E_SYNC // Synchronize the extruder-shaped XY axes (to increase precision)
#endif
#endif
/**
@@ -2355,6 +2481,9 @@
* For better results also enable ADAPTIVE_STEP_SMOOTHING.
*/
//#define NONLINEAR_EXTRUSION
#if ENABLED(NONLINEAR_EXTRUSION)
//#define NONLINEAR_EXTRUSION_DEFAULT_ON // Enable if NLE should be ON by default
#endif
// @section leveling
@@ -2507,13 +2636,15 @@
#endif
#endif // PTC_PROBE || PTC_BED || PTC_HOTEND
// @section extras
// @section gcode
//
// G60/G61 Position Save and Return
//
//#define SAVED_POSITIONS 1 // Each saved position slot costs 12 bytes
// @section motion
//
// G2/G3 Arc Support
//
@@ -2545,6 +2676,8 @@
*/
//#define DIRECT_STEPPING
// @section calibrate
/**
* G38 Probe Target
*
@@ -2633,19 +2766,23 @@
#define MAX_CMD_SIZE 96
#define BUFSIZE 4
// Transmission to Host Buffer Size
// To save 386 bytes of flash (and TX_BUFFER_SIZE+3 bytes of RAM) set to 0.
// To buffer a simple "ok" you need 4 bytes.
// For ADVANCED_OK (M105) you need 32 bytes.
// For debug-echo: 128 bytes for the optimal speed.
// Other output doesn't need to be that speedy.
// :[0, 2, 4, 8, 16, 32, 64, 128, 256]
/**
* Host Transmit Buffer Size
* - Costs 386 bytes of flash and TX_BUFFER_SIZE+3 bytes of SRAM (if not 0).
* - 4 bytes required to buffer a simple "ok".
* - 32 bytes for ADVANCED_OK (M105).
* - 128 bytes for the optimal speed of 'debug-echo:'
* - Other output doesn't need to be that speedy.
* :[0, 2, 4, 8, 16, 32, 64, 128, 256]
*/
#define TX_BUFFER_SIZE 0
// Host Receive Buffer Size
// Without XON/XOFF flow control (see SERIAL_XON_XOFF below) 32 bytes should be enough.
// To use flow control, set this buffer size to at least 1024 bytes.
// :[0, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048]
/**
* Host Receive Buffer Size
* Without XON/XOFF flow control (see SERIAL_XON_XOFF below) 32 bytes should be enough.
* To use flow control, set this buffer size to at least 1024 bytes.
* :[0, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048]
*/
//#define RX_BUFFER_SIZE 1024
#if RX_BUFFER_SIZE >= 1024
@@ -2662,6 +2799,11 @@
// Enable this option to collect and display the number
// of dropped bytes after a file transfer to SD.
//#define SERIAL_STATS_DROPPED_RX
// Enable this option to collect and display framing errors.
// Framing errors occur when invalid start/stop bits or other
// serial protocol violations are detected.
//#define SERIAL_STATS_RX_FRAMING_ERRORS
#endif
// Monitor RX buffer usage
@@ -2689,8 +2831,8 @@
*
* Adds support for commands:
* S000 : Report State and Position while moving.
* P000 : Instant Pause / Hold while moving.
* R000 : Resume from Pause / Hold.
* P000 : Instant Pause / Hold while moving. Enable SOFT_FEED_HOLD for soft deceleration.
* R000 : Resume from Pause / Hold. Enable SOFT_FEED_HOLD for soft acceleration.
*
* - During Hold all Emergency Parser commands are available, as usual.
* - Enable NANODLP_Z_SYNC and NANODLP_ALL_AXIS for move command end-state reports.
@@ -2747,7 +2889,7 @@
*/
//#define EXTRA_FAN_SPEED
// @section gcode
// @section firmware retraction
/**
* Firmware-based and LCD-controlled retract
@@ -2964,7 +3106,7 @@
/**
* Trinamic Smart Drivers
*
* To use TMC2130, TMC2160, TMC2660, TMC5130, TMC5160 stepper drivers in SPI mode:
* To use TMC2130, TMC2160, TMC2240, TMC2660, TMC5130, TMC5160 stepper drivers in SPI mode:
* - Connect your SPI pins to the Hardware SPI interface on the board.
* Some boards have simple jumper connections! See your board's documentation.
* - Define the required Stepper CS pins in your `pins_MYBOARD.h` file.
@@ -2986,12 +3128,22 @@
#define HOLD_MULTIPLIER 0.5 // Scales down the holding current from run current
//#define EDITABLE_HOMING_CURRENT // Add a G-code and menu to modify the Homing Current
/**
* Interpolate microsteps to 256
* Override for each driver with <driver>_INTERPOLATE settings below
*/
#define INTERPOLATE true
#if HAS_DRIVER(TMC2240)
#define TMC2240_RREF 12000 // (Ω) 12000 .. 60000. (FLY TMC2240 = 12300)
// Max Current. Lower for more internal resolution. Raise to run cooler.
#define TMC2240_CURRENT_RANGE 1 // :{ 0:'RMS=690mA PEAK=1A', 1:'RMS=1410mA PEAK=2A', 2:'RMS=2120mA PEAK=3A', 3:'RMS=2110mA PEAK=3A' }
// Slope Control: Lower is more silent. Higher runs cooler.
#define TMC2240_SLOPE_CONTROL 0 // :{ 0:'100V/µs', 1:'200V/µs', 2:'400V/µs', 3:'800V/µs' }
#endif
#if AXIS_IS_TMC_CONFIG(X)
#define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current.
#define X_CURRENT_HOME X_CURRENT // (mA) RMS current for homing. (Typically lower than *_CURRENT.)
@@ -3214,7 +3366,7 @@
// @section tmc/spi
/**
* Override default SPI pins for TMC2130, TMC2160, TMC2660, TMC5130 and TMC5160 drivers here.
* Override default SPI pins for TMC2130, TMC2160, TMC2240, TMC2660, TMC5130 and TMC5160 drivers here.
* The default pins can be found in your board's pins file.
*/
//#define X_CS_PIN -1
@@ -3241,7 +3393,7 @@
//#define E7_CS_PIN -1
/**
* Software option for SPI driven drivers (TMC2130, TMC2160, TMC2660, TMC5130 and TMC5160).
* Software option for SPI driven drivers (TMC2130, TMC2160, TMC2240, TMC2660, TMC5130 and TMC5160).
* The default SW SPI pins are defined the respective pins files,
* but you can override or define them here.
*/
@@ -3300,7 +3452,7 @@
// @section tmc/stealthchop
/**
* TMC2130, TMC2160, TMC2208, TMC2209, TMC5130 and TMC5160 only
* TMC2130, TMC2160, TMC2208, TMC2209, TMC2240, TMC5130 and TMC5160 only
* Use Trinamic's ultra quiet stepping mode.
* When disabled, Marlin will use spreadCycle stepping mode.
*/
@@ -3379,7 +3531,7 @@
// @section tmc/hybrid
/**
* TMC2130, TMC2160, TMC2208, TMC2209, TMC5130 and TMC5160 only
* TMC2130, TMC2160, TMC2208, TMC2209, TMC2240, TMC5130 and TMC5160 only
* The driver will switch to spreadCycle when stepper speed is over HYBRID_THRESHOLD.
* This mode allows for faster movements at the expense of higher noise levels.
* STEALTHCHOP_(XY|Z|E) must be enabled to use HYBRID_THRESHOLD.
@@ -3413,20 +3565,20 @@
/**
* Use StallGuard to home / probe X, Y, Z.
*
* TMC2130, TMC2160, TMC2209, TMC2660, TMC5130, and TMC5160 only
* TMC2130, TMC2160, TMC2209, TMC2240, TMC2660, TMC5130, and TMC5160 only
* Connect the stepper driver's DIAG1 pin to the X/Y endstop pin.
* X, Y, and Z homing will always be done in spreadCycle mode.
*
* X/Y/Z_STALL_SENSITIVITY is the default stall threshold.
* Use M914 X Y Z to set the stall threshold at runtime:
*
* Sensitivity TMC2209 Others
* HIGHEST 255 -64 (Too sensitive => False positive)
* LOWEST 0 63 (Too insensitive => No trigger)
* Sensitivity TMC2209 Others
* HIGHEST 255 -64 (Too sensitive => False positive)
* LOWEST 0 63 (Too insensitive => No trigger)
*
* It is recommended to set HOMING_BUMP_MM to { 0, 0, 0 }.
*
* SPI_ENDSTOPS *** TMC2130/TMC5160 Only ***
* SPI_ENDSTOPS *** TMC2130, TMC2240, and TMC5160 Only ***
* Poll the driver through SPI to determine load when homing.
* Removes the need for a wire from DIAG1 to an endstop pin.
*
@@ -3454,8 +3606,9 @@
//#define U_STALL_SENSITIVITY 8
//#define V_STALL_SENSITIVITY 8
//#define W_STALL_SENSITIVITY 8
//#define SPI_ENDSTOPS // TMC2130/TMC5160 only
//#define SPI_ENDSTOPS // TMC2130, TMC2240, and TMC5160
//#define IMPROVE_HOMING_RELIABILITY
//#define SENSORLESS_STALLGUARD_DELAY 0 // (ms) Delay to allow drivers to settle
#endif
// @section tmc/config
@@ -3553,7 +3706,7 @@
//#define PHOTO_RETRACT_MM 6.5 // (mm) E retract/recover for the photo move (M240 R S)
// Canon RC-1 or homebrew digital camera trigger
// Data from: https://www.doc-diy.net/photo/rc-1_hacked/
// Data from: https://web.archive.org/web/20250327153953/www.doc-diy.net/photo/rc-1_hacked/
//#define PHOTOGRAPH_PIN 23
// Canon Hack Development Kit
@@ -3671,6 +3824,8 @@
#define SPEED_POWER_MIN 5000 // (RPM)
#define SPEED_POWER_MAX 30000 // (RPM) SuperPID router controller 0 - 30,000 RPM
#define SPEED_POWER_STARTUP 25000 // (RPM) M3/M4 speed/power default (with no arguments)
//#define DEFAULT_ACCELERATION_SPINDLE 1000 // (°/s/s) Default spindle acceleration (speed change with time)
#endif
#else
@@ -3912,7 +4067,7 @@
/**
* Extra options for the M114 "Current Position" report
*/
//#define M114_DETAIL // Use 'M114` for details to check planner calculations
//#define M114_DETAIL // Use 'M114 D' for details to check planner calculations
//#define M114_REALTIME // Real current position based on forward kinematics
//#define M114_LEGACY // M114 used to synchronize on every call. Enable if needed.
@@ -3941,7 +4096,7 @@
#endif
/**
* M115 - Report capabilites. Disable to save ~1150 bytes of flash.
* M115 - Report capabilities. Disable to save ~1150 bytes of flash.
* Some hosts (and serial TFT displays) rely on this feature.
*/
#define CAPABILITIES_REPORT
@@ -3959,7 +4114,6 @@
* Spend 28 bytes of SRAM to optimize the G-code parser
*/
#define FASTER_GCODE_PARSER
#if ENABLED(FASTER_GCODE_PARSER)
//#define GCODE_QUOTED_STRINGS // Support for quoted string parameters
#endif
@@ -4017,13 +4171,17 @@
/**
* G-code Macros
*
* Add G-codes M810-M819 to define and run G-code macros.
* Macros are not saved to EEPROM.
* Add G-codes M810-M819 to define and run G-code macros
* and M820 to report the current set of macros.
* Macros are not saved to EEPROM unless enabled below.
*/
//#define GCODE_MACROS
#if ENABLED(GCODE_MACROS)
#define GCODE_MACROS_SLOTS 5 // Up to 10 may be used
#define GCODE_MACROS_SLOT_SIZE 50 // Maximum length of a single macro
#if ENABLED(EEPROM_SETTINGS)
//#define GCODE_MACROS_IN_EEPROM // Include macros in EEPROM
#endif
#endif
/**
@@ -4045,22 +4203,27 @@
#define MAIN_MENU_ITEM_1_DESC "Home & UBL Info"
#define MAIN_MENU_ITEM_1_GCODE "G28\nG29 W"
//#define MAIN_MENU_ITEM_1_CONFIRM // Show a confirmation dialog before this action
//#define MAIN_MENU_ITEM_1_IMMEDIATE // Skip the queue and execute immediately. Rarely needed.
#define MAIN_MENU_ITEM_2_DESC "Preheat for " PREHEAT_1_LABEL
#define MAIN_MENU_ITEM_2_GCODE "M140 S" STRINGIFY(PREHEAT_1_TEMP_BED) "\nM104 S" STRINGIFY(PREHEAT_1_TEMP_HOTEND)
//#define MAIN_MENU_ITEM_2_CONFIRM
//#define MAIN_MENU_ITEM_2_IMMEDIATE
//#define MAIN_MENU_ITEM_3_DESC "Preheat for " PREHEAT_2_LABEL
//#define MAIN_MENU_ITEM_3_GCODE "M140 S" STRINGIFY(PREHEAT_2_TEMP_BED) "\nM104 S" STRINGIFY(PREHEAT_2_TEMP_HOTEND)
//#define MAIN_MENU_ITEM_3_CONFIRM
//#define MAIN_MENU_ITEM_3_IMMEDIATE
//#define MAIN_MENU_ITEM_4_DESC "Heat Bed/Home/Level"
//#define MAIN_MENU_ITEM_4_GCODE "M140 S" STRINGIFY(PREHEAT_2_TEMP_BED) "\nG28\nG29"
//#define MAIN_MENU_ITEM_4_CONFIRM
//#define MAIN_MENU_ITEM_4_IMMEDIATE
//#define MAIN_MENU_ITEM_5_DESC "Home & Info"
//#define MAIN_MENU_ITEM_5_GCODE "G28\nM503"
//#define MAIN_MENU_ITEM_5_CONFIRM
//#define MAIN_MENU_ITEM_5_IMMEDIATE
#endif
// @section custom config menu
@@ -4077,22 +4240,27 @@
#define CONFIG_MENU_ITEM_1_DESC "Wifi ON"
#define CONFIG_MENU_ITEM_1_GCODE "M118 [ESP110] WIFI-STA pwd=12345678"
//#define CONFIG_MENU_ITEM_1_CONFIRM // Show a confirmation dialog before this action
//#define CONFIG_MENU_ITEM_1_IMMEDIATE // Skip the queue and execute immediately. Rarely needed.
#define CONFIG_MENU_ITEM_2_DESC "Bluetooth ON"
#define CONFIG_MENU_ITEM_2_GCODE "M118 [ESP110] BT pwd=12345678"
//#define CONFIG_MENU_ITEM_2_CONFIRM
//#define CONFIG_MENU_ITEM_2_IMMEDIATE
//#define CONFIG_MENU_ITEM_3_DESC "Radio OFF"
//#define CONFIG_MENU_ITEM_3_GCODE "M118 [ESP110] OFF pwd=12345678"
//#define CONFIG_MENU_ITEM_3_CONFIRM
//#define CONFIG_MENU_ITEM_3_IMMEDIATE
//#define CONFIG_MENU_ITEM_4_DESC "Wifi ????"
//#define CONFIG_MENU_ITEM_4_GCODE "M118 ????"
//#define CONFIG_MENU_ITEM_4_CONFIRM
//#define CONFIG_MENU_ITEM_4_IMMEDIATE
//#define CONFIG_MENU_ITEM_5_DESC "Wifi ????"
//#define CONFIG_MENU_ITEM_5_GCODE "M118 ????"
//#define CONFIG_MENU_ITEM_5_CONFIRM
//#define CONFIG_MENU_ITEM_5_IMMEDIATE
#endif
// @section custom buttons
@@ -4109,6 +4277,7 @@
#define BUTTON1_WHEN_PRINTING false // Button allowed to trigger during printing?
#define BUTTON1_GCODE "G28"
#define BUTTON1_DESC "Homing" // Optional string to set the LCD status
//#define BUTTON1_IMMEDIATE // Skip the queue and execute immediately. Rarely needed.
#endif
//#define BUTTON2_PIN -1
@@ -4117,6 +4286,7 @@
#define BUTTON2_WHEN_PRINTING false
#define BUTTON2_GCODE "M140 S" STRINGIFY(PREHEAT_1_TEMP_BED) "\nM104 S" STRINGIFY(PREHEAT_1_TEMP_HOTEND)
#define BUTTON2_DESC "Preheat for " PREHEAT_1_LABEL
//#define BUTTON2_IMMEDIATE
#endif
//#define BUTTON3_PIN -1
@@ -4125,6 +4295,7 @@
#define BUTTON3_WHEN_PRINTING false
#define BUTTON3_GCODE "M140 S" STRINGIFY(PREHEAT_2_TEMP_BED) "\nM104 S" STRINGIFY(PREHEAT_2_TEMP_HOTEND)
#define BUTTON3_DESC "Preheat for " PREHEAT_2_LABEL
//#define BUTTON3_IMMEDIATE
#endif
#endif
@@ -4172,7 +4343,7 @@
* Developed by Chris Barr at Aus3D.
*
* Wiki: https://wiki.aus3d.com.au/Magnetic_Encoder
* Github: https://github.com/Aus3D/MagneticEncoder
* GitHub: https://github.com/Aus3D/MagneticEncoder
*
* Supplier: https://aus3d.com.au/products/magnetic-encoder-module
* Alternative Supplier: https://reliabuild3d.com/
@@ -4197,7 +4368,7 @@
//#define I2CPE_ENC_1_TICKS_REV (16 * 200) // Only needed for rotary encoders; number of stepper
// steps per full revolution (motor steps/rev * microstepping)
//#define I2CPE_ENC_1_INVERT // Invert the direction of axis travel.
#define I2CPE_ENC_1_EC_METHOD I2CPE_ECM_MICROSTEP // Type of error error correction.
#define I2CPE_ENC_1_EC_METHOD I2CPE_ECM_MICROSTEP // Type of error correction.
#define I2CPE_ENC_1_EC_THRESH 0.10 // Threshold size for error (in mm) above which the
// printer will attempt to correct the error; errors
// smaller than this are ignored to minimize effects of
@@ -4291,15 +4462,38 @@
#endif
/**
* Instant freeze / unfreeze functionality
* Potentially useful for rapid stop that allows being resumed. Halts stepper movement.
* Note this does NOT pause spindles, lasers, fans, heaters or any other auxiliary device.
* @section interface
* Freeze / Unfreeze
*
* Pause / Hold that keeps power available and does not stop the spindle can be initiated by
* the FREEZE_PIN. Halts instantly (default) or performs a soft feed hold that decelerates and
* halts movement at FREEZE_JERK (requires SOFT_FEED_HOLD).
* Motion can be resumed by using the FREEZE_PIN.
*
* NOTE: Controls Laser PWM but does NOT pause Spindle, Fans, Heaters or other devices.
* @section freeze
*/
//#define FREEZE_FEATURE
#if ENABLED(FREEZE_FEATURE)
//#define FREEZE_PIN 41 // Override the default (KILL) pin here
#define FREEZE_STATE LOW // State of pin indicating freeze
//#define FREEZE_PIN -1 // Override the default (KILL) pin here
#define FREEZE_STATE LOW // State of pin indicating freeze
#endif
#if ANY(FREEZE_FEATURE, REALTIME_REPORTING_COMMANDS)
/**
* Command P000 (REALTIME_REPORTING_COMMANDS and EMERGENCY_PARSER) or
* FREEZE_PIN (FREEZE_FEATURE) initiates a soft feed hold that keeps
* power available and does not stop the spindle.
*
* The soft feed hold decelerates and halts movement at FREEZE_JERK.
* Motion can be resumed with command R000 (requires REALTIME_REPORTING_COMMANDS) or
* by using the FREEZE_PIN (requires FREEZE_FEATURE).
*
* NOTE: Affects Laser PWM but DOES NOT pause Spindle, Fans, Heaters or other devices.
*/
//#define SOFT_FEED_HOLD
#if ENABLED(SOFT_FEED_HOLD)
#define FREEZE_JERK 2 // (mm/s) Completely halt when motion has decelerated below this value
#endif
#endif
/**
@@ -4629,6 +4823,11 @@
//
//#define PINS_DEBUGGING
//
// M265 - I2C Scanner
//
//#define I2C_SCANNER
// Enable Tests that will run at startup and produce a report
//#define MARLIN_TEST_BUILD

View File

@@ -127,9 +127,9 @@ NEOPIXEL ?= 0
# on GCC versions:
# https://www.avrfreaks.net/comment/1789106#comment-1789106
CC_MAJ:=$(shell $(CC) -dM -E - < /dev/null | grep __GNUC__ | cut -f3 -d\ )
CC_MIN:=$(shell $(CC) -dM -E - < /dev/null | grep __GNUC_MINOR__ | cut -f3 -d\ )
CC_PATCHLEVEL:=$(shell $(CC) -dM -E - < /dev/null | grep __GNUC_PATCHLEVEL__ | cut -f3 -d\ )
CC_MAJ:=$(shell $(CC) -dM -E - < /dev/null | grep __GNUC__ | cut -f3 -d' ' )
CC_MIN:=$(shell $(CC) -dM -E - < /dev/null | grep __GNUC_MINOR__ | cut -f3 -d' ' )
CC_PATCHLEVEL:=$(shell $(CC) -dM -E - < /dev/null | grep __GNUC_PATCHLEVEL__ | cut -f3 -d' ' )
CC_VER:=$(shell echo $$(( $(CC_MAJ) * 10000 + $(CC_MIN) * 100 + $(CC_PATCHLEVEL) )))
ifeq ($(shell test $(CC_VER) -lt 40901 && echo 1),1)
$(warning This GCC version $(CC_VER) is likely broken. Enabling relocation workaround.)
@@ -188,15 +188,15 @@ else ifeq ($(HARDWARE_MOTHERBOARD),1033)
else ifeq ($(HARDWARE_MOTHERBOARD),1034)
# RAMPS 1.6+ (Power outputs: Hotend, Fan, Bed)
else ifeq ($(HARDWARE_MOTHERBOARD),1035)
else ifeq ($(HARDWARE_MOTHERBOARD),1040)
# RAMPS 1.6+ (Power outputs: Hotend0, Hotend1, Bed)
else ifeq ($(HARDWARE_MOTHERBOARD),1036)
else ifeq ($(HARDWARE_MOTHERBOARD),1041)
# RAMPS 1.6+ (Power outputs: Hotend, Fan0, Fan1)
else ifeq ($(HARDWARE_MOTHERBOARD),1037)
else ifeq ($(HARDWARE_MOTHERBOARD),1042)
# RAMPS 1.6+ (Power outputs: Hotend0, Hotend1, Fan)
else ifeq ($(HARDWARE_MOTHERBOARD),1038)
else ifeq ($(HARDWARE_MOTHERBOARD),1043)
# RAMPS 1.6+ (Power outputs: Spindle, Controller Fan)
else ifeq ($(HARDWARE_MOTHERBOARD),1039)
else ifeq ($(HARDWARE_MOTHERBOARD),1044)
#
# RAMPS Derivatives - ATmega1280, ATmega2560
@@ -286,59 +286,62 @@ else ifeq ($(HARDWARE_MOTHERBOARD),1138)
else ifeq ($(HARDWARE_MOTHERBOARD),1139)
# Creality: CR10S, CR20, CR-X
else ifeq ($(HARDWARE_MOTHERBOARD),1140)
# Dagoma F5
# Creality CR-10 V2, CR-10 V3
else ifeq ($(HARDWARE_MOTHERBOARD),1141)
# Dagoma D6 (as found in the Dagoma DiscoUltimate V2 TMC)
# Dagoma F5
else ifeq ($(HARDWARE_MOTHERBOARD),1142)
# FYSETC F6 1.3
# Dagoma D6 (as found in the Dagoma DiscoUltimate V2 TMC)
else ifeq ($(HARDWARE_MOTHERBOARD),1143)
# FYSETC F6 1.4
# FYSETC F6 1.3
else ifeq ($(HARDWARE_MOTHERBOARD),1144)
# Wanhao Duplicator i3 Plus
# FYSETC F6 1.4
else ifeq ($(HARDWARE_MOTHERBOARD),1145)
# VORON Design
# Wanhao Duplicator i3 Plus
else ifeq ($(HARDWARE_MOTHERBOARD),1146)
# Tronxy TRONXY-V3-1.0
# VORON Design
else ifeq ($(HARDWARE_MOTHERBOARD),1147)
# Z-Bolt X Series
# Tronxy TRONXY-V3-1.0
else ifeq ($(HARDWARE_MOTHERBOARD),1148)
# TT OSCAR
# Z-Bolt X Series
else ifeq ($(HARDWARE_MOTHERBOARD),1149)
# BIQU Tango V1
# TT OSCAR
else ifeq ($(HARDWARE_MOTHERBOARD),1150)
# MKS GEN L V2
# BIQU Tango V1
else ifeq ($(HARDWARE_MOTHERBOARD),1151)
# MKS GEN L V2.1
# MKS GEN L V2
else ifeq ($(HARDWARE_MOTHERBOARD),1152)
# Copymaster 3D
# MKS GEN L V2.1
else ifeq ($(HARDWARE_MOTHERBOARD),1153)
# Ortur 4
# Copymaster 3D
else ifeq ($(HARDWARE_MOTHERBOARD),1154)
# Tenlog D3 Hero IDEX printer
# Ortur 4
else ifeq ($(HARDWARE_MOTHERBOARD),1155)
# Tenlog D3, D5, D6 IDEX Printer
# Tenlog D3 Hero IDEX printer
else ifeq ($(HARDWARE_MOTHERBOARD),1156)
# Ramps S 1.2 by Sakul.cz (Power outputs: Hotend0, Hotend1, Fan, Bed)
# Tenlog D3, D5, D6 IDEX Printer
else ifeq ($(HARDWARE_MOTHERBOARD),1157)
# Ramps S 1.2 by Sakul.cz (Power outputs: Hotend0, Hotend1, Hotend2, Bed)
# Ramps S 1.2 by Sakul.cz (Power outputs: Hotend0, Hotend1, Fan, Bed)
else ifeq ($(HARDWARE_MOTHERBOARD),1158)
# Ramps S 1.2 by Sakul.cz (Power outputs: Hotend, Fan0, Fan1, Bed)
# Ramps S 1.2 by Sakul.cz (Power outputs: Hotend0, Hotend1, Hotend2, Bed)
else ifeq ($(HARDWARE_MOTHERBOARD),1159)
# Longer LK1 PRO / Alfawise U20 Pro (PRO version)
# Ramps S 1.2 by Sakul.cz (Power outputs: Hotend, Fan0, Fan1, Bed)
else ifeq ($(HARDWARE_MOTHERBOARD),1160)
# Longer LKx PRO / Alfawise Uxx Pro (PRO version)
# Longer LK1 PRO / Alfawise U20 Pro (PRO version)
else ifeq ($(HARDWARE_MOTHERBOARD),1161)
# Pxmalion Core I3
# Longer LKx PRO / Alfawise Uxx Pro (PRO version)
else ifeq ($(HARDWARE_MOTHERBOARD),1162)
# Panowin Cutlass (as found in the Panowin F1)
# Pxmalion Core I3
else ifeq ($(HARDWARE_MOTHERBOARD),1163)
# Kodama Bardo V1.x (as found in the Kodama Trinus)
# Panowin Cutlass (as found in the Panowin F1)
else ifeq ($(HARDWARE_MOTHERBOARD),1164)
# XTLW MFF V1.0
# Kodama Bardo V1.x (as found in the Kodama Trinus)
else ifeq ($(HARDWARE_MOTHERBOARD),1165)
# XTLW MFF V2.0
# XTLW MFF V1.0
else ifeq ($(HARDWARE_MOTHERBOARD),1166)
# XTLW MFF V2.0
else ifeq ($(HARDWARE_MOTHERBOARD),1167)
# E3D Rumba BigBox
else ifeq ($(HARDWARE_MOTHERBOARD),1168)
#
# RAMBo and derivatives
@@ -407,32 +410,34 @@ else ifeq ($(HARDWARE_MOTHERBOARD),1319)
else ifeq ($(HARDWARE_MOTHERBOARD),1320)
# Geeetech GT2560 Rev B for A20(M/T/D)
else ifeq ($(HARDWARE_MOTHERBOARD),1321)
# Einstart retrofit
else ifeq ($(HARDWARE_MOTHERBOARD),1322)
# Wanhao 0ne+ i3 Mini
else ifeq ($(HARDWARE_MOTHERBOARD),1323)
# Overlord/Overlord Pro
else ifeq ($(HARDWARE_MOTHERBOARD),1324)
# ADIMLab Gantry v1
else ifeq ($(HARDWARE_MOTHERBOARD),1325)
# ADIMLab Gantry v2
else ifeq ($(HARDWARE_MOTHERBOARD),1326)
# Leapfrog Xeed 2015
else ifeq ($(HARDWARE_MOTHERBOARD),1327)
# PICA Shield (original version)
else ifeq ($(HARDWARE_MOTHERBOARD),1328)
# PICA Shield (rev C or later)
else ifeq ($(HARDWARE_MOTHERBOARD),1329)
# Intamsys 4.0 (Funmat HT)
else ifeq ($(HARDWARE_MOTHERBOARD),1330)
# Malyan M180 Mainboard Version 2 (no display function, direct G-code only)
else ifeq ($(HARDWARE_MOTHERBOARD),1331)
# Mega controller & Protoneer CNC Shield V3.00
else ifeq ($(HARDWARE_MOTHERBOARD),1332)
# WEEDO 62A board (TINA2, Monoprice Cadet, etc.)
else ifeq ($(HARDWARE_MOTHERBOARD),1333)
# Geeetech GT2560 V4.1B for A10(M/T/D)
else ifeq ($(HARDWARE_MOTHERBOARD),1322)
# Einstart retrofit
else ifeq ($(HARDWARE_MOTHERBOARD),1323)
# Wanhao 0ne+ i3 Mini
else ifeq ($(HARDWARE_MOTHERBOARD),1324)
# Wanhao D9 MK2
else ifeq ($(HARDWARE_MOTHERBOARD),1325)
# Overlord/Overlord Pro
else ifeq ($(HARDWARE_MOTHERBOARD),1326)
# ADIMLab Gantry v1
else ifeq ($(HARDWARE_MOTHERBOARD),1327)
# ADIMLab Gantry v2
else ifeq ($(HARDWARE_MOTHERBOARD),1328)
# Leapfrog Xeed 2015
else ifeq ($(HARDWARE_MOTHERBOARD),1329)
# PICA Shield (original version)
else ifeq ($(HARDWARE_MOTHERBOARD),1330)
# PICA Shield (rev C or later)
else ifeq ($(HARDWARE_MOTHERBOARD),1331)
# Intamsys 4.0 (Funmat HT)
else ifeq ($(HARDWARE_MOTHERBOARD),1332)
# Malyan M180 Mainboard Version 2
else ifeq ($(HARDWARE_MOTHERBOARD),1333)
# Mega controller & Protoneer CNC Shield V3.00
else ifeq ($(HARDWARE_MOTHERBOARD),1334)
# WEEDO 62A board (TINA2, Monoprice Cadet, etc.)
else ifeq ($(HARDWARE_MOTHERBOARD),1335)
#
# ATmega1281, ATmega2561
@@ -512,7 +517,7 @@ else ifeq ($(HARDWARE_MOTHERBOARD),1511)
MCU ?= atmega1284p
PROG_MCU ?= m1284p
# ZoneStar ZMIB V2
else ifeq ($(HARDWARE_MOTHERBOARD),1511)
else ifeq ($(HARDWARE_MOTHERBOARD),1512)
HARDWARE_VARIANT ?= Sanguino
MCU ?= atmega1284p
PROG_MCU ?= m1284p
@@ -626,6 +631,10 @@ else ifeq ($(HARDWARE_MOTHERBOARD),1707)
MCU ?= at90usb1286
PROG_MCU ?= usb1286
#
# SAM3X8E ARM Cortex-M3
#
# UltiMachine Archim1 (with DRV8825 drivers)
else ifeq ($(HARDWARE_MOTHERBOARD),3023)
HARDWARE_VARIANT ?= archim
@@ -798,10 +807,10 @@ endif
ifeq ($(TMC), 1)
LIB_CXXSRC += TMCStepper.cpp COOLCONF.cpp DRV_STATUS.cpp IHOLD_IRUN.cpp \
CHOPCONF.cpp GCONF.cpp PWMCONF.cpp DRV_CONF.cpp DRVCONF.cpp DRVCTRL.cpp \
DRVSTATUS.cpp ENCMODE.cpp RAMP_STAT.cpp SGCSCONF.cpp SHORT_CONF.cpp \
SMARTEN.cpp SW_MODE.cpp SW_SPI.cpp TMC2130Stepper.cpp TMC2208Stepper.cpp \
TMC2209Stepper.cpp TMC2660Stepper.cpp TMC5130Stepper.cpp TMC5160Stepper.cpp
CHOPCONF.cpp GCONF.cpp PWMCONF.cpp DRV_CONF.cpp DRVCONF.cpp DRVCTRL.cpp DRVSTATUS.cpp \
GLOBAL_SCALER.cpp SLAVECONF.cpp IOIN.cpp ENCMODE.cpp RAMP_STAT.cpp SGCSCONF.cpp \
SHORT_CONF.cpp SMARTEN.cpp SW_MODE.cpp SW_SPI.cpp TMC2130Stepper.cpp TMC2208Stepper.cpp \
TMC2209Stepper.cpp TMC2240Stepper.cpp TMC2660Stepper.cpp TMC5130Stepper.cpp TMC5160Stepper.cpp
endif
ifeq ($(RELOC_WORKAROUND), 1)
@@ -868,8 +877,8 @@ else ifeq ($(HARDWARE_VARIANT), archim)
endif
# Add all the source directories as include directories too
CINCS = ${addprefix -I ,${VPATH}}
CXXINCS = ${addprefix -I ,${VPATH}}
CINCS = ${addprefix -I, ${VPATH}}
CXXINCS = ${addprefix -I, ${VPATH}}
# Silence warnings for library code (won't work for .h files, unfortunately)
LIBWARN = -w -Wno-packed-bitfield-compat

View File

@@ -41,7 +41,7 @@
* here we define this default string as the date where the latest release
* version was tagged.
*/
//#define STRING_DISTRIBUTION_DATE "2025-01-16"
//#define STRING_DISTRIBUTION_DATE "2026-02-20"
/**
* The protocol for communication to the host. Protocol indicates communication
@@ -58,7 +58,7 @@
/**
* The SOURCE_CODE_URL is the location where users will find the Marlin Source
* Code which is installed on the device. In most cases —unless the manufacturer
* has a distinct Github fork— the Source Code URL should just be the main
* has a distinct GitHub fork— the Source Code URL should just be the main
* Marlin repository.
*/
//#define SOURCE_CODE_URL "github.com/MarlinFirmware/Marlin"

View File

@@ -86,13 +86,14 @@ heater_0_maxtemp = 275
pidtemp = on
pid_k1 = 0.95
pid_max = 255
pid_functional_range = 10
pid_functional_range = 20
default_kp = 22.20
default_ki = 1.08
default_kd = 114.00
temp_sensor_bed = 1
bed_check_interval = 5000
bed_mintemp = 5
bed_maxtemp = 150
@@ -163,18 +164,28 @@ min_steps_per_segment = 6
default_minsegmenttime = 20000
[config:basic]
hotend_overshoot = 15
bed_overshoot = 10
max_bed_power = 255
busy_while_heating = on
host_keepalive_feature = on
default_keepalive_interval = 2
printjob_timer_autostart = on
jd_handle_small_segments = on
validate_homing_endstops = on
editable_steps_per_unit = on
eeprom_boot_silent = on
eeprom_chitchat = on
endstoppullups = on
extrude_maxlength = 200
prevent_cold_extrusion = on
extrude_mintemp = 170
host_keepalive_feature = on
hotend_overshoot = 15
jd_handle_small_segments = on
max_bed_power = 255
prevent_lengthy_extrude = on
extrude_maxlength = 200
min_software_endstops = on
max_software_endstops = on
@@ -195,21 +206,19 @@ preheat_2_temp_hotend = 240
preheat_2_temp_bed = 110
preheat_2_fan_speed = 0
prevent_cold_extrusion = on
prevent_lengthy_extrude = on
printjob_timer_autostart = on
temp_bed_hysteresis = 3
temp_bed_residency_time = 10
temp_bed_window = 1
temp_residency_time = 10
temp_window = 1
validate_homing_endstops = on
editable_steps_per_unit = on
[config:advanced]
arc_support = on
min_arc_segment_mm = 0.1
max_arc_segment_mm = 1.0
min_circle_segments = 72
n_arc_correction = 25
auto_report_temperatures = on
autotemp = on
@@ -223,22 +232,23 @@ disable_idle_x = on
disable_idle_y = on
disable_idle_z = on
disable_idle_e = on
e0_auto_fan_pin = -1
faster_gcode_parser = on
debug_flags_gcode = on
homing_bump_mm = { 5, 5, 2 }
max_arc_segment_mm = 1.0
min_arc_segment_mm = 0.1
min_circle_segments = 72
n_arc_correction = 25
serial_overrun_protection = on
slowdown = on
slowdown_divisor = 2
tx_buffer_size = 0
multistepping_limit = 16
bed_check_interval = 5000
watch_bed_temp_increase = 2
watch_bed_temp_period = 60
serial_overrun_protection = on
tx_buffer_size = 0
watch_temp_increase = 2
watch_temp_period = 40
watch_bed_temp_increase = 2
watch_bed_temp_period = 60

View File

@@ -96,7 +96,7 @@ void MarlinHAL::init() {
// Might disable other peripherals using the pin; to circumvent that please undefine one of the above things!
// The true culprit is the AVR ArduinoCore that enables peripherals redundantly.
// (USART1 on the GeeeTech GT2560)
// https://www.youtube.com/watch?v=jMgCvRXkexk
// https://youtube.be/jMgCvRXkexk
_ATmega_savePinAlternate(BEEPER_PIN);
OUT_WRITE(BEEPER_PIN, LOW);
@@ -119,7 +119,6 @@ void MarlinHAL::reboot() {
#if ENABLED(USE_WATCHDOG)
#include <avr/wdt.h>
#include "../../MarlinCore.h"
// Initialize watchdog with 8s timeout, if possible. Otherwise, make it 4s.
void MarlinHAL::watchdog_init() {
@@ -154,7 +153,7 @@ void MarlinHAL::reboot() {
ISR(WDT_vect) {
sei(); // With the interrupt driven serial we need to allow interrupts.
SERIAL_ERROR_MSG(STR_WATCHDOG_FIRED);
minkill(); // interrupt-safe final kill and infinite loop
marlin.minkill(); // interrupt-safe final kill and infinite loop
}
#endif

View File

@@ -204,9 +204,9 @@ public:
static void isr_on() { sei(); }
static void isr_off() { cli(); }
static void delay_ms(const int ms) { _delay_ms(ms); }
static void delay_ms(const int ms) { delay(ms); }
// Tasks, called from idle()
// Tasks, called from marlin.idle()
static void idletask() {}
// Reset

View File

@@ -41,7 +41,6 @@
#if !defined(USBCON) && (defined(UBRRH) || defined(UBRR0H) || defined(UBRR1H) || defined(UBRR2H) || defined(UBRR3H))
#include "MarlinSerial.h"
#include "../../MarlinCore.h"
#if ENABLED(DIRECT_STEPPING)
#include "../../feature/direct_stepping.h"

View File

@@ -241,7 +241,7 @@ uint8_t extDigitalRead(const int8_t pin) {
*
* DC values -1.0 to 1.0. Negative duty cycle inverts the pulse.
*/
uint16_t set_pwm_frequency_hz(const_float_t hz, const float dca, const float dcb, const float dcc) {
uint16_t set_pwm_frequency_hz(const float hz, const float dca, const float dcb, const float dcc) {
float count = 0;
if (hz > 0 && (dca || dcb || dcc)) {
count = float(F_CPU) / hz; // 1x prescaler, TOP for 16MHz base freq.
@@ -254,7 +254,7 @@ uint16_t set_pwm_frequency_hz(const_float_t hz, const float dca, const float dcb
else { prescaler = 1; SET_CS(5, PRESCALER_1); }
count /= float(prescaler);
const float pwm_top = round(count); // Get the rounded count
const float pwm_top = roundf(count); // Get the rounded count
ICR5 = (uint16_t)pwm_top - 1; // Subtract 1 for TOP
OCR5A = pwm_top * ABS(dca); // Update and scale DCs
@@ -280,7 +280,7 @@ uint16_t set_pwm_frequency_hz(const_float_t hz, const float dca, const float dcb
SET_CS(5, PRESCALER_64); // 16MHz / 64 = 250kHz
OCR5A = OCR5B = OCR5C = 0;
}
return round(count);
return roundf(count);
}
#endif

View File

@@ -363,8 +363,11 @@
#define AIO7_PWM 0
#define AIO7_DDR DDRF
//-- Begin not supported by Teensyduino
//-- don't use Arduino functions on these pins pinMode/digitalWrite/etc
//-- 46-47 are not supported by Teensyduino
//-- Don't use Arduino functions (pinMode, digitalWrite, etc.) on these pins
#define PIN_E2 46
#define PIN_E3 47
#define DIO46_PIN PINE2
#define DIO46_RPORT PINE
#define DIO46_WPORT PORTE
@@ -377,10 +380,7 @@
#define DIO47_PWM 0
#define DIO47_DDR DDRE
#define TEENSY_E2 46
#define TEENSY_E3 47
//-- end not supported by Teensyduino
//--
#undef PA0
#define PA0_PIN PINA0

View File

@@ -95,7 +95,7 @@
/**
* The Trinamic library includes SoftwareSerial.h, leading to a compile error.
*/
#if ALL(HAS_TRINAMIC_CONFIG, ENDSTOP_INTERRUPTS_FEATURE)
#if ALL(HAS_TMC_SW_SERIAL, ENDSTOP_INTERRUPTS_FEATURE)
#error "TMCStepper includes SoftwareSerial.h which is incompatible with ENDSTOP_INTERRUPTS_FEATURE. Disable ENDSTOP_INTERRUPTS_FEATURE to continue."
#endif

View File

@@ -377,16 +377,16 @@ void printPinPort(const pin_t pin) { // print port number
uint8_t x;
SERIAL_ECHOPGM(" Port: ");
#if AVR_AT90USB1286_FAMILY
x = (pin == 46 || pin == 47) ? 'E' : digitalPinToPort_DEBUG(pin) + 64;
x = (pin == PIN_E2 || pin == PIN_E3) ? 'E' : 'A' + digitalPinToPort_DEBUG(pin) - 1;
#else
x = digitalPinToPort_DEBUG(pin) + 64;
x = 'A' + digitalPinToPort_DEBUG(pin) - 1;
#endif
SERIAL_CHAR(x);
#if AVR_AT90USB1286_FAMILY
if (pin == 46)
if (pin == PIN_E2)
x = '2';
else if (pin == 47)
else if (pin == PIN_E3)
x = '3';
else {
uint8_t temp = digitalPinToBitMask_DEBUG(pin);

View File

@@ -48,92 +48,92 @@
const uint8_t PROGMEM digital_pin_to_port_PGM_plus_70[] = {
// PORTLIST
// ------------------------
PE , // PE 0 ** 0 ** USART0_RX
PE , // PE 1 ** 1 ** USART0_TX
PE , // PE 4 ** 2 ** PWM2
PE , // PE 5 ** 3 ** PWM3
PG , // PG 5 ** 4 ** PWM4
PE , // PE 3 ** 5 ** PWM5
PH , // PH 3 ** 6 ** PWM6
PH , // PH 4 ** 7 ** PWM7
PH , // PH 5 ** 8 ** PWM8
PH , // PH 6 ** 9 ** PWM9
PB , // PB 4 ** 10 ** PWM10
PB , // PB 5 ** 11 ** PWM11
PB , // PB 6 ** 12 ** PWM12
PB , // PB 7 ** 13 ** PWM13
PJ , // PJ 1 ** 14 ** USART3_TX
PJ , // PJ 0 ** 15 ** USART3_RX
PH , // PH 1 ** 16 ** USART2_TX
PH , // PH 0 ** 17 ** USART2_RX
PD , // PD 3 ** 18 ** USART1_TX
PD , // PD 2 ** 19 ** USART1_RX
PD , // PD 1 ** 20 ** I2C_SDA
PD , // PD 0 ** 21 ** I2C_SCL
PA , // PA 0 ** 22 ** D22
PA , // PA 1 ** 23 ** D23
PA , // PA 2 ** 24 ** D24
PA , // PA 3 ** 25 ** D25
PA , // PA 4 ** 26 ** D26
PA , // PA 5 ** 27 ** D27
PA , // PA 6 ** 28 ** D28
PA , // PA 7 ** 29 ** D29
PC , // PC 7 ** 30 ** D30
PC , // PC 6 ** 31 ** D31
PC , // PC 5 ** 32 ** D32
PC , // PC 4 ** 33 ** D33
PC , // PC 3 ** 34 ** D34
PC , // PC 2 ** 35 ** D35
PC , // PC 1 ** 36 ** D36
PC , // PC 0 ** 37 ** D37
PD , // PD 7 ** 38 ** D38
PG , // PG 2 ** 39 ** D39
PG , // PG 1 ** 40 ** D40
PG , // PG 0 ** 41 ** D41
PL , // PL 7 ** 42 ** D42
PL , // PL 6 ** 43 ** D43
PL , // PL 5 ** 44 ** D44
PL , // PL 4 ** 45 ** D45
PL , // PL 3 ** 46 ** D46
PL , // PL 2 ** 47 ** D47
PL , // PL 1 ** 48 ** D48
PL , // PL 0 ** 49 ** D49
PB , // PB 3 ** 50 ** SPI_MISO
PB , // PB 2 ** 51 ** SPI_MOSI
PB , // PB 1 ** 52 ** SPI_SCK
PB , // PB 0 ** 53 ** SPI_SS
PF , // PF 0 ** 54 ** A0
PF , // PF 1 ** 55 ** A1
PF , // PF 2 ** 56 ** A2
PF , // PF 3 ** 57 ** A3
PF , // PF 4 ** 58 ** A4
PF , // PF 5 ** 59 ** A5
PF , // PF 6 ** 60 ** A6
PF , // PF 7 ** 61 ** A7
PK , // PK 0 ** 62 ** A8
PK , // PK 1 ** 63 ** A9
PK , // PK 2 ** 64 ** A10
PK , // PK 3 ** 65 ** A11
PK , // PK 4 ** 66 ** A12
PK , // PK 5 ** 67 ** A13
PK , // PK 6 ** 68 ** A14
PK , // PK 7 ** 69 ** A15
PG , // PG 4 ** 70 **
PG , // PG 3 ** 71 **
PJ , // PJ 2 ** 72 **
PJ , // PJ 3 ** 73 **
PJ , // PJ 7 ** 74 **
PJ , // PJ 4 ** 75 **
PJ , // PJ 5 ** 76 **
PJ , // PJ 6 ** 77 **
PE , // PE 2 ** 78 **
PE , // PE 6 ** 79 **
PE , // PE 7 ** 80 **
PD , // PD 4 ** 81 **
PD , // PD 5 ** 82 **
PD , // PD 6 ** 83 **
PH , // PH 2 ** 84 **
PH , // PH 7 ** 85 **
PE, // PE 0 ** 0 ** USART0_RX
PE, // PE 1 ** 1 ** USART0_TX
PE, // PE 4 ** 2 ** PWM2
PE, // PE 5 ** 3 ** PWM3
PG, // PG 5 ** 4 ** PWM4
PE, // PE 3 ** 5 ** PWM5
PH, // PH 3 ** 6 ** PWM6
PH, // PH 4 ** 7 ** PWM7
PH, // PH 5 ** 8 ** PWM8
PH, // PH 6 ** 9 ** PWM9
PB, // PB 4 ** 10 ** PWM10
PB, // PB 5 ** 11 ** PWM11
PB, // PB 6 ** 12 ** PWM12
PB, // PB 7 ** 13 ** PWM13
PJ, // PJ 1 ** 14 ** USART3_TX
PJ, // PJ 0 ** 15 ** USART3_RX
PH, // PH 1 ** 16 ** USART2_TX
PH, // PH 0 ** 17 ** USART2_RX
PD, // PD 3 ** 18 ** USART1_TX
PD, // PD 2 ** 19 ** USART1_RX
PD, // PD 1 ** 20 ** I2C_SDA
PD, // PD 0 ** 21 ** I2C_SCL
PA, // PA 0 ** 22 ** D22
PA, // PA 1 ** 23 ** D23
PA, // PA 2 ** 24 ** D24
PA, // PA 3 ** 25 ** D25
PA, // PA 4 ** 26 ** D26
PA, // PA 5 ** 27 ** D27
PA, // PA 6 ** 28 ** D28
PA, // PA 7 ** 29 ** D29
PC, // PC 7 ** 30 ** D30
PC, // PC 6 ** 31 ** D31
PC, // PC 5 ** 32 ** D32
PC, // PC 4 ** 33 ** D33
PC, // PC 3 ** 34 ** D34
PC, // PC 2 ** 35 ** D35
PC, // PC 1 ** 36 ** D36
PC, // PC 0 ** 37 ** D37
PD, // PD 7 ** 38 ** D38
PG, // PG 2 ** 39 ** D39
PG, // PG 1 ** 40 ** D40
PG, // PG 0 ** 41 ** D41
PL, // PL 7 ** 42 ** D42
PL, // PL 6 ** 43 ** D43
PL, // PL 5 ** 44 ** D44
PL, // PL 4 ** 45 ** D45
PL, // PL 3 ** 46 ** D46
PL, // PL 2 ** 47 ** D47
PL, // PL 1 ** 48 ** D48
PL, // PL 0 ** 49 ** D49
PB, // PB 3 ** 50 ** SPI_MISO
PB, // PB 2 ** 51 ** SPI_MOSI
PB, // PB 1 ** 52 ** SPI_SCK
PB, // PB 0 ** 53 ** SPI_SS
PF, // PF 0 ** 54 ** A0
PF, // PF 1 ** 55 ** A1
PF, // PF 2 ** 56 ** A2
PF, // PF 3 ** 57 ** A3
PF, // PF 4 ** 58 ** A4
PF, // PF 5 ** 59 ** A5
PF, // PF 6 ** 60 ** A6
PF, // PF 7 ** 61 ** A7
PK, // PK 0 ** 62 ** A8
PK, // PK 1 ** 63 ** A9
PK, // PK 2 ** 64 ** A10
PK, // PK 3 ** 65 ** A11
PK, // PK 4 ** 66 ** A12
PK, // PK 5 ** 67 ** A13
PK, // PK 6 ** 68 ** A14
PK, // PK 7 ** 69 ** A15
PG, // PG 4 ** 70 **
PG, // PG 3 ** 71 **
PJ, // PJ 2 ** 72 **
PJ, // PJ 3 ** 73 **
PJ, // PJ 7 ** 74 **
PJ, // PJ 4 ** 75 **
PJ, // PJ 5 ** 76 **
PJ, // PJ 6 ** 77 **
PE, // PE 2 ** 78 **
PE, // PE 6 ** 79 **
PE, // PE 7 ** 80 **
PD, // PD 4 ** 81 **
PD, // PD 5 ** 82 **
PD, // PD 6 ** 83 **
PH, // PH 2 ** 84 **
PH, // PH 7 ** 85 **
};
#define digitalPinToPort_plus_70(P) ( pgm_read_byte( digital_pin_to_port_PGM_plus_70 + (P) ) )
@@ -141,92 +141,92 @@ const uint8_t PROGMEM digital_pin_to_port_PGM_plus_70[] = {
const uint8_t PROGMEM digital_pin_to_bit_mask_PGM_plus_70[] = {
// PIN IN PORT
// ------------------------
_BV( 0 ) , // PE 0 ** 0 ** USART0_RX
_BV( 1 ) , // PE 1 ** 1 ** USART0_TX
_BV( 4 ) , // PE 4 ** 2 ** PWM2
_BV( 5 ) , // PE 5 ** 3 ** PWM3
_BV( 5 ) , // PG 5 ** 4 ** PWM4
_BV( 3 ) , // PE 3 ** 5 ** PWM5
_BV( 3 ) , // PH 3 ** 6 ** PWM6
_BV( 4 ) , // PH 4 ** 7 ** PWM7
_BV( 5 ) , // PH 5 ** 8 ** PWM8
_BV( 6 ) , // PH 6 ** 9 ** PWM9
_BV( 4 ) , // PB 4 ** 10 ** PWM10
_BV( 5 ) , // PB 5 ** 11 ** PWM11
_BV( 6 ) , // PB 6 ** 12 ** PWM12
_BV( 7 ) , // PB 7 ** 13 ** PWM13
_BV( 1 ) , // PJ 1 ** 14 ** USART3_TX
_BV( 0 ) , // PJ 0 ** 15 ** USART3_RX
_BV( 1 ) , // PH 1 ** 16 ** USART2_TX
_BV( 0 ) , // PH 0 ** 17 ** USART2_RX
_BV( 3 ) , // PD 3 ** 18 ** USART1_TX
_BV( 2 ) , // PD 2 ** 19 ** USART1_RX
_BV( 1 ) , // PD 1 ** 20 ** I2C_SDA
_BV( 0 ) , // PD 0 ** 21 ** I2C_SCL
_BV( 0 ) , // PA 0 ** 22 ** D22
_BV( 1 ) , // PA 1 ** 23 ** D23
_BV( 2 ) , // PA 2 ** 24 ** D24
_BV( 3 ) , // PA 3 ** 25 ** D25
_BV( 4 ) , // PA 4 ** 26 ** D26
_BV( 5 ) , // PA 5 ** 27 ** D27
_BV( 6 ) , // PA 6 ** 28 ** D28
_BV( 7 ) , // PA 7 ** 29 ** D29
_BV( 7 ) , // PC 7 ** 30 ** D30
_BV( 6 ) , // PC 6 ** 31 ** D31
_BV( 5 ) , // PC 5 ** 32 ** D32
_BV( 4 ) , // PC 4 ** 33 ** D33
_BV( 3 ) , // PC 3 ** 34 ** D34
_BV( 2 ) , // PC 2 ** 35 ** D35
_BV( 1 ) , // PC 1 ** 36 ** D36
_BV( 0 ) , // PC 0 ** 37 ** D37
_BV( 7 ) , // PD 7 ** 38 ** D38
_BV( 2 ) , // PG 2 ** 39 ** D39
_BV( 1 ) , // PG 1 ** 40 ** D40
_BV( 0 ) , // PG 0 ** 41 ** D41
_BV( 7 ) , // PL 7 ** 42 ** D42
_BV( 6 ) , // PL 6 ** 43 ** D43
_BV( 5 ) , // PL 5 ** 44 ** D44
_BV( 4 ) , // PL 4 ** 45 ** D45
_BV( 3 ) , // PL 3 ** 46 ** D46
_BV( 2 ) , // PL 2 ** 47 ** D47
_BV( 1 ) , // PL 1 ** 48 ** D48
_BV( 0 ) , // PL 0 ** 49 ** D49
_BV( 3 ) , // PB 3 ** 50 ** SPI_MISO
_BV( 2 ) , // PB 2 ** 51 ** SPI_MOSI
_BV( 1 ) , // PB 1 ** 52 ** SPI_SCK
_BV( 0 ) , // PB 0 ** 53 ** SPI_SS
_BV( 0 ) , // PF 0 ** 54 ** A0
_BV( 1 ) , // PF 1 ** 55 ** A1
_BV( 2 ) , // PF 2 ** 56 ** A2
_BV( 3 ) , // PF 3 ** 57 ** A3
_BV( 4 ) , // PF 4 ** 58 ** A4
_BV( 5 ) , // PF 5 ** 59 ** A5
_BV( 6 ) , // PF 6 ** 60 ** A6
_BV( 7 ) , // PF 7 ** 61 ** A7
_BV( 0 ) , // PK 0 ** 62 ** A8
_BV( 1 ) , // PK 1 ** 63 ** A9
_BV( 2 ) , // PK 2 ** 64 ** A10
_BV( 3 ) , // PK 3 ** 65 ** A11
_BV( 4 ) , // PK 4 ** 66 ** A12
_BV( 5 ) , // PK 5 ** 67 ** A13
_BV( 6 ) , // PK 6 ** 68 ** A14
_BV( 7 ) , // PK 7 ** 69 ** A15
_BV( 4 ) , // PG 4 ** 70 **
_BV( 3 ) , // PG 3 ** 71 **
_BV( 2 ) , // PJ 2 ** 72 **
_BV( 3 ) , // PJ 3 ** 73 **
_BV( 7 ) , // PJ 7 ** 74 **
_BV( 4 ) , // PJ 4 ** 75 **
_BV( 5 ) , // PJ 5 ** 76 **
_BV( 6 ) , // PJ 6 ** 77 **
_BV( 2 ) , // PE 2 ** 78 **
_BV( 6 ) , // PE 6 ** 79 **
_BV( 7 ) , // PE 7 ** 80 **
_BV( 4 ) , // PD 4 ** 81 **
_BV( 5 ) , // PD 5 ** 82 **
_BV( 6 ) , // PD 6 ** 83 **
_BV( 2 ) , // PH 2 ** 84 **
_BV( 7 ) , // PH 7 ** 85 **
_BV( 0 ), // PE 0 ** 0 ** USART0_RX
_BV( 1 ), // PE 1 ** 1 ** USART0_TX
_BV( 4 ), // PE 4 ** 2 ** PWM2
_BV( 5 ), // PE 5 ** 3 ** PWM3
_BV( 5 ), // PG 5 ** 4 ** PWM4
_BV( 3 ), // PE 3 ** 5 ** PWM5
_BV( 3 ), // PH 3 ** 6 ** PWM6
_BV( 4 ), // PH 4 ** 7 ** PWM7
_BV( 5 ), // PH 5 ** 8 ** PWM8
_BV( 6 ), // PH 6 ** 9 ** PWM9
_BV( 4 ), // PB 4 ** 10 ** PWM10
_BV( 5 ), // PB 5 ** 11 ** PWM11
_BV( 6 ), // PB 6 ** 12 ** PWM12
_BV( 7 ), // PB 7 ** 13 ** PWM13
_BV( 1 ), // PJ 1 ** 14 ** USART3_TX
_BV( 0 ), // PJ 0 ** 15 ** USART3_RX
_BV( 1 ), // PH 1 ** 16 ** USART2_TX
_BV( 0 ), // PH 0 ** 17 ** USART2_RX
_BV( 3 ), // PD 3 ** 18 ** USART1_TX
_BV( 2 ), // PD 2 ** 19 ** USART1_RX
_BV( 1 ), // PD 1 ** 20 ** I2C_SDA
_BV( 0 ), // PD 0 ** 21 ** I2C_SCL
_BV( 0 ), // PA 0 ** 22 ** D22
_BV( 1 ), // PA 1 ** 23 ** D23
_BV( 2 ), // PA 2 ** 24 ** D24
_BV( 3 ), // PA 3 ** 25 ** D25
_BV( 4 ), // PA 4 ** 26 ** D26
_BV( 5 ), // PA 5 ** 27 ** D27
_BV( 6 ), // PA 6 ** 28 ** D28
_BV( 7 ), // PA 7 ** 29 ** D29
_BV( 7 ), // PC 7 ** 30 ** D30
_BV( 6 ), // PC 6 ** 31 ** D31
_BV( 5 ), // PC 5 ** 32 ** D32
_BV( 4 ), // PC 4 ** 33 ** D33
_BV( 3 ), // PC 3 ** 34 ** D34
_BV( 2 ), // PC 2 ** 35 ** D35
_BV( 1 ), // PC 1 ** 36 ** D36
_BV( 0 ), // PC 0 ** 37 ** D37
_BV( 7 ), // PD 7 ** 38 ** D38
_BV( 2 ), // PG 2 ** 39 ** D39
_BV( 1 ), // PG 1 ** 40 ** D40
_BV( 0 ), // PG 0 ** 41 ** D41
_BV( 7 ), // PL 7 ** 42 ** D42
_BV( 6 ), // PL 6 ** 43 ** D43
_BV( 5 ), // PL 5 ** 44 ** D44
_BV( 4 ), // PL 4 ** 45 ** D45
_BV( 3 ), // PL 3 ** 46 ** D46
_BV( 2 ), // PL 2 ** 47 ** D47
_BV( 1 ), // PL 1 ** 48 ** D48
_BV( 0 ), // PL 0 ** 49 ** D49
_BV( 3 ), // PB 3 ** 50 ** SPI_MISO
_BV( 2 ), // PB 2 ** 51 ** SPI_MOSI
_BV( 1 ), // PB 1 ** 52 ** SPI_SCK
_BV( 0 ), // PB 0 ** 53 ** SPI_SS
_BV( 0 ), // PF 0 ** 54 ** A0
_BV( 1 ), // PF 1 ** 55 ** A1
_BV( 2 ), // PF 2 ** 56 ** A2
_BV( 3 ), // PF 3 ** 57 ** A3
_BV( 4 ), // PF 4 ** 58 ** A4
_BV( 5 ), // PF 5 ** 59 ** A5
_BV( 6 ), // PF 6 ** 60 ** A6
_BV( 7 ), // PF 7 ** 61 ** A7
_BV( 0 ), // PK 0 ** 62 ** A8
_BV( 1 ), // PK 1 ** 63 ** A9
_BV( 2 ), // PK 2 ** 64 ** A10
_BV( 3 ), // PK 3 ** 65 ** A11
_BV( 4 ), // PK 4 ** 66 ** A12
_BV( 5 ), // PK 5 ** 67 ** A13
_BV( 6 ), // PK 6 ** 68 ** A14
_BV( 7 ), // PK 7 ** 69 ** A15
_BV( 4 ), // PG 4 ** 70 **
_BV( 3 ), // PG 3 ** 71 **
_BV( 2 ), // PJ 2 ** 72 **
_BV( 3 ), // PJ 3 ** 73 **
_BV( 7 ), // PJ 7 ** 74 **
_BV( 4 ), // PJ 4 ** 75 **
_BV( 5 ), // PJ 5 ** 76 **
_BV( 6 ), // PJ 6 ** 77 **
_BV( 2 ), // PE 2 ** 78 **
_BV( 6 ), // PE 6 ** 79 **
_BV( 7 ), // PE 7 ** 80 **
_BV( 4 ), // PD 4 ** 81 **
_BV( 5 ), // PD 5 ** 82 **
_BV( 6 ), // PD 6 ** 83 **
_BV( 2 ), // PH 2 ** 84 **
_BV( 7 ), // PH 7 ** 85 **
};
#define digitalPinToBitMask_plus_70(P) ( pgm_read_byte( digital_pin_to_bit_mask_PGM_plus_70 + (P) ) )
@@ -234,86 +234,86 @@ const uint8_t PROGMEM digital_pin_to_bit_mask_PGM_plus_70[] = {
const uint8_t PROGMEM digital_pin_to_timer_PGM_plus_70[] = {
// TIMERS
// ------------------------
NOT_ON_TIMER , // PE 0 ** 0 ** USART0_RX
NOT_ON_TIMER , // PE 1 ** 1 ** USART0_TX
TIMER3B , // PE 4 ** 2 ** PWM2
TIMER3C , // PE 5 ** 3 ** PWM3
TIMER0B , // PG 5 ** 4 ** PWM4
TIMER3A , // PE 3 ** 5 ** PWM5
TIMER4A , // PH 3 ** 6 ** PWM6
TIMER4B , // PH 4 ** 7 ** PWM7
TIMER4C , // PH 5 ** 8 ** PWM8
TIMER2B , // PH 6 ** 9 ** PWM9
TIMER2A , // PB 4 ** 10 ** PWM10
TIMER1A , // PB 5 ** 11 ** PWM11
TIMER1B , // PB 6 ** 12 ** PWM12
TIMER0A , // PB 7 ** 13 ** PWM13
NOT_ON_TIMER , // PJ 1 ** 14 ** USART3_TX
NOT_ON_TIMER , // PJ 0 ** 15 ** USART3_RX
NOT_ON_TIMER , // PH 1 ** 16 ** USART2_TX
NOT_ON_TIMER , // PH 0 ** 17 ** USART2_RX
NOT_ON_TIMER , // PD 3 ** 18 ** USART1_TX
NOT_ON_TIMER , // PD 2 ** 19 ** USART1_RX
NOT_ON_TIMER , // PD 1 ** 20 ** I2C_SDA
NOT_ON_TIMER , // PD 0 ** 21 ** I2C_SCL
NOT_ON_TIMER , // PA 0 ** 22 ** D22
NOT_ON_TIMER , // PA 1 ** 23 ** D23
NOT_ON_TIMER , // PA 2 ** 24 ** D24
NOT_ON_TIMER , // PA 3 ** 25 ** D25
NOT_ON_TIMER , // PA 4 ** 26 ** D26
NOT_ON_TIMER , // PA 5 ** 27 ** D27
NOT_ON_TIMER , // PA 6 ** 28 ** D28
NOT_ON_TIMER , // PA 7 ** 29 ** D29
NOT_ON_TIMER , // PC 7 ** 30 ** D30
NOT_ON_TIMER , // PC 6 ** 31 ** D31
NOT_ON_TIMER , // PC 5 ** 32 ** D32
NOT_ON_TIMER , // PC 4 ** 33 ** D33
NOT_ON_TIMER , // PC 3 ** 34 ** D34
NOT_ON_TIMER , // PC 2 ** 35 ** D35
NOT_ON_TIMER , // PC 1 ** 36 ** D36
NOT_ON_TIMER , // PC 0 ** 37 ** D37
NOT_ON_TIMER , // PD 7 ** 38 ** D38
NOT_ON_TIMER , // PG 2 ** 39 ** D39
NOT_ON_TIMER , // PG 1 ** 40 ** D40
NOT_ON_TIMER , // PG 0 ** 41 ** D41
NOT_ON_TIMER , // PL 7 ** 42 ** D42
NOT_ON_TIMER , // PL 6 ** 43 ** D43
TIMER5C , // PL 5 ** 44 ** D44
TIMER5B , // PL 4 ** 45 ** D45
TIMER5A , // PL 3 ** 46 ** D46
NOT_ON_TIMER , // PL 2 ** 47 ** D47
NOT_ON_TIMER , // PL 1 ** 48 ** D48
NOT_ON_TIMER , // PL 0 ** 49 ** D49
NOT_ON_TIMER , // PB 3 ** 50 ** SPI_MISO
NOT_ON_TIMER , // PB 2 ** 51 ** SPI_MOSI
NOT_ON_TIMER , // PB 1 ** 52 ** SPI_SCK
NOT_ON_TIMER , // PB 0 ** 53 ** SPI_SS
NOT_ON_TIMER , // PF 0 ** 54 ** A0
NOT_ON_TIMER , // PF 1 ** 55 ** A1
NOT_ON_TIMER , // PF 2 ** 56 ** A2
NOT_ON_TIMER , // PF 3 ** 57 ** A3
NOT_ON_TIMER , // PF 4 ** 58 ** A4
NOT_ON_TIMER , // PF 5 ** 59 ** A5
NOT_ON_TIMER , // PF 6 ** 60 ** A6
NOT_ON_TIMER , // PF 7 ** 61 ** A7
NOT_ON_TIMER , // PK 0 ** 62 ** A8
NOT_ON_TIMER , // PK 1 ** 63 ** A9
NOT_ON_TIMER , // PK 2 ** 64 ** A10
NOT_ON_TIMER , // PK 3 ** 65 ** A11
NOT_ON_TIMER , // PK 4 ** 66 ** A12
NOT_ON_TIMER , // PK 5 ** 67 ** A13
NOT_ON_TIMER , // PK 6 ** 68 ** A14
NOT_ON_TIMER , // PK 7 ** 69 ** A15
NOT_ON_TIMER , // PG 4 ** 70 **
NOT_ON_TIMER , // PG 3 ** 71 **
NOT_ON_TIMER , // PJ 2 ** 72 **
NOT_ON_TIMER , // PJ 3 ** 73 **
NOT_ON_TIMER , // PJ 7 ** 74 **
NOT_ON_TIMER , // PJ 4 ** 75 **
NOT_ON_TIMER , // PJ 5 ** 76 **
NOT_ON_TIMER , // PJ 6 ** 77 **
NOT_ON_TIMER , // PE 2 ** 78 **
NOT_ON_TIMER , // PE 6 ** 79 **
NOT_ON_TIMER, // PE 0 ** 0 ** USART0_RX
NOT_ON_TIMER, // PE 1 ** 1 ** USART0_TX
TIMER3B, // PE 4 ** 2 ** PWM2
TIMER3C, // PE 5 ** 3 ** PWM3
TIMER0B, // PG 5 ** 4 ** PWM4
TIMER3A, // PE 3 ** 5 ** PWM5
TIMER4A, // PH 3 ** 6 ** PWM6
TIMER4B, // PH 4 ** 7 ** PWM7
TIMER4C, // PH 5 ** 8 ** PWM8
TIMER2B, // PH 6 ** 9 ** PWM9
TIMER2A, // PB 4 ** 10 ** PWM10
TIMER1A, // PB 5 ** 11 ** PWM11
TIMER1B, // PB 6 ** 12 ** PWM12
TIMER0A, // PB 7 ** 13 ** PWM13
NOT_ON_TIMER, // PJ 1 ** 14 ** USART3_TX
NOT_ON_TIMER, // PJ 0 ** 15 ** USART3_RX
NOT_ON_TIMER, // PH 1 ** 16 ** USART2_TX
NOT_ON_TIMER, // PH 0 ** 17 ** USART2_RX
NOT_ON_TIMER, // PD 3 ** 18 ** USART1_TX
NOT_ON_TIMER, // PD 2 ** 19 ** USART1_RX
NOT_ON_TIMER, // PD 1 ** 20 ** I2C_SDA
NOT_ON_TIMER, // PD 0 ** 21 ** I2C_SCL
NOT_ON_TIMER, // PA 0 ** 22 ** D22
NOT_ON_TIMER, // PA 1 ** 23 ** D23
NOT_ON_TIMER, // PA 2 ** 24 ** D24
NOT_ON_TIMER, // PA 3 ** 25 ** D25
NOT_ON_TIMER, // PA 4 ** 26 ** D26
NOT_ON_TIMER, // PA 5 ** 27 ** D27
NOT_ON_TIMER, // PA 6 ** 28 ** D28
NOT_ON_TIMER, // PA 7 ** 29 ** D29
NOT_ON_TIMER, // PC 7 ** 30 ** D30
NOT_ON_TIMER, // PC 6 ** 31 ** D31
NOT_ON_TIMER, // PC 5 ** 32 ** D32
NOT_ON_TIMER, // PC 4 ** 33 ** D33
NOT_ON_TIMER, // PC 3 ** 34 ** D34
NOT_ON_TIMER, // PC 2 ** 35 ** D35
NOT_ON_TIMER, // PC 1 ** 36 ** D36
NOT_ON_TIMER, // PC 0 ** 37 ** D37
NOT_ON_TIMER, // PD 7 ** 38 ** D38
NOT_ON_TIMER, // PG 2 ** 39 ** D39
NOT_ON_TIMER, // PG 1 ** 40 ** D40
NOT_ON_TIMER, // PG 0 ** 41 ** D41
NOT_ON_TIMER, // PL 7 ** 42 ** D42
NOT_ON_TIMER, // PL 6 ** 43 ** D43
TIMER5C, // PL 5 ** 44 ** D44
TIMER5B, // PL 4 ** 45 ** D45
TIMER5A, // PL 3 ** 46 ** D46
NOT_ON_TIMER, // PL 2 ** 47 ** D47
NOT_ON_TIMER, // PL 1 ** 48 ** D48
NOT_ON_TIMER, // PL 0 ** 49 ** D49
NOT_ON_TIMER, // PB 3 ** 50 ** SPI_MISO
NOT_ON_TIMER, // PB 2 ** 51 ** SPI_MOSI
NOT_ON_TIMER, // PB 1 ** 52 ** SPI_SCK
NOT_ON_TIMER, // PB 0 ** 53 ** SPI_SS
NOT_ON_TIMER, // PF 0 ** 54 ** A0
NOT_ON_TIMER, // PF 1 ** 55 ** A1
NOT_ON_TIMER, // PF 2 ** 56 ** A2
NOT_ON_TIMER, // PF 3 ** 57 ** A3
NOT_ON_TIMER, // PF 4 ** 58 ** A4
NOT_ON_TIMER, // PF 5 ** 59 ** A5
NOT_ON_TIMER, // PF 6 ** 60 ** A6
NOT_ON_TIMER, // PF 7 ** 61 ** A7
NOT_ON_TIMER, // PK 0 ** 62 ** A8
NOT_ON_TIMER, // PK 1 ** 63 ** A9
NOT_ON_TIMER, // PK 2 ** 64 ** A10
NOT_ON_TIMER, // PK 3 ** 65 ** A11
NOT_ON_TIMER, // PK 4 ** 66 ** A12
NOT_ON_TIMER, // PK 5 ** 67 ** A13
NOT_ON_TIMER, // PK 6 ** 68 ** A14
NOT_ON_TIMER, // PK 7 ** 69 ** A15
NOT_ON_TIMER, // PG 4 ** 70 **
NOT_ON_TIMER, // PG 3 ** 71 **
NOT_ON_TIMER, // PJ 2 ** 72 **
NOT_ON_TIMER, // PJ 3 ** 73 **
NOT_ON_TIMER, // PJ 7 ** 74 **
NOT_ON_TIMER, // PJ 4 ** 75 **
NOT_ON_TIMER, // PJ 5 ** 76 **
NOT_ON_TIMER, // PJ 6 ** 77 **
NOT_ON_TIMER, // PE 2 ** 78 **
NOT_ON_TIMER, // PE 6 ** 79 **
};
#define digitalPinToTimer_plus_70(P) ( pgm_read_byte( digital_pin_to_timer_PGM_plus_70 + (P) ) )

View File

@@ -93,15 +93,15 @@ namespace AVRHelpers {
typedef T type;
};
template <typename T>
struct voltype <T, 1u> {
struct voltype <T, 1U> {
typedef uint8_t type;
};
template <typename T>
struct voltype <T, 2u> {
struct voltype <T, 2U> {
typedef uint16_t type;
};
template <typename T>
struct voltype <T, 4u> {
struct voltype <T, 4U> {
typedef uint32_t type;
};
@@ -2007,7 +2007,7 @@ inline void _ATmega_resetperipherals() {
#if defined(__AVR_TRM01__) || defined(__AVR_TRM02__) || defined(__AVR_TRM03__) || defined(__AVR_TRM05__)
_EEAR._EEAR = 0;
dwrite(_EEDR, (uint8_t)0u);
dwrite(_EEDR, (uint8_t)0U);
#endif
#if defined(__AVR_TRM01__) || defined(__AVR_TRM02__) || defined(__AVR_TRM03__) || defined(__AVR_TRM04__) || defined(__AVR_TRM05__)

View File

@@ -23,43 +23,41 @@
/**
* Define SPI Pins: SCK, MISO, MOSI, SS
* Platform pins have parentheses, e.g., "(53)", so we cannot use them.
*/
#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328__) || defined(__AVR_ATmega328P__)
#define AVR_SCK_PIN 13
#define AVR_MISO_PIN 12
#define AVR_MOSI_PIN 11
#define AVR_SS_PIN 10
#define _PIN_SPI_SCK 13
#define _PIN_SPI_MISO 12
#define _PIN_SPI_MOSI 11
#define _PIN_SPI_SS 10
#elif defined(__AVR_ATmega644__) || defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644PA__) || defined(__AVR_ATmega1284P__)
#define AVR_SCK_PIN 7
#define AVR_MISO_PIN 6
#define AVR_MOSI_PIN 5
#define AVR_SS_PIN 4
#define _PIN_SPI_SCK 7
#define _PIN_SPI_MISO 6
#define _PIN_SPI_MOSI 5
#define _PIN_SPI_SS 4
#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
#define AVR_SCK_PIN 52
#define AVR_MISO_PIN 50
#define AVR_MOSI_PIN 51
#define AVR_SS_PIN 53
#define _PIN_SPI_SCK 52
#define _PIN_SPI_MISO 50
#define _PIN_SPI_MOSI 51
#define _PIN_SPI_SS 53
#elif defined(__AVR_AT90USB1287__) || defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB647__)
#define AVR_SCK_PIN 21
#define AVR_MISO_PIN 23
#define AVR_MOSI_PIN 22
#define AVR_SS_PIN 20
#define _PIN_SPI_SCK 21
#define _PIN_SPI_MISO 23
#define _PIN_SPI_MOSI 22
#define _PIN_SPI_SS 20
#elif defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2561__)
#define AVR_SCK_PIN 10
#define AVR_MISO_PIN 12
#define AVR_MOSI_PIN 11
#define AVR_SS_PIN 16
#define _PIN_SPI_SCK 10
#define _PIN_SPI_MISO 12
#define _PIN_SPI_MOSI 11
#define _PIN_SPI_SS 16
#endif
#ifndef SD_SCK_PIN
#define SD_SCK_PIN AVR_SCK_PIN
#define SD_SCK_PIN _PIN_SPI_SCK
#endif
#ifndef SD_MISO_PIN
#define SD_MISO_PIN AVR_MISO_PIN
#define SD_MISO_PIN _PIN_SPI_MISO
#endif
#ifndef SD_MOSI_PIN
#define SD_MOSI_PIN AVR_MOSI_PIN
#endif
#ifndef SD_SS_PIN
#define SD_SS_PIN AVR_SS_PIN
#define SD_MOSI_PIN _PIN_SPI_MOSI
#endif

View File

@@ -28,7 +28,7 @@
// ------------------------
typedef uint16_t hal_timer_t;
#define HAL_TIMER_TYPE_MAX 0xFFFF
#define HAL_TIMER_TYPE_MAX hal_timer_t(UINT16_MAX)
// ------------------------
// Defines
@@ -46,15 +46,14 @@ typedef uint16_t hal_timer_t;
#define MF_TIMER_TEMP 0
#endif
#define TEMP_TIMER_FREQUENCY (((F_CPU) + 0x2000) / 0x4000)
#define TEMP_TIMER_FREQUENCY (((F_CPU) + 0x2000) / 0x4000)
#define STEPPER_TIMER_RATE HAL_TIMER_RATE
#define STEPPER_TIMER_PRESCALE 8
#define STEPPER_TIMER_TICKS_PER_US ((STEPPER_TIMER_RATE) / 1000000)
#define STEPPER_TIMER_RATE HAL_TIMER_RATE
#define STEPPER_TIMER_PRESCALE 8
#define STEPPER_TIMER_TICKS_PER_US ((STEPPER_TIMER_RATE) / 1000000UL) // (MHz) Stepper Timer ticks per µs
#define PULSE_TIMER_RATE STEPPER_TIMER_RATE
#define PULSE_TIMER_PRESCALE STEPPER_TIMER_PRESCALE
#define PULSE_TIMER_TICKS_PER_US STEPPER_TIMER_TICKS_PER_US
#define PULSE_TIMER_RATE STEPPER_TIMER_RATE // (Hz) Frequency of Pulse Timer
#define PULSE_TIMER_PRESCALE STEPPER_TIMER_PRESCALE
#define ENABLE_STEPPER_DRIVER_INTERRUPT() SBI(TIMSK1, OCIE1A)
#define DISABLE_STEPPER_DRIVER_INTERRUPT() CBI(TIMSK1, OCIE1A)
@@ -111,8 +110,8 @@ FORCE_INLINE void HAL_timer_start(const uint8_t timer_num, const uint32_t) {
* (otherwise, characters will be lost due to UART overflow).
* Then: Stepper, Endstops, Temperature, and -finally- all others.
*/
#define HAL_timer_isr_prologue(T) NOOP
#define HAL_timer_isr_epilogue(T) NOOP
inline void HAL_timer_isr_prologue(const uint8_t) {}
inline void HAL_timer_isr_epilogue(const uint8_t) {}
#ifndef HAL_STEP_TIMER_ISR

View File

@@ -55,12 +55,12 @@
#if defined(ARDUINO) && !defined(ARDUINO_ARCH_STM32) && !defined(ARDUINO_ARCH_SAM)
#include "../../inc/MarlinConfigPre.h"
#include "../../../inc/MarlinConfigPre.h"
#if HAS_MARLINUI_U8GLIB
#include "../shared/Marduino.h"
#include "../shared/Delay.h"
#include "../../shared/Marduino.h"
#include "../../shared/Delay.h"
#include <U8glib-HAL.h>

View File

@@ -27,7 +27,6 @@
#ifdef ARDUINO_ARCH_SAM
#include "../../inc/MarlinConfig.h"
#include "../../MarlinCore.h"
#include <Wire.h>
#include "usb/usb_task.h"
@@ -48,7 +47,7 @@ uint16_t MarlinHAL::adc_result;
void MarlinHAL::init() {
#if HAS_MEDIA
OUT_WRITE(SDSS, HIGH); // Try to set SDSS inactive before any other SPI users start up
OUT_WRITE(SD_SS_PIN, HIGH); // Try to set SDSS inactive before any other SPI users start up
#endif
usb_task_init(); // Initialize the USB stack
TERN_(POSTMORTEM_DEBUGGING, install_min_serial()); // Install the min serial handler
@@ -102,6 +101,10 @@ void watchdogSetup() {
#if ENABLED(USE_WATCHDOG)
#ifndef WATCHDOG_PIO_RESET
#define WATCHDOG_PIO_RESET
#endif
// 4 seconds timeout
uint32_t timeout = TERN(WATCHDOG_DURATION_8S, 8000, 4000);
@@ -115,15 +118,16 @@ void watchdogSetup() {
timeout = 0xFFF;
// We want to enable the watchdog with the specified timeout
uint32_t value =
WDT_MR_WDV(timeout) | // With the specified timeout
WDT_MR_WDD(timeout) | // and no invalid write window
#if !(SAMV70 || SAMV71 || SAME70 || SAMS70)
WDT_MR_WDRPROC | // WDT fault resets processor only - We want
// to keep PIO controller state
#endif
WDT_MR_WDDBGHLT | // WDT stops in debug state.
WDT_MR_WDIDLEHLT; // WDT stops in idle state.
uint32_t value = (0
| WDT_MR_WDV(timeout) // With the specified timeout
| WDT_MR_WDD(timeout) // and no invalid write window
#if NONE(WATCHDOG_PIO_RESET, SAMV70, SAMV71, SAME70, SAMS70)
| WDT_MR_WDRPROC // WDT fault resets processor only with this flag.
// Omit to also reset the PIO controller.
#endif
| WDT_MR_WDDBGHLT // WDT stops in debug state.
| WDT_MR_WDIDLEHLT // WDT stops in idle state.
);
#if ENABLED(WATCHDOG_RESET_MANUAL)
// We enable the watchdog timer, but only for the interrupt.

View File

@@ -35,67 +35,9 @@
#include <stdint.h>
#include "../../core/serial_hook.h"
// ------------------------
// Serial ports
// ------------------------
typedef ForwardSerial1Class< decltype(Serial) > DefaultSerial1;
typedef ForwardSerial1Class< decltype(Serial1) > DefaultSerial2;
typedef ForwardSerial1Class< decltype(Serial2) > DefaultSerial3;
typedef ForwardSerial1Class< decltype(Serial3) > DefaultSerial4;
extern DefaultSerial1 MSerial0;
extern DefaultSerial2 MSerial1;
extern DefaultSerial3 MSerial2;
extern DefaultSerial4 MSerial3;
#define _MSERIAL(X) MSerial##X
#define MSERIAL(X) _MSERIAL(X)
#if SERIAL_PORT == -1 || ENABLED(EMERGENCY_PARSER)
#define MYSERIAL1 customizedSerial1
#elif WITHIN(SERIAL_PORT, 0, 3)
#define MYSERIAL1 MSERIAL(SERIAL_PORT)
#else
#error "The required SERIAL_PORT must be from 0 to 3, or -1 for USB Serial."
#endif
#ifdef SERIAL_PORT_2
#if SERIAL_PORT_2 == -1 || ENABLED(EMERGENCY_PARSER)
#define MYSERIAL2 customizedSerial2
#elif WITHIN(SERIAL_PORT_2, 0, 3)
#define MYSERIAL2 MSERIAL(SERIAL_PORT_2)
#else
#error "SERIAL_PORT_2 must be from 0 to 3, or -1 for USB Serial."
#endif
#endif
#ifdef SERIAL_PORT_3
#if SERIAL_PORT_3 == -1 || ENABLED(EMERGENCY_PARSER)
#define MYSERIAL3 customizedSerial3
#elif WITHIN(SERIAL_PORT_3, 0, 3)
#define MYSERIAL3 MSERIAL(SERIAL_PORT_3)
#else
#error "SERIAL_PORT_3 must be from 0 to 3, or -1 for USB Serial."
#endif
#endif
#ifdef MMU_SERIAL_PORT
#if WITHIN(MMU_SERIAL_PORT, 0, 3)
#define MMU_SERIAL MSERIAL(MMU_SERIAL_PORT)
#else
#error "MMU_SERIAL_PORT must be from 0 to 3."
#endif
#endif
#ifdef LCD_SERIAL_PORT
#if WITHIN(LCD_SERIAL_PORT, 0, 3)
#define LCD_SERIAL MSERIAL(LCD_SERIAL_PORT)
#else
#error "LCD_SERIAL_PORT must be from 0 to 3."
#endif
#endif
//
// Serial Ports
//
#include "MarlinSerial.h"
#include "MarlinSerialUSB.h"
@@ -190,7 +132,7 @@ public:
static void delay_ms(const int ms) { delay(ms); }
// Tasks, called from idle()
// Tasks, called from marlin.idle()
static void idletask();
// Reset

View File

@@ -208,8 +208,8 @@
A("str %[sck_mask],[%[sck_port],#0x4]") /* CODR */
A("bfi %[bin],%[work],#0,#1") /* Store read bit as the bit 0 */
: [bin]"+r"(bin),
[work]"+r"(work)
: [bin]"+r"( bin ),
[work]"+r"( work )
: [bitband_miso_port]"r"( BITBAND_MISO_PORT ),
[sck_mask]"r"( SCK_MASK ),
[sck_port]"r"( SCK_PORT_PLUS30 )
@@ -350,7 +350,7 @@
static void spiRxBlock0(uint8_t *ptr, uint32_t todo) {
uint32_t bin = 0;
uint32_t work = 0;
uint32_t BITBAND_MISO_PORT = BITBAND_ADDRESS( ((uint32_t)PORT(SD_MISO_PIN))+0x3C, PIN_SHIFT(SD_MISO_PIN)); /* PDSR of port in bitband area */
uint32_t BITBAND_MISO_PORT = BITBAND_ADDRESS(((uint32_t)PORT(SD_MISO_PIN))+0x3C, PIN_SHIFT(SD_MISO_PIN)); /* PDSR of port in bitband area */
uint32_t SCK_PORT_PLUS30 = ((uint32_t) PORT(SD_SCK_PIN)) + 0x30; /* SODR of port */
uint32_t SCK_MASK = PIN_MASK(SD_SCK_PIN);
@@ -412,10 +412,10 @@
A("strb.w %[bin], [%[ptr]], #1") /* Store read value into buffer, increment buffer pointer */
A("bne.n loop%=") /* Repeat until done */
: [ptr]"+r"(ptr),
[todo]"+r"(todo),
[bin]"+r"(bin),
[work]"+r"(work)
: [ptr]"+r"( ptr ),
[todo]"+r"( todo ),
[bin]"+r"( bin ),
[work]"+r"( work )
: [bitband_miso_port]"r"( BITBAND_MISO_PORT ),
[sck_mask]"r"( SCK_MASK ),
[sck_port]"r"( SCK_PORT_PLUS30 )
@@ -600,9 +600,8 @@
OUT_WRITE(SPI_EEPROM1_CS_PIN, HIGH);
OUT_WRITE(SPI_EEPROM2_CS_PIN, HIGH);
OUT_WRITE(SPI_FLASH_CS_PIN, HIGH);
WRITE(SD_SS_PIN, HIGH);
OUT_WRITE(SDSS, LOW);
OUT_WRITE(SD_SS_PIN, HIGH);
WRITE(SD_SS_PIN, LOW);
PIO_Configure(
g_APinDescription[SPI_PIN].pPort,
@@ -767,7 +766,7 @@
// Disable PIO on A26 and A27
REG_PIOA_PDR = 0x0C000000;
OUT_WRITE(SDSS, HIGH);
OUT_WRITE(SD_SS_PIN, HIGH);
// Reset SPI0 (from sam lib)
SPI0->SPI_CR = SPI_CR_SPIDIS;

View File

@@ -31,7 +31,6 @@
#include "MarlinSerial.h"
#include "InterruptVectors.h"
#include "../../MarlinCore.h"
template<typename Cfg> typename MarlinSerial<Cfg>::ring_buffer_r MarlinSerial<Cfg>::rx_buffer = { 0, 0, { 0 } };
template<typename Cfg> typename MarlinSerial<Cfg>::ring_buffer_t MarlinSerial<Cfg>::tx_buffer = { 0 };

View File

@@ -33,6 +33,21 @@
#include "../../core/types.h"
#include "../../core/serial_hook.h"
typedef ForwardSerial1Class< decltype(Serial) > DefaultSerial1;
typedef ForwardSerial1Class< decltype(Serial1) > DefaultSerial2;
typedef ForwardSerial1Class< decltype(Serial2) > DefaultSerial3;
typedef ForwardSerial1Class< decltype(Serial3) > DefaultSerial4;
extern DefaultSerial1 MSerial0;
extern DefaultSerial2 MSerial1;
extern DefaultSerial3 MSerial2;
extern DefaultSerial4 MSerial3;
#define SERIAL_INDEX_MIN 0
#define SERIAL_INDEX_MAX 3
#define EP_SERIAL_PORT(N) customizedSerial##N
#define USB_SERIAL_PORT(N) customizedSerial##N
#include "../shared/serial_ports.h"
// Define constants and variables for buffering incoming serial data. We're
// using a ring buffer (I think), in which rx_buffer_head is the index of the
// location to which to write the next incoming character and rx_buffer_tail

View File

@@ -24,7 +24,7 @@
/**
* Description: Tone function for Arduino Due and compatible (SAM3X8E)
* Derived from https://forum.arduino.cc/index.php?topic=136500.msg2903012#msg2903012
* Derived from https://forum.arduino.cc/t/arduino-due-and-tone/133302/13
*/
#ifdef ARDUINO_ARCH_SAM

View File

@@ -21,7 +21,7 @@
*/
#ifdef ARDUINO_ARCH_SAM
#include "../../inc/MarlinConfig.h"
#include "../../../inc/MarlinConfig.h"
#if ENABLED(FLASH_EEPROM_EMULATION)
@@ -132,7 +132,7 @@ static uint8_t buffer[256] = {0}, // The RAM buffer to accumulate writes
curGroup = 0xFF; // Current FLASH group
#define DEBUG_OUT ENABLED(EE_EMU_DEBUG)
#include "../../core/debug_out.h"
#include "../../../core/debug_out.h"
static void ee_Dump(const int page, const void *data) {
@@ -953,7 +953,7 @@ static void ee_Init() {
/* PersistentStore -----------------------------------------------------------*/
#include "../shared/eeprom_api.h"
#include "../../shared/eeprom_api.h"
#ifndef MARLIN_EEPROM_SIZE
#define MARLIN_EEPROM_SIZE 0x1000 // 4KB

View File

@@ -21,7 +21,7 @@
*/
#ifdef ARDUINO_ARCH_SAM
#include "../../inc/MarlinConfig.h"
#include "../../../inc/MarlinConfig.h"
#if USE_WIRED_EEPROM
@@ -30,8 +30,8 @@
* with simple implementations supplied by Marlin.
*/
#include "../shared/eeprom_if.h"
#include "../shared/eeprom_api.h"
#include "../../shared/eeprom_if.h"
#include "../../shared/eeprom_api.h"
#ifndef MARLIN_EEPROM_SIZE
#error "MARLIN_EEPROM_SIZE is required for I2C / SPI EEPROM."

View File

@@ -40,11 +40,12 @@
* Some jitter in the Vref signal is OK so the interrupt priority is left at its default value.
*/
#include "../../../inc/MarlinConfig.h"
#include "../../../inc/MarlinConfigPre.h"
#if MB(PRINTRBOARD_G2)
#include "G2_PWM.h"
#include "../../../module/stepper.h"
#if PIN_EXISTS(MOTOR_CURRENT_PWM_X)
#define G2_PWM_X 1
@@ -56,16 +57,12 @@
#else
#define G2_PWM_Y 0
#endif
#if PIN_EXISTS(MOTOR_CURRENT_PWM_Z)
#if HAS_MOTOR_CURRENT_PWM_Z
#define G2_PWM_Z 1
#else
#define G2_PWM_Z 0
#endif
#if HAS_MOTOR_CURRENT_PWM_E
#define G2_PWM_E 1
#else
#define G2_PWM_E 0
#endif
#define G2_PWM_E HAS_MOTOR_CURRENT_PWM_E
#define G2_MASK_X(V) (G2_PWM_X * (V))
#define G2_MASK_Y(V) (G2_PWM_Y * (V))
#define G2_MASK_Z(V) (G2_PWM_Z * (V))
@@ -80,17 +77,22 @@ PWM_map ISR_table[NUM_PWMS] = PWM_MAP_INIT;
void Stepper::digipot_init() {
#if PIN_EXISTS(MOTOR_CURRENT_PWM_X)
OUT_WRITE(MOTOR_CURRENT_PWM_X_PIN, 0); // init pins
#if G2_PWM_X
OUT_WRITE(MOTOR_CURRENT_PWM_X_PIN, LOW); // init pins
#endif
#if PIN_EXISTS(MOTOR_CURRENT_PWM_Y)
OUT_WRITE(MOTOR_CURRENT_PWM_Y_PIN, 0);
#if G2_PWM_Y
OUT_WRITE(MOTOR_CURRENT_PWM_Y_PIN, LOW);
#endif
#if G2_PWM_Z
OUT_WRITE(MOTOR_CURRENT_PWM_Z_PIN, 0);
OUT_WRITE(MOTOR_CURRENT_PWM_Z_PIN, LOW);
#endif
#if G2_PWM_E
OUT_WRITE(MOTOR_CURRENT_PWM_E_PIN, 0);
#if PIN_EXISTS(MOTOR_CURRENT_PWM_E)
OUT_WRITE(MOTOR_CURRENT_PWM_E_PIN, LOW);
#endif
#if PIN_EXISTS(MOTOR_CURRENT_PWM_E0)
OUT_WRITE(MOTOR_CURRENT_PWM_E0_PIN, LOW);
#endif
#endif
#define WPKEY (0x50574D << 8) // “PWM” in ASCII

View File

@@ -26,10 +26,7 @@
* PR #7500. It is hardwired for the PRINTRBOARD_G2 Motor Current needs.
*/
#include "../../../inc/MarlinConfigPre.h"
#include "../../../module/stepper.h"
//C:\Users\bobku\Documents\GitHub\Marlin-Bob-2\Marlin\src\module\stepper.h
//C:\Users\bobku\Documents\GitHub\Marlin-Bob-2\Marlin\src\HAL\HAL_DUE\G2_PWM.h
#include <stdint.h>
#define PWM_PERIOD_US 100 // base repetition rate in micro seconds

View File

@@ -26,39 +26,36 @@
*
* Available chip select pins for HW SPI are 4 10 52 77 87
*/
#if SDSS == 4 || SDSS == 10 || SDSS == 52 || SDSS == 77 || SDSS == 87
#if SDSS == 4
#define SPI_PIN 87
#define SPI_CHAN 1
#elif SDSS == 10
#define SPI_PIN 77
#define SPI_CHAN 0
#elif SDSS == 52
#define SPI_PIN 86
#define SPI_CHAN 2
#elif SDSS == 77
#define SPI_PIN 77
#define SPI_CHAN 0
#else
#define SPI_PIN 87
#define SPI_CHAN 1
#endif
#define SD_SCK_PIN 76
#define SD_MISO_PIN 74
#define SD_MOSI_PIN 75
#else
// defaults
#define SOFTWARE_SPI
#ifndef SD_SCK_PIN
#define SD_SCK_PIN 52
#endif
#ifndef SD_MISO_PIN
#define SD_MISO_PIN 50
#endif
#ifndef SD_MOSI_PIN
#define SD_MOSI_PIN 51
#endif
#if SD_SS_PIN == 4 || SD_SS_PIN == 10 || SD_SS_PIN == 52 || SD_SS_PIN == 77 || SD_SS_PIN == 87
#define SD_SCK_PIN 76
#define SD_MISO_PIN 74
#define SD_MOSI_PIN 75
#endif
/* A.28, A.29, B.21, C.26, C.29 */
#define SD_SS_PIN SDSS
#if SD_SS_PIN == 4
#define SPI_PIN 87
#define SPI_CHAN 1
#elif SD_SS_PIN == 10
#define SPI_PIN 77
#define SPI_CHAN 0
#elif SD_SS_PIN == 52
#define SPI_PIN 86
#define SPI_CHAN 2
#elif SD_SS_PIN == 77
#define SPI_PIN 77
#define SPI_CHAN 0
#elif SD_SS_PIN == 87
#define SPI_PIN 87
#define SPI_CHAN 1
#else
#define SOFTWARE_SPI
#ifndef SD_SCK_PIN
#define SD_SCK_PIN 52
#endif
#ifndef SD_MISO_PIN
#define SD_MISO_PIN 50
#endif
#ifndef SD_MOSI_PIN
#define SD_MOSI_PIN 51
#endif
#endif

View File

@@ -34,7 +34,7 @@
#define FORCE_INLINE __attribute__((always_inline)) inline
typedef uint32_t hal_timer_t;
#define HAL_TIMER_TYPE_MAX 0xFFFFFFFF
#define HAL_TIMER_TYPE_MAX hal_timer_t(UINT32_MAX)
#define HAL_TIMER_PRESCALER 2
#define HAL_TIMER_RATE ((F_CPU) / (HAL_TIMER_PRESCALER)) // frequency of timers peripherals
@@ -52,19 +52,18 @@ typedef uint32_t hal_timer_t;
#define MF_TIMER_TONE 6 // index of timer to use for beeper tones
#endif
#define TEMP_TIMER_FREQUENCY 1000 // temperature interrupt frequency
#define TEMP_TIMER_FREQUENCY 1000 // (Hz) Temperature ISR frequency
#define STEPPER_TIMER_RATE HAL_TIMER_RATE // frequency of stepper timer (HAL_TIMER_RATE / STEPPER_TIMER_PRESCALE)
#define STEPPER_TIMER_TICKS_PER_US ((STEPPER_TIMER_RATE) / 1000000) // stepper timer ticks per µs
#define STEPPER_TIMER_RATE HAL_TIMER_RATE // (Hz) Frequency of Stepper Timer ISR (HAL_TIMER_RATE / STEPPER_TIMER_PRESCALE)
#define STEPPER_TIMER_TICKS_PER_US ((STEPPER_TIMER_RATE) / 1000000UL) // (MHz) Stepper Timer ticks per µs
#define STEPPER_TIMER_PRESCALE (CYCLES_PER_MICROSECOND / STEPPER_TIMER_TICKS_PER_US)
#define PULSE_TIMER_RATE STEPPER_TIMER_RATE // frequency of pulse timer
#define PULSE_TIMER_RATE STEPPER_TIMER_RATE // (Hz) Frequency of Pulse Timer
#define PULSE_TIMER_PRESCALE STEPPER_TIMER_PRESCALE
#define PULSE_TIMER_TICKS_PER_US STEPPER_TIMER_TICKS_PER_US
#define ENABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_enable_interrupt(MF_TIMER_STEP)
#define ENABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_enable_interrupt(MF_TIMER_STEP)
#define DISABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_disable_interrupt(MF_TIMER_STEP)
#define STEPPER_ISR_ENABLED() HAL_timer_interrupt_enabled(MF_TIMER_STEP)
#define STEPPER_ISR_ENABLED() HAL_timer_interrupt_enabled(MF_TIMER_STEP)
#define ENABLE_TEMPERATURE_INTERRUPT() HAL_timer_enable_interrupt(MF_TIMER_TEMP)
#define DISABLE_TEMPERATURE_INTERRUPT() HAL_timer_disable_interrupt(MF_TIMER_TEMP)
@@ -127,4 +126,4 @@ FORCE_INLINE static void HAL_timer_isr_prologue(const uint8_t timer_num) {
pConfig->pTimerRegs->TC_CHANNEL[pConfig->channel].TC_SR;
}
#define HAL_timer_isr_epilogue(T) NOOP
inline void HAL_timer_isr_epilogue(const uint8_t) {}

View File

@@ -0,0 +1,5 @@
# editorconfig.org
[{*.c,*.cpp,*.h}]
indent_style = tab
indent_size = 4

View File

@@ -63,8 +63,8 @@
#include "compiler.h"
#include "preprocessor.h"
#ifdef FREERTOS_USED
#include "FreeRTOS.h"
#include "semphr.h"
#include <FreeRTOS.h>
#include <semphr.h>
#endif
#include "ctrl_access.h"

View File

@@ -19,7 +19,7 @@ void sd_mmc_spi_mem_init() {
}
inline bool media_ready() {
return IS_SD_MOUNTED() && IS_SD_INSERTED() && !IS_SD_FILE_OPEN() && !IS_SD_PRINTING();
return card.isMounted() && card.isInserted() && !card.isFileOpen() && !card.isStillPrinting();
}
bool sd_mmc_spi_unload(bool) { return true; }
@@ -29,11 +29,10 @@ bool sd_mmc_spi_wr_protect() { return false; }
bool sd_mmc_spi_removal() { return !media_ready(); }
Ctrl_status sd_mmc_spi_test_unit_ready() {
#ifdef DISABLE_DUE_SD_MMC
#if ENABLED(DISABLE_DUE_SD_MMC)
return CTRL_NO_PRESENT;
#endif
if (sd_mmc_spi_removal()) return CTRL_NO_PRESENT;
return CTRL_GOOD;
return sd_mmc_spi_removal() ? CTRL_NO_PRESENT : CTRL_GOOD;
}
// NOTE: This function is defined as returning the address of the last block
@@ -58,9 +57,10 @@ uint8_t sector_buf[SD_MMC_BLOCK_SIZE];
// #define DEBUG_MMC
Ctrl_status sd_mmc_spi_usb_read_10(uint32_t addr, uint16_t nb_sector) {
#ifdef DISABLE_DUE_SD_MMC
#if ENABLED(DISABLE_DUE_SD_MMC)
return CTRL_NO_PRESENT;
#endif
if (sd_mmc_spi_removal()) return CTRL_NO_PRESENT;
#ifdef DEBUG_MMC
@@ -97,9 +97,10 @@ Ctrl_status sd_mmc_spi_usb_read_10(uint32_t addr, uint16_t nb_sector) {
}
Ctrl_status sd_mmc_spi_usb_write_10(uint32_t addr, uint16_t nb_sector) {
#ifdef DISABLE_DUE_SD_MMC
#if ENABLED(DISABLE_DUE_SD_MMC)
return CTRL_NO_PRESENT;
#endif
if (sd_mmc_spi_removal()) return CTRL_NO_PRESENT;
#ifdef DEBUG_MMC

View File

@@ -229,7 +229,7 @@ usb_iface_desc_t UDC_DESC_STORAGE *udc_get_interface_desc(void);
* - USB Device Controller (UDC) provides USB chapter 9 compliance
* - USB Device Interface (UDI) provides USB Class compliance
* - USB Device Driver (UDD) provides USB Driver for each Atmel MCU
*
* Many USB Device applications can be implemented on Atmel MCU.
* Atmel provides many application notes for different applications:
* - AVR4900, provides general information about Device Stack

View File

@@ -523,7 +523,7 @@ static bool udd_ep_interrupt(void);
* \internal
* \brief Function called by UOTGHS interrupt to manage USB Device interrupts
*
* USB Device interrupt events are splited in three parts:
* USB Device interrupt events are split in three parts:
* - USB line events (SOF, reset, suspend, resume, wakeup)
* - control endpoint events (setup reception, end of data transfer, underflow, overflow, stall)
* - bulk/interrupt/isochronous endpoints events (end of data transfer)
@@ -1567,7 +1567,7 @@ static void udd_ctrl_out_received(void)
udd_ctrl_payload_buf_cnt))) {
// End of reception because it is a short packet
// Before send ZLP, call intermediate callback
// in case of data receiv generate a stall
// in case of data receive generate a stall
udd_g_ctrlreq.payload_size = udd_ctrl_payload_buf_cnt;
if (NULL != udd_g_ctrlreq.over_under_run) {
if (!udd_g_ctrlreq.over_under_run()) {
@@ -1808,7 +1808,7 @@ static void udd_ep_trans_done(udd_ep_id_t ep)
}
if (ptr_job->buf_cnt != ptr_job->buf_size) {
// Need to send or receiv other data
// Need to send or receive other data
next_trans = ptr_job->buf_size - ptr_job->buf_cnt;
if (UDD_ENDPOINT_MAX_TRANS < next_trans) {

View File

@@ -34,13 +34,13 @@
#if ENABLED(WIFISUPPORT)
#include <ESPAsyncWebServer.h>
#include "wifi.h"
#include "wifi/wifi.h"
#if ENABLED(OTASUPPORT)
#include "ota.h"
#include "wifi/ota.h"
#endif
#if ENABLED(WEBSUPPORT)
#include "spiffs.h"
#include "web.h"
#include "wifi/spiffs.h"
#include "wifi/web.h"
#endif
#endif
@@ -175,8 +175,6 @@ uint8_t MarlinHAL::get_reset_source() { return rtc_get_reset_reason(1); }
void MarlinHAL::reboot() { ESP.restart(); }
void _delay_ms(const int ms) { delay(ms); }
// return free memory between end of heap (or end bss) and whatever is current
int MarlinHAL::freeMemory() { return ESP.getFreeHeap(); }
@@ -244,12 +242,13 @@ void MarlinHAL::adc_init() {
TERN_(HAS_TEMP_ADC_5, adc1_set_attenuation(get_channel(TEMP_5_PIN), ADC_ATTEN_11db));
TERN_(HAS_TEMP_ADC_6, adc2_set_attenuation(get_channel(TEMP_6_PIN), ADC_ATTEN_11db));
TERN_(HAS_TEMP_ADC_7, adc3_set_attenuation(get_channel(TEMP_7_PIN), ADC_ATTEN_11db));
TERN_(HAS_HEATED_BED, adc1_set_attenuation(get_channel(TEMP_BED_PIN), ADC_ATTEN_11db));
TERN_(HAS_TEMP_CHAMBER, adc1_set_attenuation(get_channel(TEMP_CHAMBER_PIN), ADC_ATTEN_11db));
TERN_(HAS_TEMP_PROBE, adc1_set_attenuation(get_channel(TEMP_PROBE_PIN), ADC_ATTEN_11db));
TERN_(HAS_TEMP_COOLER, adc1_set_attenuation(get_channel(TEMP_COOLER_PIN), ADC_ATTEN_11db));
TERN_(HAS_TEMP_BOARD, adc1_set_attenuation(get_channel(TEMP_BOARD_PIN), ADC_ATTEN_11db));
TERN_(FILAMENT_WIDTH_SENSOR, adc1_set_attenuation(get_channel(FILWIDTH_PIN), ADC_ATTEN_11db));
TERN_(HAS_TEMP_ADC_BED, adc1_set_attenuation(get_channel(TEMP_BED_PIN), ADC_ATTEN_11db));
TERN_(HAS_TEMP_ADC_CHAMBER, adc1_set_attenuation(get_channel(TEMP_CHAMBER_PIN), ADC_ATTEN_11db));
TERN_(HAS_TEMP_ADC_PROBE, adc1_set_attenuation(get_channel(TEMP_PROBE_PIN), ADC_ATTEN_11db));
TERN_(HAS_TEMP_ADC_COOLER, adc1_set_attenuation(get_channel(TEMP_COOLER_PIN), ADC_ATTEN_11db));
TERN_(HAS_TEMP_ADC_BOARD, adc1_set_attenuation(get_channel(TEMP_BOARD_PIN), ADC_ATTEN_11db));
TERN_(HAS_FILWIDTH_ADC, adc1_set_attenuation(get_channel(FILWIDTH_PIN), ADC_ATTEN_11db));
TERN_(HAS_FILWIDTH2_ADC, adc1_set_attenuation(get_channel(FILWIDTH2_PIN), ADC_ATTEN_11db));
// Note that adc2 is shared with the WiFi module, which has higher priority, so the conversion may fail.
// That's why we're not setting it up here.
@@ -272,7 +271,8 @@ void MarlinHAL::adc_start(const pin_t pin) {
uint32_t mv;
esp_adc_cal_get_voltage((adc_channel_t)chan, &characteristics[attenuations[chan]], &mv);
adc_result = mv * isr_float_t(1023) / isr_float_t(ADC_REFERENCE_VOLTAGE) / isr_float_t(1000);
static constexpr uint32_t adc_divisor = uint32_t((ADC_REFERENCE_VOLTAGE) * 1000UL);
adc_result = (mv * 1023UL) / adc_divisor;
// Change the attenuation level based on the new reading
adc_atten_t atten;

View File

@@ -37,11 +37,11 @@
#include "i2s.h"
#if ENABLED(WIFISUPPORT)
#include "WebSocketSerial.h"
#include "wifi/WebSocketSerial.h"
#endif
#if ENABLED(ESP3D_WIFISUPPORT)
#include "esp3dlib.h"
#include <esp3dlib.h>
#endif
#include "FlushableHardwareSerial.h"
@@ -64,10 +64,10 @@
#define CRITICAL_SECTION_END() portEXIT_CRITICAL(&hal.spinlock)
#define HAL_CAN_SET_PWM_FREQ // This HAL supports PWM Frequency adjustment
#define PWM_FREQUENCY 1000u // Default PWM frequency when set_pwm_duty() is called without set_pwm_frequency()
#define PWM_RESOLUTION 10u // Default PWM bit resolution
#define CHANNEL_MAX_NUM 15u // max PWM channel # to allocate (7 to only use low speed, 15 to use low & high)
#define MAX_PWM_IOPIN 33u // hardware pwm pins < 34
#define PWM_FREQUENCY 1000U // Default PWM frequency when set_pwm_duty() is called without set_pwm_frequency()
#define PWM_RESOLUTION 10U // Default PWM bit resolution
#define CHANNEL_MAX_NUM 15U // max PWM channel # to allocate (7 to only use low speed, 15 to use low & high)
#define MAX_PWM_IOPIN 33U // hardware pwm pins < 34
#ifndef MAX_EXPANDER_BITS
#define MAX_EXPANDER_BITS 32 // I2S expander bit width (max 32)
#endif
@@ -76,7 +76,6 @@
// Types
// ------------------------
typedef double isr_float_t; // FPU ops are used for single-precision, so use double for ISRs.
typedef int16_t pin_t;
typedef struct pwm_pin {
@@ -165,8 +164,6 @@ int freeMemory();
#pragma GCC diagnostic pop
void _delay_ms(const int ms);
// ------------------------
// MarlinHAL Class
// ------------------------
@@ -194,9 +191,9 @@ public:
static void isr_on() { if (spinlock.owner != portMUX_FREE_VAL) portEXIT_CRITICAL(&spinlock); }
static void isr_off() { portENTER_CRITICAL(&spinlock); }
static void delay_ms(const int ms) { _delay_ms(ms); }
static void delay_ms(const int ms) { delay(ms); }
// Tasks, called from idle()
// Tasks, called from marlin.idle()
static void idletask();
// Reset

View File

@@ -35,7 +35,7 @@ Servo::Servo() {}
int8_t Servo::attach(const int inPin) {
if (inPin > 0) pin = inPin;
channel = get_pwm_channel(pin, 50u, 16u);
channel = get_pwm_channel(pin, 50U, 16U);
return channel; // -1 if no PWM avail.
}

View File

@@ -24,7 +24,7 @@
/**
* Description: Tone function for ESP32
* Derived from https://forum.arduino.cc/index.php?topic=136500.msg2903012#msg2903012
* Derived from https://forum.arduino.cc/t/arduino-due-and-tone/133302/13
*/
#ifdef ARDUINO_ARCH_ESP32

View File

@@ -145,7 +145,7 @@ static void IRAM_ATTR i2s_intr_handler_default(void *arg) {
void stepperTask(void *parameter) {
uint32_t nextMainISR = 0;
#if ENABLED(LIN_ADVANCE)
uint32_t nextAdvanceISR = Stepper::LA_ADV_NEVER;
uint32_t nextAdvanceISR = stepper.LA_ADV_NEVER;
#endif
for (;;) {
@@ -156,38 +156,43 @@ void stepperTask(void *parameter) {
while (dma.rw_pos < DMA_SAMPLE_COUNT) {
#if ENABLED(FT_MOTION)
if (using_ftMotion) {
if (using_ftMotion) {
#if ENABLED(FT_MOTION)
if (!nextMainISR) stepper.ftMotion_stepper();
nextMainISR = 0;
}
#endif
#endif
}
else {
if (!using_ftMotion) {
if (!nextMainISR) {
Stepper::pulse_phase_isr();
nextMainISR = Stepper::block_phase_isr();
}
#if ENABLED(LIN_ADVANCE)
else if (!nextAdvanceISR) {
Stepper::advance_isr();
nextAdvanceISR = Stepper::la_interval;
#if HAS_STANDARD_MOTION
if (!nextMainISR) {
stepper.pulse_phase_isr();
nextMainISR = stepper.block_phase_isr();
}
#endif
else
i2s_push_sample();
#if ENABLED(LIN_ADVANCE)
else if (!nextAdvanceISR) {
stepper.advance_isr();
nextAdvanceISR = stepper.la_interval;
}
#endif
else
i2s_push_sample();
nextMainISR--;
nextMainISR--;
#if ENABLED(LIN_ADVANCE)
if (nextAdvanceISR == Stepper::LA_ADV_NEVER)
nextAdvanceISR = Stepper::la_interval;
#if ENABLED(LIN_ADVANCE)
if (nextAdvanceISR == stepper.LA_ADV_NEVER)
nextAdvanceISR = stepper.la_interval;
if (nextAdvanceISR && nextAdvanceISR != stepper.LA_ADV_NEVER)
nextAdvanceISR--;
#endif
#endif // HAS_STANDARD_MOTION
if (nextAdvanceISR && nextAdvanceISR != Stepper::LA_ADV_NEVER)
nextAdvanceISR--;
#endif
}
}
}

View File

@@ -57,7 +57,7 @@
#endif
#if ALL(I2S_STEPPER_STREAM, LIN_ADVANCE) && DISABLED(EXPERIMENTAL_I2S_LA)
#error "I2S stream is currently incompatible with LIN_ADVANCE."
#error "I2S stream is currently incompatible with LIN_ADVANCE. Enable EXPERIMENTAL_I2S_LA to proceed anyway."
#endif
#if ALL(I2S_STEPPER_STREAM, PRINTCOUNTER) && PRINTCOUNTER_SAVE_INTERVAL > 0 && DISABLED(PRINTCOUNTER_SYNC)

View File

@@ -21,7 +21,16 @@
*/
#pragma once
#define SD_SS_PIN SDSS
#define SD_SCK_PIN 18
#define SD_MISO_PIN 19
#define SD_MOSI_PIN 23
#define PIN_SPI_SCK 18
#define PIN_SPI_MISO 19
#define PIN_SPI_MOSI 23
#ifndef SD_SCK_PIN
#define SD_SCK_PIN PIN_SPI_SCK
#endif
#ifndef SD_MISO_PIN
#define SD_MISO_PIN PIN_SPI_MISO
#endif
#ifndef SD_MOSI_PIN
#define SD_MOSI_PIN PIN_SPI_MOSI
#endif

View File

@@ -78,8 +78,8 @@ void IRAM_ATTR timer_isr(void *para) {
/**
* Enable and initialize the timer
* @param timer_num timer number to initialize
* @param frequency frequency of the timer
* @param timer_num timer number to initialize
* @param frequency frequency of the timer
*/
void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) {
const tTimerConfig timer = timer_config[timer_num];

View File

@@ -30,41 +30,45 @@
#define FORCE_INLINE __attribute__((always_inline)) inline
typedef uint64_t hal_timer_t;
#define HAL_TIMER_TYPE_MAX 0xFFFFFFFFFFFFFFFFULL
#define HAL_TIMER_TYPE_MAX hal_timer_t(UINT64_MAX)
#ifndef MF_TIMER_STEP
#define MF_TIMER_STEP 0 // Timer Index for Stepper
#endif
#ifndef MF_TIMER_PULSE
#define MF_TIMER_PULSE MF_TIMER_STEP
#define MF_TIMER_PULSE MF_TIMER_STEP // Timer Index for Pulse interval
#endif
#ifndef MF_TIMER_TEMP
#define MF_TIMER_TEMP 1 // Timer Index for Temperature
#endif
#ifndef MF_TIMER_PWM
#define MF_TIMER_PWM 2 // index of timer to use for PWM outputs
#define MF_TIMER_PWM 2 // Timer Index for PWM outputs
#endif
#ifndef MF_TIMER_TONE
#define MF_TIMER_TONE 3 // index of timer for beeper tones
#define MF_TIMER_TONE 3 // Timer Index for beeper tones
#endif
#define HAL_TIMER_RATE APB_CLK_FREQ // frequency of timer peripherals
#define HAL_TIMER_RATE APB_CLK_FREQ // Frequency of timer peripherals
#define TEMP_TIMER_PRESCALE 1000 // Prescaler for setting Temp Timer, 72Khz
#define TEMP_TIMER_FREQUENCY 1000 // (Hz) Temperature ISR frequency
#if ENABLED(I2S_STEPPER_STREAM)
#define STEPPER_TIMER_PRESCALE 1
#define STEPPER_TIMER_RATE 250000 // 250khz, 4µs pulses of i2s word clock
#define STEPPER_TIMER_RATE 250'000 // 250khz, 4µs pulses of i2s word clock
#define STEPPER_TIMER_TICKS_PER_US 0.25 // (MHz) Stepper Timer ticks per µs
#else
#define STEPPER_TIMER_PRESCALE 40
#define STEPPER_TIMER_RATE ((HAL_TIMER_RATE) / (STEPPER_TIMER_PRESCALE)) // frequency of stepper timer, 2MHz
#define STEPPER_TIMER_RATE ((HAL_TIMER_RATE) / (STEPPER_TIMER_PRESCALE)) // (Hz) Frequency of Stepper Timer ISR, 2MHz
#define STEPPER_TIMER_TICKS_PER_US ((STEPPER_TIMER_RATE) / 1'000'000UL) // (MHz) Stepper Timer ticks per µs
#endif
#define STEPPER_TIMER_TICKS_PER_US ((STEPPER_TIMER_RATE) / 1000000) // stepper timer ticks per µs
#define STEP_TIMER_MIN_INTERVAL 8 // minimum time in µs between stepper interrupts
#define TONE_TIMER_PRESCALE 1000 // Arbitrary value, no idea what i'm doing here
#define PULSE_TIMER_RATE STEPPER_TIMER_RATE // (Hz) Frequency of Pulse Timer
#define PULSE_TIMER_PRESCALE STEPPER_TIMER_PRESCALE
#define TEMP_TIMER_PRESCALE 1000 // prescaler for setting Temp timer, 72Khz
#define TEMP_TIMER_FREQUENCY 1000 // temperature interrupt frequency
#define TONE_TIMER_PRESCALE 1000 // Arbitrary value, no idea what i'm doing here
#define PWM_TIMER_PRESCALE 10
#if ENABLED(FAST_PWM_FAN)
@@ -74,13 +78,9 @@ typedef uint64_t hal_timer_t;
#endif
#define MAX_PWM_PINS 32 // Number of PWM pin-slots
#define PULSE_TIMER_RATE STEPPER_TIMER_RATE // frequency of pulse timer
#define PULSE_TIMER_PRESCALE STEPPER_TIMER_PRESCALE
#define PULSE_TIMER_TICKS_PER_US STEPPER_TIMER_TICKS_PER_US
#define ENABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_enable_interrupt(MF_TIMER_STEP)
#define ENABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_enable_interrupt(MF_TIMER_STEP)
#define DISABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_disable_interrupt(MF_TIMER_STEP)
#define STEPPER_ISR_ENABLED() HAL_timer_interrupt_enabled(MF_TIMER_STEP)
#define STEPPER_ISR_ENABLED() HAL_timer_interrupt_enabled(MF_TIMER_STEP)
#define ENABLE_TEMPERATURE_INTERRUPT() HAL_timer_enable_interrupt(MF_TIMER_TEMP)
#define DISABLE_TEMPERATURE_INTERRUPT() HAL_timer_disable_interrupt(MF_TIMER_TEMP)
@@ -135,5 +135,5 @@ void HAL_timer_enable_interrupt(const uint8_t timer_num);
void HAL_timer_disable_interrupt(const uint8_t timer_num);
bool HAL_timer_interrupt_enabled(const uint8_t timer_num);
#define HAL_timer_isr_prologue(T) NOOP
#define HAL_timer_isr_epilogue(T) NOOP
inline void HAL_timer_isr_prologue(const uint8_t) {}
inline void HAL_timer_isr_epilogue(const uint8_t) {}

View File

@@ -35,7 +35,7 @@
#if HAS_MEDIA
#include "../../sd/cardreader.h"
#if ENABLED(ESP3D_WIFISUPPORT)
#include "sd_ESP32.h"
#include <sd_ESP32.h>
#endif
#endif

View File

@@ -21,7 +21,7 @@
*/
#ifdef ARDUINO_ARCH_ESP32
#include "../../inc/MarlinConfigPre.h"
#include "../../../inc/MarlinConfigPre.h"
#if ENABLED(WIFISUPPORT)

View File

@@ -21,8 +21,8 @@
*/
#pragma once
#include "../../inc/MarlinConfig.h"
#include "../../core/serial_hook.h"
#include "../../../inc/MarlinConfig.h"
#include "../../../core/serial_hook.h"
#include <Stream.h>

View File

@@ -27,7 +27,7 @@
#undef ENABLED
#undef DISABLED
#include "../../inc/MarlinConfigPre.h"
#include "../../../inc/MarlinConfigPre.h"
#if ALL(WIFISUPPORT, OTASUPPORT)

View File

@@ -21,11 +21,11 @@
*/
#ifdef ARDUINO_ARCH_ESP32
#include "../../inc/MarlinConfigPre.h"
#include "../../../inc/MarlinConfigPre.h"
#if ALL(WIFISUPPORT, WEBSUPPORT)
#include "../../core/serial.h"
#include "../../../core/serial.h"
#include <FS.h>
#include <SPIFFS.h>

View File

@@ -21,11 +21,11 @@
*/
#ifdef ARDUINO_ARCH_ESP32
#include "../../inc/MarlinConfigPre.h"
#include "../../../inc/MarlinConfigPre.h"
#if ALL(WIFISUPPORT, WEBSUPPORT)
#include "../../inc/MarlinConfig.h"
#include "../../../inc/MarlinConfig.h"
#undef DISABLED // esp32-hal-gpio.h
#include <SPIFFS.h>

View File

@@ -21,11 +21,11 @@
*/
#ifdef ARDUINO_ARCH_ESP32
#include "../../inc/MarlinConfigPre.h"
#include "../../../inc/MarlinConfigPre.h"
#if ENABLED(WIFISUPPORT)
#include "../../core/serial.h"
#include "../../../core/serial.h"
#include <WiFi.h>
#include <ESPmDNS.h>

View File

@@ -0,0 +1,123 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2025 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#include "../platforms.h"
#ifdef ARDUINO_ARCH_MFL
#include "../../inc/MarlinConfig.h"
#include "../shared/Delay.h"
uint16_t MarlinHAL::adc_result;
#if ENABLED(POSTMORTEM_DEBUGGING)
extern void install_min_serial();
#endif
#if ENABLED(MARLIN_DEV_MODE)
// Dump the clock frequencies of the system, AHB, APB1, APB2, and F_CPU.
static inline void HAL_clock_frequencies_dump() {
auto& rcuInstance = rcu::RCU::get_instance();
uint32_t freq = rcuInstance.get_clock_frequency(rcu::Clock_Frequency::CK_SYS);
SERIAL_ECHOPGM("\nSYSTEM_CLOCK=", freq);
freq = rcuInstance.get_clock_frequency(rcu::Clock_Frequency::CK_AHB);
SERIAL_ECHOPGM("\nABH_CLOCK=", freq);
freq = rcuInstance.get_clock_frequency(rcu::Clock_Frequency::CK_APB1);
SERIAL_ECHOPGM("\nAPB1_CLOCK=", freq);
freq = rcuInstance.get_clock_frequency(rcu::Clock_Frequency::CK_APB2);
SERIAL_ECHOPGM("\nAPB2_CLOCK=", freq,
"\nF_CPU=", F_CPU);
// Done
SERIAL_ECHOPGM("\n--\n");
}
#endif // MARLIN_DEV_MODE
// Initializes the Marlin HAL
void MarlinHAL::init() {
// Ensure F_CPU is a constant expression.
// If the compiler breaks here, it means that delay code that should compute at compile time will not work.
// So better safe than sorry here.
constexpr unsigned int cpuFreq = F_CPU;
UNUSED(cpuFreq);
#if PIN_EXISTS(LED)
OUT_WRITE(LED_PIN, LOW);
#endif
SetTimerInterruptPriorities();
// Print clock frequencies to host serial
TERN_(MARLIN_DEV_MODE, HAL_clock_frequencies_dump());
// Register min serial
TERN_(POSTMORTEM_DEBUGGING, install_min_serial());
}
// Returns the reset source based on the flags set in the RCU module
uint8_t MarlinHAL::get_reset_source() {
return
(RCU_I.get_flag(rcu::Status_Flags::FLAG_FWDGTRST)) ? RST_WATCHDOG :
(RCU_I.get_flag(rcu::Status_Flags::FLAG_SWRST)) ? RST_SOFTWARE :
(RCU_I.get_flag(rcu::Status_Flags::FLAG_EPRST)) ? RST_EXTERNAL :
(RCU_I.get_flag(rcu::Status_Flags::FLAG_PORRST)) ? RST_POWER_ON :
(RCU_I.get_flag(rcu::Status_Flags::FLAG_LPRST)) ? RST_BROWN_OUT :
0;
}
// Returns the amount of free memory available in bytes
int MarlinHAL::freeMemory() {
volatile char top;
return &top - reinterpret_cast<char*>(_sbrk(0));
}
// Watchdog Timer
#if ENABLED(USE_WATCHDOG)
#define WDT_TIMEOUT_US TERN(WATCHDOG_DURATION_8S, 8000000, 4000000) // 4 or 8 second timeout
#include <FWatchdogTimer.h>
FWatchdogTimer& watchdogTimer = FWatchdogTimer::get_instance();
// Initializes the watchdog timer
void MarlinHAL::watchdog_init() {
IF_DISABLED(DISABLE_WATCHDOG_INIT, watchdogTimer.begin(WDT_TIMEOUT_US));
}
// Refreshes the watchdog timer to prevent system reset
void MarlinHAL::watchdog_refresh() {
watchdogTimer.reload();
#if DISABLED(PINS_DEBUGGING) && PIN_EXISTS(LED)
TOGGLE(LED_PIN); // Heartbeat indicator
#endif
}
#endif
extern "C" {
extern unsigned int _ebss; // End of bss section
}
// Resets the system to initiate a firmware flash.
WEAK void flashFirmware(const int16_t) {
hal.reboot();
}
#endif // ARDUINO_ARCH_MFL

View File

@@ -0,0 +1,159 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2025 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
#define CPU_32_BIT
#include "../../core/macros.h"
#include "../shared/Marduino.h"
#include "../shared/math_32bit.h"
#include "../shared/HAL_SPI.h"
#include "temp_soc.h"
#include "fastio.h"
#include "Servo.h"
#include "../../inc/MarlinConfigPre.h"
#include <stdint.h>
#include <GPIO.hpp>
#include <AFIO.hpp>
// Default graphical display delays
#define CPU_ST7920_DELAY_1 300
#define CPU_ST7920_DELAY_2 40
#define CPU_ST7920_DELAY_3 340
// Serial Ports
#include "MarlinSerial.h"
// Interrupts
#define CRITICAL_SECTION_START() const bool irqon = !__get_PRIMASK(); __disable_irq()
#define CRITICAL_SECTION_END() if (irqon) __enable_irq()
#define cli() __disable_irq()
#define sei() __enable_irq()
// Alias of __bss_end__
#define __bss_end __bss_end__
// Types
typedef uint8_t pin_t; // Parity with mfl platform
// Servo
class libServo;
typedef libServo hal_servo_t;
#define PAUSE_SERVO_OUTPUT() libServo::pause_all_servos()
#define RESUME_SERVO_OUTPUT() libServo::resume_all_servos()
// Debugging
#define JTAG_DISABLE() AFIO_I.set_remap(gpio::Pin_Remap_Select::SWJ_DP_ONLY_REMAP)
#define JTAGSWD_DISABLE() AFIO_I.set_remap(gpio::Pin_Remap_Select::SWJ_ALL_DISABLED_REMAP)
#define JTAGSWD_RESET() AFIO_I.set_remap(gpio::Pin_Remap_Select::FULL_SWJ_REMAP)
// ADC
#ifdef ADC_RESOLUTION
#define HAL_ADC_RESOLUTION ADC_RESOLUTION
#else
#define HAL_ADC_RESOLUTION 12
#endif
#define HAL_ADC_VREF_MV 3300
// Disable Marlin's software oversampling.
// The MFL framework uses 16x hardware oversampling by default
#ifdef GD32F303RE
#define HAL_ADC_FILTERED
#endif
#define GET_PIN_MAP_PIN(index) index
#define GET_PIN_MAP_INDEX(pin) pin
#define PARSED_PIN_INDEX(code, dval) parser.intval(code, dval)
#ifndef PLATFORM_M997_SUPPORT
#define PLATFORM_M997_SUPPORT
#endif
void flashFirmware(const int16_t);
#define HAL_CAN_SET_PWM_FREQ // This HAL supports PWM Frequency adjustment
extern "C" char* _sbrk(int incr);
extern "C" char* dtostrf(double val, signed char width, unsigned char prec, char* sout);
// MarlinHAL Class
class MarlinHAL {
public:
// Before setup()
MarlinHAL() = default;
// Watchdog
static void watchdog_init() IF_DISABLED(USE_WATCHDOG, {});
static void watchdog_refresh() IF_DISABLED(USE_WATCHDOG, {});
static void init(); // called early in setup()
static void init_board() {} // called less early in setup()
static void reboot() { NVIC_SystemReset(); } // restart the firmware from 0x0
// Interrupts
static bool isr_state() { return !__get_PRIMASK(); }
static void isr_on() { sei(); }
static void isr_off() { cli(); }
static void delay_ms(const int ms) { delay(ms); }
// Tasks called from idle()
static void idletask() {}
// Reset
static uint8_t get_reset_source();
static void clear_reset_source() { RCU_I.clear_all_reset_flags(); }
// Free SRAM
static int freeMemory();
// ADC methods
static uint16_t adc_result;
// Called by Temperature::init once at startup
static void adc_init() { analogReadResolution(HAL_ADC_RESOLUTION); }
// Called by Temperature::init for each sensor at startup
static void adc_enable(const pin_t pin) { pinMode(pin, INPUT); }
// Called from Temperature::isr to start ADC sampling on the given pin
static void adc_start(const pin_t pin) { adc_result = static_cast<uint16_t>(analogRead(pin)); }
// Check if ADC is ready for reading
static bool adc_ready() { return true; }
// Current value of the ADC register
static uint16_t adc_value() { return adc_result; }
// Set the PWM duty cycle for the pin to the given value.
// Optionally invert the duty cycle [default = false]
// Optionally change the maximum size of the provided value to enable finer PWM duty control [default = 255]
static void set_pwm_duty(const pin_t pin, const uint16_t value, const uint16_t scale = 255U, const bool invert = false);
// Set the frequency of the timer for the given pin.
// All Timer PWM pins run at the same frequency.
static void set_pwm_frequency(const pin_t pin, const uint16_t f_desired);
};

View File

@@ -1,6 +1,6 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2024 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
* Copyright (c) 2025 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
@@ -21,10 +21,6 @@
*/
#pragma once
/**
* strlen_cx.h
*/
#include <SPI.h>
constexpr inline int strlen_constexpr(const char *str) {
return *str ? 1 + strlen_constexpr(str + 1) : 0;
}
using MarlinSPI = SPIClass;

View File

@@ -0,0 +1,97 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2025 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#include "../platforms.h"
#ifdef ARDUINO_ARCH_MFL
#include "../../inc/MarlinConfig.h"
#include "MarlinSerial.h"
#if ENABLED(EMERGENCY_PARSER)
#include "../../feature/e_parser.h"
#endif
using namespace arduino;
auto MarlinSerial::get_instance(usart::USART_Base Base, pin_size_t rxPin, pin_size_t txPin) -> MarlinSerial& {
auto& serial = UsartSerial::get_instance(Base, rxPin, txPin);
return *reinterpret_cast<MarlinSerial*>(&serial);
}
#if USING_HW_SERIAL0
MSerialT MSerial0(true, MarlinSerial::get_instance(usart::USART_Base::USART0_BASE, NO_PIN, NO_PIN));
#endif
#if USING_HW_SERIAL1
MSerialT MSerial1(true, MarlinSerial::get_instance(usart::USART_Base::USART1_BASE, NO_PIN, NO_PIN));
#endif
#if USING_HW_SERIAL2
MSerialT MSerial2(true, MarlinSerial::get_instance(usart::USART_Base::USART2_BASE, NO_PIN, NO_PIN));
#endif
#if USING_HW_SERIAL3
MSerialT MSerial3(true, MarlinSerial::get_instance(usart::USART_Base::UART3_BASE, NO_PIN, NO_PIN));
#endif
#if USING_HW_SERIAL4
MSerialT MSerial4(true, MarlinSerial::get_instance(usart::USART_Base::UART4_BASE, NO_PIN, NO_PIN));
#endif
#if ENABLED(EMERGENCY_PARSER)
// This callback needs to access the specific MarlinSerial instance
// We'll use a static pointer to track the current instance
static MarlinSerial* current_serial_instance = nullptr;
static void emergency_callback() {
if (!current_serial_instance) return;
const auto last_data = current_serial_instance->get_last_data();
emergency_parser.update(current_serial_instance->emergency_state, last_data);
}
void MarlinSerial::register_emergency_callback(void (*callback)()) {
usart_.register_interrupt_callback(usart::Interrupt_Type::INTR_RBNEIE, callback);
}
#endif
void MarlinSerial::begin(unsigned long baudrate, uint16_t config) {
UsartSerial::begin(baudrate, config, ENABLED(SERIAL_DMA));
#if ENABLED(EMERGENCY_PARSER) && DISABLED(SERIAL_DMA)
current_serial_instance = this;
register_emergency_callback(emergency_callback);
#endif
}
void MarlinSerial::updateRxDmaBuffer() {
#if ENABLED(EMERGENCY_PARSER)
// Get the number of bytes available in the receive buffer
const size_t available_bytes = usart_.available_for_read(true);
// Process only the available data
for (size_t i = 0; i < available_bytes; ++i) {
uint8_t data;
if (usart_.read_rx_buffer(data))
emergency_parser.update(emergency_state, data);
}
#endif
// Call the base class implementation to handle any additional updates
UsartSerial::updateRxDmaBuffer();
}
#endif // ARDUINO_ARCH_MFL

View File

@@ -0,0 +1,75 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2025 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
#include "../../inc/MarlinConfigPre.h"
#if ENABLED(EMERGENCY_PARSER)
#include "../../feature/e_parser.h"
#endif
#include <UsartSerial.hpp>
#include "../../core/serial_hook.h"
#define SERIAL_INDEX_MIN 0
#define SERIAL_INDEX_MAX 4
#include "../shared/serial_ports.h"
#if defined(LCD_SERIAL_PORT) && ANY(HAS_DGUS_LCD, EXTENSIBLE_UI)
#define LCD_SERIAL_TX_BUFFER_FREE() LCD_SERIAL.availableForWrite()
#endif
using namespace arduino;
struct MarlinSerial : public UsartSerial {
static auto get_instance(usart::USART_Base Base, pin_size_t rxPin = NO_PIN, pin_size_t txPin = NO_PIN) -> MarlinSerial&;
void begin(unsigned long baudrate, uint16_t config);
inline void begin(unsigned long baudrate) { begin(baudrate, SERIAL_8N1); }
void updateRxDmaBuffer();
#if DISABLED(SERIAL_DMA)
FORCE_INLINE static uint8_t buffer_overruns() { return 0; }
#endif
#if ENABLED(EMERGENCY_PARSER)
EmergencyParser::State emergency_state;
// Accessor method to get the last received byte
auto get_last_data() -> uint8_t { return usart_.get_last_data(); }
// Register the emergency callback
void register_emergency_callback(void (*callback)());
#endif
protected:
using UsartSerial::UsartSerial;
};
typedef Serial1Class<MarlinSerial> MSerialT;
extern MSerialT MSerial0;
extern MSerialT MSerial1;
extern MSerialT MSerial2;
extern MSerialT MSerial3;
extern MSerialT MSerial4;

View File

@@ -0,0 +1,163 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2025 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#include "../platforms.h"
#ifdef ARDUINO_ARCH_MFL
#include "../../inc/MarlinConfigPre.h"
#if ENABLED(POSTMORTEM_DEBUGGING)
#include "../shared/MinSerial.h"
// Base addresses for USART peripherals
static constexpr uintptr_t USART_base[] = {
0x40013800, // USART0
0x40004400, // USART1
0x40004800, // USART2
0x40004C00, // UART3
0x40005000 // UART4
};
// Register offsets
static constexpr uint32_t STAT0_OFFSET = 0x00U;
static constexpr uint32_t DATA_OFFSET = 0x04U;
static constexpr uint32_t BAUD_OFFSET = 0x08U;
static constexpr uint32_t CTL0_OFFSET = 0x0CU;
static constexpr uint32_t CTL1_OFFSET = 0x14U;
// Bit positions
static constexpr uint32_t TBE_BIT = 7;
static constexpr uint32_t TEN_BIT = 3;
static constexpr uint32_t UEN_BIT = 13;
// NVIC interrupt numbers for USART
static constexpr int nvicUART[] = { 37, 38, 39, 52, 53 };
// RCU PCLK values for USART
static constexpr rcu::RCU_PCLK clockRegs[] = {
rcu::RCU_PCLK::PCLK_USART0,
rcu::RCU_PCLK::PCLK_USART1,
rcu::RCU_PCLK::PCLK_USART2,
rcu::RCU_PCLK::PCLK_UART3,
rcu::RCU_PCLK::PCLK_UART4
};
// Memory barrier instructions
#define isb() __asm__ __volatile__ ("isb" : : : "memory")
#define dsb() __asm__ __volatile__ ("dsb" : : : "memory")
#define sw_barrier() __asm__ volatile("" : : : "memory")
// Direct register access macros
#define USART_REG(offset) (*(volatile uint32_t*)(USART_base[SERIAL_PORT] + (offset)))
#define USART_STAT0 USART_REG(STAT0_OFFSET)
#define USART_DATA USART_REG(DATA_OFFSET)
#define USART_BAUD USART_REG(BAUD_OFFSET)
#define USART_CTL0 USART_REG(CTL0_OFFSET)
#define USART_CTL1 USART_REG(CTL1_OFFSET)
// Bit manipulation macros
#define READ_BIT(reg, bit) (((reg) >> (bit)) & 1U)
#define SET_BIT(reg, bit) ((reg) |= (1U << (bit)))
#define CLEAR_BIT(reg, bit) ((reg) &= ~(1U << (bit)))
// Initializes the MinSerial interface.
// This function sets up the USART interface for serial communication.
// If the selected serial port is not a hardware port, it disables the severe error reporting feature.
static void MinSerialBegin() {
#if !WITHIN(SERIAL_PORT, 0, 4)
#warning "Using POSTMORTEM_DEBUGGING requires a physical U(S)ART hardware in case of severe error."
#warning "Disabling the severe error reporting feature currently because the used serial port is not a HW port."
#else
int nvicIndex = nvicUART[SERIAL_PORT];
// NVIC base address for interrupt disable
struct NVICMin {
volatile uint32_t ISER[32];
volatile uint32_t ICER[32];
};
NVICMin *nvicBase = (NVICMin*)0xE000E100;
SBI32(nvicBase->ICER[nvicIndex >> 5], nvicIndex & 0x1F);
// We require memory barriers to properly disable interrupts
// (https://dzone.com/articles/nvic-disabling-interrupts-on-arm-cortex-m-and-the)
dsb();
isb();
// Get the RCU PCLK for this USART
rcu::RCU_PCLK pclk = clockRegs[SERIAL_PORT];
// Disable then enable usart peripheral clocks
rcu::RCU_DEVICE.set_pclk_enable(pclk, false);
rcu::RCU_DEVICE.set_pclk_enable(pclk, true);
// Save current baudrate
uint32_t baudrate = USART_BAUD;
// Reset USART control registers
USART_CTL0 = 0;
USART_CTL1 = 0; // 1 stop bit
// Restore baudrate
USART_BAUD = baudrate;
// Enable transmitter and USART (8 bits, no parity, 1 stop bit)
SET_BIT(USART_CTL0, TEN_BIT);
SET_BIT(USART_CTL0, UEN_BIT);
#endif
}
// Writes a single character to the serial port.
static void MinSerialWrite(char c) {
#if WITHIN(SERIAL_PORT, 0, 4)
// Wait until transmit buffer is empty
while (!READ_BIT(USART_STAT0, TBE_BIT)) {
hal.watchdog_refresh();
sw_barrier();
}
// Write character to data register
USART_DATA = c;
#endif
}
// Installs the minimum serial interface.
// Sets the HAL_min_serial_init and HAL_min_serial_out function pointers to MinSerialBegin and MinSerialWrite respectively.
void install_min_serial() {
HAL_min_serial_init = &MinSerialBegin;
HAL_min_serial_out = &MinSerialWrite;
}
extern "C" {
// A low-level assembly-based jump handler.
// Unconditionally branches to the CommonHandler_ASM function.
__attribute__((naked, aligned(4))) void JumpHandler_ASM() {
__asm__ __volatile__ ("b CommonHandler_ASM\n");
}
void __attribute__((naked, alias("JumpHandler_ASM"), nothrow)) HardFault_Handler();
void __attribute__((naked, alias("JumpHandler_ASM"), nothrow)) BusFault_Handler();
void __attribute__((naked, alias("JumpHandler_ASM"), nothrow)) UsageFault_Handler();
void __attribute__((naked, alias("JumpHandler_ASM"), nothrow)) MemManage_Handler();
void __attribute__((naked, alias("JumpHandler_ASM"), nothrow)) NMI_Handler();
}
#endif // POSTMORTEM_DEBUGGING
#endif // ARDUINO_ARCH_MFL

View File

@@ -0,0 +1,9 @@
# Generic GD32 HAL based on the MFL Arduino Core
This HAL is eventually intended to act as the generic HAL for all GD32 chips using the MFL library.
Currently it supports:
- GD32F303RET6
Targeting the official [MFL Arduino Core](https://github.com/bnmguy/ArduinoCore_MFL).

View File

@@ -0,0 +1,125 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2025 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#include "../platforms.h"
#ifdef ARDUINO_ARCH_MFL
#include "../../inc/MarlinConfig.h"
#if HAS_SERVOS
#include "Servo.h"
static uint_fast8_t servoCount = 0;
static libServo* servos[NUM_SERVOS] = {0};
constexpr millis_t servoDelay[] = SERVO_DELAY;
static_assert(COUNT(servoDelay) == NUM_SERVOS, "SERVO_DELAY must be an array NUM_SERVOS long.");
// Initialize to the default timer priority. This will be overridden by a call from timers.cpp.
// This allows all timer interrupt priorities to be managed from a single location in the HAL.
static uint32_t servo_interrupt_priority = NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 12, 0);
// This must be called after the MFL Servo class has initialized the timer.
// To be safe this is currently called after every call to attach().
static void fixServoTimerInterruptPriority() {
auto& servoTimerIdx = GeneralTimer::get_instance(static_cast<timer::TIMER_Base>(TIMER_SERVO));
NVIC_SetPriority(servoTimerIdx.getTimerUpIRQ(), servo_interrupt_priority);
}
// Default constructor for libServo class.
// Initializes the servo delay, pause state, and pause value.
// Registers the servo instance in the servos array.
libServo::libServo() :
delay(servoDelay[servoCount]),
was_attached_before_pause(false),
value_before_pause(0)
{
servos[servoCount++] = this;
}
// Attaches a servo to a specified pin.
int8_t libServo::attach(const int pin) {
if (servoCount >= MAX_SERVOS) return -1;
if (pin > 0) servoPin = pin;
auto result = mflServo.attach(servoPin);
fixServoTimerInterruptPriority();
return result;
}
// Attaches a servo to a specified pin with minimum and maximum pulse widths.
int8_t libServo::attach(const int pin, const int min, const int max) {
if (servoCount >= MAX_SERVOS) return -1;
if (pin > 0) servoPin = pin;
auto result = mflServo.attach(servoPin, min, max);
fixServoTimerInterruptPriority();
return result;
}
// Moves the servo to a specified position.
void libServo::move(const int value) {
if (attach(0) >= 0) {
mflServo.write(value);
safe_delay(delay);
TERN_(DEACTIVATE_SERVOS_AFTER_MOVE, detach());
}
}
// Pause the servo by detaching it and storing its current state.
void libServo::pause() {
was_attached_before_pause = mflServo.attached();
if (was_attached_before_pause) {
value_before_pause = mflServo.read();
mflServo.detach();
}
}
// Resume a previously paused servo.
// If the servo was attached before the pause, this function re-attaches
// the servo and moves it to the position it was in before the pause.
void libServo::resume() {
if (was_attached_before_pause) {
attach();
move(value_before_pause);
}
}
// Pause all servos by stopping their timers.
void libServo::pause_all_servos() {
for (auto& servo : servos)
if (servo) servo->pause();
}
// Resume all paused servos by starting their timers.
void libServo::resume_all_servos() {
for (auto& servo : servos)
if (servo) servo->resume();
}
// Set the interrupt priority for the servo.
// @param preemptPriority The preempt priority level.
// @param subPriority The sub priority level.
void libServo::setInterruptPriority(uint32_t preemptPriority, uint32_t subPriority) {
servo_interrupt_priority = NVIC_EncodePriority(NVIC_GetPriorityGrouping(), preemptPriority, subPriority);
}
#endif // HAS_SERVOS
#endif // ARDUINO_ARCH_MFL

View File

@@ -0,0 +1,56 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2025 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
#include <Servo.h>
#include "../../core/millis_t.h"
// Inherit and expand on the official library
class libServo {
public:
libServo();
int8_t attach(const int pin = 0); // pin == 0 uses value from previous call
int8_t attach(const int pin, const int min, const int max);
void detach() { mflServo.detach(); }
int read() { return mflServo.read(); }
void move(const int value);
void pause();
void resume();
static void pause_all_servos();
static void resume_all_servos();
static void setInterruptPriority(uint32_t preemptPriority, uint32_t subPriority);
private:
Servo mflServo;
int servoPin = 0;
millis_t delay = 0;
bool was_attached_before_pause;
int value_before_pause;
};

View File

@@ -0,0 +1,129 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2025 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm / Ryan Power
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#ifdef ARDUINO_ARCH_MFL
#include "../../../inc/MarlinConfig.h"
#if ALL(HAS_MARLINUI_U8GLIB, FORCE_SOFT_SPI)
#include <U8glib-HAL.h>
#include "../../shared/HAL_SPI.h"
#define nop asm volatile ("\tnop\n")
static inline uint8_t swSpiTransfer_mode_0(uint8_t b) {
for (uint8_t i = 0; i < 8; ++i) {
const uint8_t state = (b & 0x80) ? HIGH : LOW;
WRITE(DOGLCD_SCK, HIGH);
WRITE(DOGLCD_MOSI, state);
b <<= 1;
WRITE(DOGLCD_SCK, LOW);
}
return b;
}
static inline uint8_t swSpiTransfer_mode_3(uint8_t b) {
for (uint8_t i = 0; i < 8; ++i) {
const uint8_t state = (b & 0x80) ? HIGH : LOW;
WRITE(DOGLCD_SCK, LOW);
WRITE(DOGLCD_MOSI, state);
b <<= 1;
WRITE(DOGLCD_SCK, HIGH);
}
return b;
}
static void u8g_sw_spi_shift_out(uint8_t val) {
#if U8G_SPI_USE_MODE_3
swSpiTransfer_mode_3(val);
#else
swSpiTransfer_mode_0(val);
#endif
}
static void swSpiInit() {
#if PIN_EXISTS(LCD_RESET)
SET_OUTPUT(LCD_RESET_PIN);
#endif
SET_OUTPUT(DOGLCD_A0);
OUT_WRITE(DOGLCD_SCK, LOW);
OUT_WRITE(DOGLCD_MOSI, LOW);
OUT_WRITE(DOGLCD_CS, HIGH);
}
uint8_t u8g_com_HAL_MFL_sw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr) {
switch (msg) {
case U8G_COM_MSG_INIT:
swSpiInit();
break;
case U8G_COM_MSG_STOP:
break;
case U8G_COM_MSG_RESET:
#if PIN_EXISTS(LCD_RESET)
WRITE(LCD_RESET_PIN, arg_val);
#endif
break;
case U8G_COM_MSG_CHIP_SELECT:
#if U8G_SPI_USE_MODE_3 // This LCD SPI is running mode 3 while SD card is running mode 0
if (arg_val) { // SCK idle state needs to be set to the proper idle state before
// the next chip select goes active
WRITE(DOGLCD_SCK, HIGH); // Set SCK to mode 3 idle state before CS goes active
WRITE(DOGLCD_CS, LOW);
nop; // Hold SCK high for a few ns
nop;
}
else {
WRITE(DOGLCD_CS, HIGH);
WRITE(DOGLCD_SCK, LOW); // Set SCK to mode 0 idle state after CS goes inactive
}
#else
WRITE(DOGLCD_CS, !arg_val);
#endif
break;
case U8G_COM_MSG_WRITE_BYTE:
u8g_sw_spi_shift_out(arg_val);
break;
case U8G_COM_MSG_WRITE_SEQ: {
uint8_t* ptr = (uint8_t*)arg_ptr;
while (arg_val > 0) {
u8g_sw_spi_shift_out(*ptr++);
arg_val--;
}
} break;
case U8G_COM_MSG_WRITE_SEQ_P: {
uint8_t* ptr = (uint8_t*)arg_ptr;
while (arg_val > 0) {
u8g_sw_spi_shift_out(u8g_pgm_read(ptr));
ptr++;
arg_val--;
}
} break;
case U8G_COM_MSG_ADDRESS: // Define cmd (arg_val = 0) or data mode (arg_val = 1)
WRITE(DOGLCD_A0, arg_val);
break;
}
return 1;
}
#endif // HAS_MARLINUI_U8GLIB && FORCE_SOFT_SPI
#endif // ARDUINO_ARCH_MFL

View File

@@ -0,0 +1,93 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2025 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
/**
* PersistentStore for Arduino-style EEPROM interface
* with simple implementations supplied by Marlin.
*/
#include "../../platforms.h"
#ifdef ARDUINO_ARCH_MFL
#include "../../../inc/MarlinConfig.h"
#if ENABLED(IIC_BL24CXX_EEPROM)
#include "../../shared/eeprom_if.h"
#include "../../shared/eeprom_api.h"
#ifndef MARLIN_EEPROM_SIZE
#error "MARLIN_EEPROM_SIZE is required for IIC_BL24CXX_EEPROM."
#endif
size_t PersistentStore::capacity() {
return MARLIN_EEPROM_SIZE - eeprom_exclude_size;
}
bool PersistentStore::access_start() {
eeprom_init();
return true;
}
bool PersistentStore::access_finish() {
return true;
}
bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, uint16_t *crc) {
uint16_t written = 0;
while (size--) {
uint8_t v = *value;
uint8_t * const p = (uint8_t * const)REAL_EEPROM_ADDR(pos);
// EPROM has only ~100,000 write cycles,
// so only write bytes that have changed!
if (v != eeprom_read_byte(p)) {
eeprom_write_byte(p, v);
if (++written & 0x7F) delay(2); else safe_delay(2);
if (eeprom_read_byte(p) != v) {
SERIAL_ECHO_MSG(STR_ERR_EEPROM_WRITE);
return true;
}
}
crc16(crc, &v, 1);
pos++;
value++;
}
return false;
}
bool PersistentStore::read_data(int &pos, uint8_t *value, size_t size, uint16_t *crc, const bool writing/*=true*/) {
do {
const uint8_t c = eeprom_read_byte((uint8_t*)REAL_EEPROM_ADDR(pos));
if (writing) *value = c;
crc16(crc, &c, 1);
pos++;
value++;
} while (--size);
return false;
}
#endif // IIC_BL24CXX_EEPROM
#endif // ARDUINO_ARCH_MFL

View File

@@ -0,0 +1,54 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2025 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
/**
* Platform-independent Arduino functions for I2C EEPROM.
* Enable USE_SHARED_EEPROM if not supplied by the framework.
*/
#include "../../platforms.h"
#ifdef ARDUINO_ARCH_MFL
#include "../../../inc/MarlinConfig.h"
#if ENABLED(IIC_BL24CXX_EEPROM)
#include "../../../libs/BL24CXX.h"
#include "../../shared/eeprom_if.h"
void eeprom_init() {
BL24CXX::init();
}
void eeprom_write_byte(uint8_t *pos, uint8_t value) {
const unsigned eeprom_address = (unsigned)pos;
BL24CXX::writeOneByte(eeprom_address, value);
}
uint8_t eeprom_read_byte(uint8_t *pos) {
const unsigned eeprom_address = (unsigned)pos;
return BL24CXX::readOneByte(eeprom_address);
}
#endif // IIC_BL24CXX_EEPROM
#endif // ARDUINO_ARCH_MFL

View File

@@ -0,0 +1,96 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2025 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#include "../../platforms.h"
#ifdef ARDUINO_ARCH_MFL
#include "../../../inc/MarlinConfig.h"
#if USE_WIRED_EEPROM
/**
* PersistentStore for Arduino-style EEPROM interface
* with simple implementations supplied by Marlin.
*/
#include "../../shared/eeprom_if.h"
#include "../../shared/eeprom_api.h"
#ifndef MARLIN_EEPROM_SIZE
#define MARLIN_EEPROM_SIZE size_t(E2END + 1)
#endif
size_t PersistentStore::capacity() {
return MARLIN_EEPROM_SIZE - eeprom_exclude_size;
}
bool PersistentStore::access_start() {
eeprom_init();
return true;
}
bool PersistentStore::access_finish() {
return true;
}
bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, uint16_t *crc) {
uint16_t written = 0;
while (size--) {
uint8_t v = *value;
uint8_t * const p = (uint8_t * const)REAL_EEPROM_ADDR(pos);
// EEPROM has only ~100,000 write cycles,
// so only write bytes that have changed!
if (v != eeprom_read_byte(p)) {
eeprom_write_byte(p, v);
// Avoid triggering watchdog during long EEPROM writes
if (++written & 0x7F)
delay(2);
else
safe_delay(2);
if (eeprom_read_byte(p) != v) {
SERIAL_ECHO_MSG(STR_ERR_EEPROM_WRITE);
return true;
}
}
crc16(crc, &v, 1);
pos++;
value++;
}
return false;
}
bool PersistentStore::read_data(int &pos, uint8_t *value, size_t size, uint16_t *crc, const bool writing/*=true*/) {
do {
const uint8_t c = eeprom_read_byte((uint8_t*)REAL_EEPROM_ADDR(pos));
if (writing)
*value = c;
crc16(crc, &c, 1);
pos++;
value++;
} while (--size);
return false;
}
#endif // USE_WIRED_EEPROM
#endif // ARDUINO_ARCH_MFL

View File

@@ -0,0 +1,61 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2025 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
#include "../../module/endstops.h"
// One ISR for all EXT-Interrupts
void endstop_ISR() { endstops.update(); }
void setup_endstop_interrupts() {
#define _ATTACH(P) attachInterrupt(P, endstop_ISR, CHANGE)
TERN_(USE_X_MAX, _ATTACH(X_MAX_PIN));
TERN_(USE_X_MIN, _ATTACH(X_MIN_PIN));
TERN_(USE_Y_MAX, _ATTACH(Y_MAX_PIN));
TERN_(USE_Y_MIN, _ATTACH(Y_MIN_PIN));
TERN_(USE_Z_MAX, _ATTACH(Z_MAX_PIN));
TERN_(USE_Z_MIN, _ATTACH(Z_MIN_PIN));
TERN_(USE_X2_MAX, _ATTACH(X2_MAX_PIN));
TERN_(USE_X2_MIN, _ATTACH(X2_MIN_PIN));
TERN_(USE_Y2_MAX, _ATTACH(Y2_MAX_PIN));
TERN_(USE_Y2_MIN, _ATTACH(Y2_MIN_PIN));
TERN_(USE_Z2_MAX, _ATTACH(Z2_MAX_PIN));
TERN_(USE_Z2_MIN, _ATTACH(Z2_MIN_PIN));
TERN_(USE_Z3_MAX, _ATTACH(Z3_MAX_PIN));
TERN_(USE_Z3_MIN, _ATTACH(Z3_MIN_PIN));
TERN_(USE_Z4_MAX, _ATTACH(Z4_MAX_PIN));
TERN_(USE_Z4_MIN, _ATTACH(Z4_MIN_PIN));
TERN_(USE_Z_MIN_PROBE, _ATTACH(Z_MIN_PROBE_PIN));
TERN_(USE_CALIBRATION, _ATTACH(CALIBRATION_PIN));
TERN_(USE_I_MAX, _ATTACH(I_MAX_PIN));
TERN_(USE_I_MIN, _ATTACH(I_MIN_PIN));
TERN_(USE_J_MAX, _ATTACH(J_MAX_PIN));
TERN_(USE_J_MIN, _ATTACH(J_MIN_PIN));
TERN_(USE_K_MAX, _ATTACH(K_MAX_PIN));
TERN_(USE_K_MIN, _ATTACH(K_MIN_PIN));
TERN_(USE_U_MAX, _ATTACH(U_MAX_PIN));
TERN_(USE_U_MIN, _ATTACH(U_MIN_PIN));
TERN_(USE_V_MAX, _ATTACH(V_MAX_PIN));
TERN_(USE_V_MIN, _ATTACH(V_MIN_PIN));
TERN_(USE_W_MAX, _ATTACH(W_MAX_PIN));
TERN_(USE_W_MIN, _ATTACH(W_MIN_PIN));
}

View File

@@ -0,0 +1,97 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2025 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#include "../platforms.h"
#ifdef ARDUINO_ARCH_MFL
#include "../../inc/MarlinConfig.h"
#include <PinOpsMap.hpp>
#include <PinOps.hpp>
#include "timers.h"
static uint16_t timer_frequency[TIMER_COUNT];
void MarlinHAL::set_pwm_duty(const pin_t pin, const uint16_t value, const uint16_t scale, const bool invert) {
// Calculate duty cycle based on inversion flag
const uint16_t duty = invert ? scale - value : value;
// Check if the pin supports PWM
if (PWM_PIN(pin)) {
// Get the timer peripheral base associated with the pin
const auto timer_base = getPinOpsPeripheralBase<TIMERPinOps, timer::TIMER_Base>(TIMER_PinOps, static_cast<pin_size_t>(pin));
// Initialize the timer instance
auto& TimerInstance = GeneralTimer::get_instance(timer_base);
// Get channel and previous channel mode
const auto channel = getPackedPinChannel(getPackedPinOps(TIMER_PinOps, static_cast<pin_size_t>(pin)));
const InputOutputMode previous = TimerInstance.getChannelMode(channel);
if (timer_frequency[static_cast<size_t>(timer_base)] == 0) {
set_pwm_frequency(pin, PWM_FREQUENCY);
}
// Set the PWM duty cycle
TimerInstance.setCaptureCompare(channel, duty, CCFormat::B8);
// Configure pin as PWM output
pinOpsPinout(TIMER_PinOps, static_cast<pin_size_t>(pin));
// Set channel mode if not already set and start timer
if (previous != InputOutputMode::PWM0) {
TimerInstance.setChannelMode(channel, InputOutputMode::PWM0, static_cast<pin_size_t>(pin));
TimerInstance.start();
}
} else {
pinMode(pin, OUTPUT);
digitalWrite(pin, duty < scale / 2 ? LOW : HIGH);
}
}
void MarlinHAL::set_pwm_frequency(const pin_t pin, const uint16_t f_desired) {
// Check if the pin supports PWM
if (!PWM_PIN(pin)) return;
// Get the timer peripheral base associated with the pin
const auto timer_base = getPinOpsPeripheralBase<TIMERPinOps, timer::TIMER_Base>(TIMER_PinOps, static_cast<pin_size_t>(pin));
// Guard against modifying protected timers
#ifdef STEP_TIMER
if (timer_base == static_cast<timer::TIMER_Base>(STEP_TIMER)) return;
#endif
#ifdef TEMP_TIMER
if (timer_base == static_cast<timer::TIMER_Base>(TEMP_TIMER)) return;
#endif
#if defined(PULSE_TIMER) && MF_TIMER_PULSE != MF_TIMER_STEP
if (timer_base == static_cast<timer::TIMER_Base>(PULSE_TIMER)) return;
#endif
// Initialize the timer instance
auto& TimerInstance = GeneralTimer::get_instance(timer_base);
TimerInstance.setRolloverValue(f_desired, TimerFormat::HERTZ);
timer_frequency[timer_base_to_index(timer_base)] = f_desired;
}
#endif // ARDUINO_ARCH_MFL

View File

@@ -0,0 +1,86 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2025 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
// Fast I/O interfaces for GD32
#include <GPIO.hpp>
#include <variant.h>
#include <PinOps.hpp>
#include <PinOpsMap.hpp>
template<typename T>
FORCE_INLINE static void fast_write_pin_wrapper(pin_size_t IO, T V) {
const PortPinPair& pp = port_pin_map[IO];
gpio::fast_write_pin(pp.port, pp.pin, static_cast<bool>(V));
}
FORCE_INLINE static auto fast_read_pin_wrapper(pin_size_t IO) -> bool {
const PortPinPair& pp = port_pin_map[IO];
return gpio::fast_read_pin(pp.port, pp.pin);
}
FORCE_INLINE static void fast_toggle_pin_wrapper(pin_size_t IO) {
const PortPinPair& pp = port_pin_map[IO];
gpio::fast_toggle_pin(pp.port, pp.pin);
}
// ------------------------
// Defines
// ------------------------
#ifndef PWM
#define PWM OUTPUT
#endif
#define _WRITE(IO, V) fast_write_pin_wrapper(IO, V)
#define _READ(IO) fast_read_pin_wrapper(IO)
#define _TOGGLE(IO) fast_toggle_pin_wrapper(IO)
#define _GET_MODE(IO)
#define _SET_MODE(IO, M) pinMode((IO), (M))
#define _SET_OUTPUT(IO) pinMode((IO), OUTPUT)
#define _SET_OUTPUT_OD(IO) pinMode((IO), OUTPUT_OPEN_DRAIN)
#define WRITE(IO, V) _WRITE((IO), (V))
#define READ(IO) _READ(IO)
#define TOGGLE(IO) _TOGGLE(IO)
#define OUT_WRITE(IO, V) do { _SET_OUTPUT(IO); WRITE((IO), (V)); } while (0)
#define OUT_WRITE_OD(IO, V) do { _SET_OUTPUT_OD(IO); WRITE((IO), (V)); } while (0)
#define SET_INPUT(IO) _SET_MODE((IO), INPUT)
#define SET_INPUT_PULLUP(IO) _SET_MODE((IO), INPUT_PULLUP)
#define SET_INPUT_PULLDOWN(IO) _SET_MODE((IO), INPUT_PULLDOWN)
#define SET_OUTPUT(IO) OUT_WRITE((IO), LOW)
#define SET_OUTPUT_OD(IO) OUT_WRITE_OD((IO), LOW)
#define SET_PWM(IO) _SET_MODE((IO), PWM)
#define IS_INPUT(IO)
#define IS_OUTPUT(IO)
#define PWM_PIN(P) isPinInPinOps(TIMER_PinOps, P)
#define NO_COMPILE_TIME_PWM
// Wrappers for digitalRead and digitalWrite
#define extDigitalRead(IO) digitalRead(IO)
#define extDigitalWrite(IO, V) digitalWrite((IO), (V))

View File

@@ -0,0 +1,26 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2025 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
#if ALL(HAS_MARLINUI_U8GLIB, FORCE_SOFT_SPI)
#define U8G_SW_SPI_MFL 1
#endif

View File

@@ -0,0 +1,26 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2025 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
#if ALL(HAS_MEDIA, USBD_USE_CDC_MSC)
#define HAS_SD_HOST_DRIVE 1
#endif

View File

@@ -0,0 +1,29 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2025 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
// If no real or emulated EEPROM selected, fall back to SD emulation
#if USE_FALLBACK_EEPROM
#define SDCARD_EEPROM_EMULATION
#elif ANY(I2C_EEPROM, SPI_EEPROM)
#define USE_SHARED_EEPROM 1
#endif

View File

@@ -0,0 +1,22 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2025 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once

View File

@@ -0,0 +1,97 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2025 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
// Test MFL GD32 specific configuration values for errors at compile-time.
#if ENABLED(SDCARD_EEPROM_EMULATION) && !HAS_MEDIA
#undef SDCARD_EEPROM_EMULATION // avoid additional error noise
#if USE_FALLBACK_EEPROM
#warning "EEPROM type not specified. Fallback is SDCARD_EEPROM_EMULATION."
#endif
#error "SDCARD_EEPROM_EMULATION requires SDSUPPORT. Enable SDSUPPORT or choose another EEPROM emulation."
#endif
#if ENABLED(FLASH_EEPROM_LEVELING)
#error "FLASH_EEPROM_LEVELING is not supported on GD32."
#endif
#if ENABLED(SERIAL_STATS_MAX_RX_QUEUED)
#error "SERIAL_STATS_MAX_RX_QUEUED is not supported on GD32."
#elif ENABLED(SERIAL_STATS_DROPPED_RX)
#error "SERIAL_STATS_DROPPED_RX is not supported on GD32."
#endif
#if TEMP_SENSOR_SOC && defined(ATEMP) && TEMP_SOC_PIN != ATEMP
#error "TEMP_SENSOR_SOC requires 'TEMP_SOC_PIN ATEMP' on GD32"
#endif
// Check for common serial pin conflicts
#define _CHECK_SERIAL_PIN(N) (( \
BTN_EN1 == N || BTN_EN2 == N || DOGLCD_CS == N || HEATER_BED_PIN == N || FAN0_PIN == N || \
SDIO_D2_PIN == N || SDIO_D3_PIN == N || SDIO_CK_PIN == N || SDIO_CMD_PIN == N || \
Y_STEP_PIN == N || Y_ENABLE_PIN == N || E0_ENABLE_PIN == N || POWER_LOSS_PIN == N \
))
#define CHECK_SERIAL_PIN(T, N) defined(UART##N##_##T##_PIN) && _CHECK_SERIAL_PIN(UART##N##_##T##_PIN)
#if SERIAL_IN_USE(0)
#if CHECK_SERIAL_PIN(TX, 0)
#error "Serial Port 0 TX IO pins conflict with another pin on the board."
#endif
#if CHECK_SERIAL_PIN(RX, 0)
#error "Serial Port 0 RX IO pins conflict with another pin on the board."
#endif
#endif
#if SERIAL_IN_USE(1)
#if CHECK_SERIAL_PIN(TX, 1)
#error "Serial Port 1 TX IO pins conflict with another pin on the board."
#endif
#if CHECK_SERIAL_PIN(RX, 1)
#error "Serial Port 1 RX IO pins conflict with another pin on the board."
#endif
#endif
#if SERIAL_IN_USE(2)
#if CHECK_SERIAL_PIN(TX, 2)
#error "Serial Port 2 TX IO pins conflict with another pin on the board."
#endif
#if CHECK_SERIAL_PIN(RX, 2)
#error "Serial Port 2 RX IO pins conflict with another pin on the board."
#endif
#endif
#if SERIAL_IN_USE(3)
#if CHECK_SERIAL_PIN(TX, 3)
#error "Serial Port 3 TX IO pins conflict with another pin on the board."
#endif
#if CHECK_SERIAL_PIN(RX, 3)
#error "Serial Port 3 RX IO pins conflict with another pin on the board."
#endif
#endif
#if SERIAL_IN_USE(4)
#if CHECK_SERIAL_PIN(TX, 4)
#error "Serial Port 4 TX IO pins conflict with another pin on the board."
#endif
#if CHECK_SERIAL_PIN(RX, 4)
#error "Serial Port 4 RX IO pins conflict with another pin on the board."
#endif
#endif
#undef CHECK_SERIAL_PIN
#undef _CHECK_SERIAL_PIN

View File

@@ -0,0 +1,104 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2025 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
/**
* Pins Debugging for GD32
*
* - NUMBER_PINS_TOTAL
* - MULTI_NAME_PAD
* - getPinByIndex(index)
* - printPinNameByIndex(index)
* - getPinIsDigitalByIndex(index)
* - digitalPinToAnalogIndex(pin)
* - getValidPinMode(pin)
* - isValidPin(pin)
* - isAnalogPin(pin)
* - digitalRead_mod(pin)
* - pwm_status(pin)
* - printPinPWM(pin)
* - printPinPort(pin)
* - printPinNumber(pin)
* - printPinAnalog(pin)
*/
#include "../../inc/MarlinConfig.h"
#include <Arduino.h>
#include <PinOps.hpp>
#include <Analog.h>
#ifndef TOTAL_PIN_COUNT
#error "Expected TOTAL_PIN_COUNT not found."
#endif
#define NUM_DIGITAL_PINS TOTAL_PIN_COUNT
#define NUMBER_PINS_TOTAL TOTAL_PIN_COUNT
#define getPinByIndex(x) pin_t(pin_array[x].pin)
#define isValidPin(P) WITHIN(P, 0, (NUM_DIGITAL_PINS - 1))
#define digitalRead_mod(P) extDigitalRead(P)
#define printPinNumber(P) do { sprintf_P(buffer, PSTR("%3hd "), pin_t(P)); SERIAL_ECHO(buffer); } while (0)
#define printPinAnalog(P) do { sprintf_P(buffer, PSTR(" (A%2d) "), pin_t(getAdcChannelFromPin(P))); SERIAL_ECHO(buffer); } while (0)
#define printPinNameByIndex(x) do { sprintf_P(buffer, PSTR("%-" STRINGIFY(MAX_NAME_LENGTH) "s"), pin_array[x].name); SERIAL_ECHO(buffer); } while (0)
#define MULTI_NAME_PAD 21 // Space needed to be pretty if not first name assigned to a pin
#ifndef M43_NEVER_TOUCH
#define M43_NEVER_TOUCH(x) WITHIN(x, 9, 10) // SERIAL pins: PA9(TX) PA10(RX)
#endif
bool isAnalogPin(const pin_t pin) {
if (!isValidPin(pin)) return false;
if (getAdcChannel(pin) != adc::ADC_Channel::INVALID) {
const PortPinPair& pp = port_pin_map[pin];
auto& instance = gpio::GPIO::get_instance(pp.port).value();
return instance.get_pin_mode(pp.pin) == gpio::Pin_Mode::ANALOG && !M43_NEVER_TOUCH(pin);
}
return false;
}
bool getValidPinMode(const pin_t pin) {
if (!isValidPin(pin)) return false;
const PortPinPair& pp = port_pin_map[pin];
auto& instance = gpio::GPIO::get_instance(pp.port).value();
gpio::Pin_Mode mode = instance.get_pin_mode(pp.pin);
return mode != gpio::Pin_Mode::ANALOG && mode != gpio::Pin_Mode::INPUT_FLOATING &&
mode != gpio::Pin_Mode::INPUT_PULLUP && mode != gpio::Pin_Mode::INPUT_PULLDOWN;
}
bool getPinIsDigitalByIndex(const int16_t index) {
const pin_t pin = getPinByIndex(index);
return (!isAnalogPin(pin));
}
int8_t digitalPinToAnalogIndex(const pin_t pin) {
if (!isValidPin(pin) || !isAnalogPin(pin)) return -1;
return pin; // Analog and digital pin indexes are shared
}
bool pwm_status(const pin_t pin) { return false; }
void printPinPWM(const pin_t pin) { /* TODO */ }
void printPinPort(const pin_t pin) { /* TODO */ }

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,222 @@
//
// MFL gd32f30x SDCARD using DMA through SDIO in C++
//
// Copyright (C) 2025 B. Mourit <bnmguy@gmail.com>
//
// This software is free software: you can redistribute it and/or modify it under the terms of the
// GNU Lesser General Public License as published by the Free Software Foundation,
// either version 3 of the License, or (at your option) any later version.
//
// This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
// without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License along with this software.
// If not, see <https://www.gnu.org/licenses/>.
//
#pragma once
#include "../../../inc/MarlinConfig.h"
#include <SDIO.hpp>
namespace sdio {
class DMA;
class CardDMA {
public:
static auto get_instance() -> CardDMA&;
// Initialization
auto init() -> SDIO_Error_Type;
auto card_init() -> SDIO_Error_Type;
// Startup and shutdown procedures
auto begin_startup_procedure() -> SDIO_Error_Type;
void begin_shutdown_procedure();
// Configuration
auto set_hardware_bus_width(Bus_Width width) -> SDIO_Error_Type;
auto send_bus_width_command(uint32_t width_value) -> SDIO_Error_Type;
// Main read/write/erase functions
auto read(uint8_t* buf, uint32_t address, uint32_t count) -> SDIO_Error_Type;
auto write(uint8_t* buf, uint32_t address, uint32_t count) -> SDIO_Error_Type;
auto erase(uint32_t address_start, uint32_t address_end) -> SDIO_Error_Type;
// Card select
auto select_deselect() -> SDIO_Error_Type;
// Status and state
auto get_card_interface_status(uint32_t* status) -> SDIO_Error_Type;
auto get_sdcard_status(uint32_t* status) -> SDIO_Error_Type;
auto get_transfer_state() -> Transfer_State;
auto get_card_state(Card_State* card_state) -> SDIO_Error_Type;
auto check_sdio_status(Command_Index index = Command_Index::INVALID, bool check_index = false, bool ignore_crc = false) -> SDIO_Error_Type;
// DMA
void set_dma_parameters(uint8_t* buf, uint32_t count, bool is_write);
void check_dma_complete();
// Stop transfer
auto stop_transfer() -> SDIO_Error_Type;
// Card information
auto get_card_specific_data(Card_Info* info) -> SDIO_Error_Type;
constexpr auto get_data_block_size_index(uint16_t size) -> Block_Size;
[[nodiscard]] auto get_card_capacity() const -> uint32_t;
// SDIO configuration
void sdio_configure(const SDIO_Config config) { sdio_.init(config); }
// Interrupt handler
void handle_interrupts();
// Variable stored parameters
auto get_scr(uint16_t rca, uint32_t* scr) -> SDIO_Error_Type;
auto store_cid() -> SDIO_Error_Type;
auto store_csd() -> SDIO_Error_Type;
// Inlined accessor methods
auto get_config() -> SDIO_Config& { return config_; }
auto get_dma_instance() -> dma::DMA& { return dma_; }
void set_data_end_interrupt() { sdio_.set_interrupt_enable(Interrupt_Type::DTENDIE, true); }
void set_sdio_dma_enable(bool enable) { sdio_.set_dma_enable(enable); }
auto get_is_sdio_rx() -> bool { return is_rx_; }
void clear_sdio_data_flags() { sdio_.clear_multiple_interrupt_flags(clear_data_flags); }
void clear_sdio_cmd_flags() { sdio_.clear_multiple_interrupt_flags(clear_command_flags); }
void clear_sdio_common_flags() { sdio_.clear_multiple_interrupt_flags(clear_common_flags); }
auto get_state() -> Operational_State { return current_state_; }
void set_state(Operational_State state) { current_state_ = state; }
void set_transfer_error(SDIO_Error_Type error) { transfer_error_ = error; }
void set_transfer_end(bool end) { transfer_end_ = end; };
auto set_desired_clock(uint32_t desired_clock, bool wide_bus, bool low_power) -> SDIO_Error_Type {
sdio_.init(SDIO_Config{
.desired_clock = desired_clock,
.enable_bypass = false,
.enable_powersave = low_power,
.enable_hwclock = false,
.clock_edge = Clock_Edge::RISING_EDGE,
.width = wide_bus ? Bus_Width::WIDTH_4BIT : Bus_Width::WIDTH_1BIT
});
sync_domains();
desired_clock_ = desired_clock;
return SDIO_Error_Type::OK;
}
private:
CardDMA();
// Prevent copying or assigning
CardDMA(const CardDMA&) = delete;
auto operator=(const CardDMA&) -> CardDMA& = delete;
// Helper function
auto wait_for_card_ready() -> SDIO_Error_Type;
// Member variables
alignas(4) uint32_t sdcard_csd_[4];
alignas(4) uint32_t sdcard_cid_[4];
alignas(4) uint32_t sdcard_scr_[2];
uint32_t desired_clock_;
uint32_t total_bytes_;
SDIO& sdio_;
SDIO_Config& config_;
const dma::DMA_Base dmaBase_;
const dma::DMA_Channel dmaChannel_;
dma::DMA& dma_;
uint16_t sdcard_rca_;
SDIO_Error_Type transfer_error_;
Interface_Version interface_version_;
Card_Type card_type_;
Operational_State current_state_;
bool transfer_end_;
bool multiblock_;
bool is_rx_;
// Private helper methods
auto validate_voltage() -> SDIO_Error_Type;
auto get_command_sent_result() -> SDIO_Error_Type;
auto get_r1_result(Command_Index index) -> SDIO_Error_Type;
auto get_r6_result(Command_Index index, uint16_t* rca) -> SDIO_Error_Type;
auto get_r7_result() -> SDIO_Error_Type { return check_sdio_status(Command_Index::INVALID, false, false); };
void sync_domains() { delayMicroseconds(8); }
auto validate_transfer_params(uint32_t* buf, uint16_t size) -> bool {
if (buf == nullptr) return false;
// Size must be > 0, <= 2048 and power of 2
return size > 0U && size <= 2048U && !(size & (size - 1U));
}
void process_sdsc_specific_csd(Card_Info* info, const uint8_t* csd_bytes) {
const uint32_t device_size = ((csd_bytes[6] & 0x3U) << 10) |
(csd_bytes[7] << 2) |
((csd_bytes[8] >> 6) & 0x3U);
const uint8_t device_size_multiplier = ((csd_bytes[9] & 0x3U) << 1) |
((csd_bytes[10] >> 7) & 0x1U);
// Store calculated values
info->csd.device_size = device_size;
info->csd.device_size_multiplier = device_size_multiplier;
// Calculate block size and capacity
info->block_size = 1U << info->csd.read_block_length;
info->capacity = (device_size + 1U) *
(1U << (device_size_multiplier + 2U)) *
info->block_size;
}
void process_sdhc_specific_csd(Card_Info* info, const uint8_t* csd_bytes) {
info->csd.device_size = static_cast<uint32_t>((csd_bytes[7] & 0x3FU) << 16) |
static_cast<uint32_t>((csd_bytes[8]) << 8) |
static_cast<uint32_t>(csd_bytes[9]);
// Set block size and calculate capacity
info->block_size = BLOCK_SIZE;
info->capacity = static_cast<uint32_t>((info->csd.device_size + 1U) *
BLOCK_SIZE * KILOBYTE);
}
void process_common_csd_tail(Card_Info* info, const uint8_t* csd_bytes) {
// Calculate sector_size
info->csd.sector_size = static_cast<uint8_t>(((csd_bytes[9] & 0x3FU) << 1) |
(csd_bytes[10] & 0x80U) >> 7);
// Calculate speed_factor and write_block_length
info->csd.speed_factor = static_cast<uint8_t>((csd_bytes[11] & 0x1CU) >> 2);
info->csd.write_block_length = static_cast<uint8_t>(((csd_bytes[11] & 0x3U) << 2) |
((csd_bytes[12] & 0xC0U) >> 6));
// Calculate checksum
info->csd.checksum = static_cast<uint8_t>((csd_bytes[15] & 0xFEU) >> 1);
}
void disable_all_interrupts() {
sdio_.set_interrupt_enable(Interrupt_Type::DTCRCERRIE, false);
sdio_.set_interrupt_enable(Interrupt_Type::DTTMOUTIE, false);
sdio_.set_interrupt_enable(Interrupt_Type::DTENDIE, false);
sdio_.set_interrupt_enable(Interrupt_Type::STBITEIE, false);
sdio_.set_interrupt_enable(Interrupt_Type::TFHIE, false);
sdio_.set_interrupt_enable(Interrupt_Type::RFHIE, false);
sdio_.set_interrupt_enable(Interrupt_Type::TXUREIE, false);
sdio_.set_interrupt_enable(Interrupt_Type::RXOREIE, false);
}
template <typename CheckFunc>
auto send_command_and_check(Command_Index command, uint32_t argument,
Command_Response response, Wait_Type type, CheckFunc check_result) -> SDIO_Error_Type {
sdio_.set_command_state_machine(command, argument, response, type);
sync_domains();
sdio_.set_command_state_machine_enable(true);
return check_result();
}
};
} // namespace sdio
extern sdio::CardDMA& CardDMA_I;

View File

@@ -0,0 +1,231 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2025 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#include "../../platforms.h"
#ifdef ARDUINO_ARCH_MFL
#include "../../../inc/MarlinConfig.h"
#if ENABLED(ONBOARD_SDIO)
#include <PinOpsMap.hpp>
#include <PinOps.hpp>
#include "SDCard.h"
#include "sdio.h"
using namespace sdio;
#define TARGET_CLOCK 6000000U
#define BLOCK_SIZE 512U
#define CARD_TIMEOUT 500 // ms
#define READ_RETRIES 3U
inline constexpr uint32_t TARGET_SDIO_CLOCK = TARGET_CLOCK;
inline constexpr uint32_t SDIO_BLOCK_SIZE = BLOCK_SIZE;
inline constexpr uint32_t SD_TIMEOUT = CARD_TIMEOUT;
inline constexpr uint8_t SDIO_READ_RETRIES = READ_RETRIES;
Card_State cardState = Card_State::READY;
auto SDIO_SetBusWidth(Bus_Width width) -> bool {
return (CardDMA_I.set_hardware_bus_width(width) == SDIO_Error_Type::OK);
}
void mfl_sdio_init() {
pinOpsPinout(SD_CMD_PinOps, static_cast<pin_size_t>(SDIO_CMD_PIN));
pinOpsPinout(SD_CK_PinOps, static_cast<pin_size_t>(SDIO_CK_PIN));
pinOpsPinout(SD_DATA0_PinOps, static_cast<pin_size_t>(SDIO_D0_PIN));
pinOpsPinout(SD_DATA1_PinOps, static_cast<pin_size_t>(SDIO_D1_PIN));
pinOpsPinout(SD_DATA2_PinOps, static_cast<pin_size_t>(SDIO_D2_PIN));
pinOpsPinout(SD_DATA3_PinOps, static_cast<pin_size_t>(SDIO_D3_PIN));
NVIC_EnableIRQ(DMA1_Channel3_4_IRQn);
NVIC_EnableIRQ(SDIO_IRQn);
}
bool SDIO_Init() {
SDIO_Error_Type result = SDIO_Error_Type::OK;
uint8_t retryCount = SDIO_READ_RETRIES;
mfl_sdio_init();
uint8_t retries = retryCount;
for (;;) {
hal.watchdog_refresh();
result = CardDMA_I.init();
if (result == SDIO_Error_Type::OK) break;
if (!--retries) return false;
}
CardDMA_I.set_desired_clock(TARGET_SDIO_CLOCK, false, false);
retries = retryCount;
for (;;) {
hal.watchdog_refresh();
if (SDIO_SetBusWidth(Bus_Width::WIDTH_4BIT)) break;
if (!--retries) break;
}
CardDMA_I.set_desired_clock(TARGET_SDIO_CLOCK, true, true);
// Fallback
if (!retries) {
mfl_sdio_init();
retries = retryCount;
for (;;) {
hal.watchdog_refresh();
result = CardDMA_I.init();
if (result == SDIO_Error_Type::OK) break;
if (!--retries) return false;
}
CardDMA_I.set_desired_clock(TARGET_SDIO_CLOCK, false, true);
}
return true;
}
static bool SDIO_ReadWriteBlock_DMA(uint32_t block, const uint8_t* src, uint8_t* dst) {
hal.watchdog_refresh();
SDIO_Error_Type result = SDIO_Error_Type::OK;
// Write
if (src) {
result = CardDMA_I.write(reinterpret_cast<uint8_t*>(const_cast<uint8_t*>(src)), block, 1);
}
// Read
else {
result = CardDMA_I.read(dst, block, 1);
}
if (result != SDIO_Error_Type::OK) {
return false;
}
millis_t timeout = millis() + SD_TIMEOUT;
while (CardDMA_I.get_state() != sdio::Operational_State::READY) {
if (ELAPSED(millis(), timeout)) {
return false;
}
}
CardDMA_I.check_dma_complete();
timeout = millis() + SD_TIMEOUT;
do {
result = CardDMA_I.get_card_state(&cardState);
if (ELAPSED(millis(), timeout)) {
return false;
}
} while (result == SDIO_Error_Type::OK && cardState != sdio::Card_State::TRANSFER);
return true;
}
bool SDIO_ReadBlock(uint32_t block, uint8_t* dst) {
// Check if the address is aligned to 4 bytes
if (reinterpret_cast<uint32_t>(dst) & 0x03) {
return false;
}
uint8_t retries = SDIO_READ_RETRIES;
while (retries--) {
if (SDIO_ReadWriteBlock_DMA(block, nullptr, dst)) {
return true;
}
}
return false;
}
bool SDIO_WriteBlock(uint32_t block, const uint8_t* src) {
// Check if the address is aligned to 4 bytes
if (reinterpret_cast<uint32_t>(src) & 0x03) {
return false;
}
uint8_t retries = SDIO_READ_RETRIES;
while (retries--) {
if (SDIO_ReadWriteBlock_DMA(block, src, nullptr)) {
return true;
delay(10);
}
}
return false;
}
bool SDIO_IsReady() {
return (CardDMA_I.get_state() == sdio::Operational_State::READY);
}
uint32_t SDIO_GetCardSize() {
return CardDMA_I.get_card_capacity();
}
// DMA interrupt handler
void DMA1_IRQHandler() {
auto& dma_instance = CardDMA_I.get_dma_instance();
bool is_receive = CardDMA_I.get_is_sdio_rx();
// Check for Transfer Complete Interrupt
if (dma_instance.get_interrupt_flag(dma::Interrupt_Flags::INTR_FLAG_FTFIF)) {
dma_instance.set_interrupt_enable(dma::Interrupt_Type::INTR_FTFIE, false);
dma_instance.set_interrupt_enable(dma::Interrupt_Type::INTR_ERRIE, false);
dma_instance.clear_interrupt_flag(dma::Interrupt_Flags::INTR_FLAG_FTFIF);
if (is_receive) {
CardDMA_I.set_sdio_dma_enable(false);
CardDMA_I.clear_sdio_data_flags();
CardDMA_I.set_state(sdio::Operational_State::READY);
} else {
CardDMA_I.set_data_end_interrupt();
}
// Signal that transfer is complete
CardDMA_I.set_transfer_end(true);
}
else if (dma_instance.get_interrupt_flag(dma::Interrupt_Flags::INTR_FLAG_ERRIF)) {
dma_instance.set_interrupt_enable(dma::Interrupt_Type::INTR_HTFIE, false);
dma_instance.set_interrupt_enable(dma::Interrupt_Type::INTR_ERRIE, false);
dma_instance.set_interrupt_enable(dma::Interrupt_Type::INTR_FTFIE, false);
// Clear all flags
dma_instance.clear_interrupt_flag(dma::Interrupt_Flags::INTR_FLAG_GIF);
// Signal that an error occurred
CardDMA_I.set_transfer_error(SDIO_Error_Type::ERROR);
CardDMA_I.set_state(sdio::Operational_State::READY);
}
}
extern "C" {
void SDIO_IRQHandler(void) {
CardDMA_I.handle_interrupts();
}
void DMA1_Channel3_4_IRQHandler(void) {
DMA1_IRQHandler();
}
} // extern "C"
#endif // ONBOARD_SDIO
#endif // ARDUINO_ARCH_MFL

View File

@@ -0,0 +1,36 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2025 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
#include <SDIO.hpp>
#include <DMA.hpp>
#define SDIO_D0_PIN PC8
#define SDIO_D1_PIN PC9
#define SDIO_D2_PIN PC10
#define SDIO_D3_PIN PC11
#define SDIO_CK_PIN PC12
#define SDIO_CMD_PIN PD2
void sdio_mfl_init();
auto SDIO_SetBusWidth(sdio::Bus_Width width) -> bool;
void DMA1_IRQHandler(dma::DMA_Channel channel);

View File

@@ -0,0 +1,32 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2025 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
#pragma once
// Define SPI Pins: SCK, MISO, MOSI
#ifndef SD_SCK_PIN
#define SD_SCK_PIN PIN_SPI_SCK
#endif
#ifndef SD_MISO_PIN
#define SD_MISO_PIN PIN_SPI_MISO
#endif
#ifndef SD_MOSI_PIN
#define SD_MOSI_PIN PIN_SPI_MOSI
#endif

View File

@@ -0,0 +1,29 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2025 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
#define TS_TYPICAL_V 1.405
#define TS_TYPICAL_TEMP 25
#define TS_TYPICAL_SLOPE 4.5
// TODO: Implement voltage scaling (calibrated Vrefint) and ADC resolution scaling (when applicable)
#define TEMP_SOC_SENSOR(RAW) ((TS_TYPICAL_V - (RAW) / float(OVERSAMPLENR) / float(HAL_ADC_RANGE) * (float(ADC_VREF_MV) * 0.001f)) / ((TS_TYPICAL_SLOPE) * 0.001f) + TS_TYPICAL_TEMP)

View File

@@ -0,0 +1,237 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2025 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#include "../platforms.h"
#ifdef ARDUINO_ARCH_MFL
#include "../../inc/MarlinConfig.h"
#include "timers.h"
// ------------------------
// Local defines
// ------------------------
#define SWSERIAL_TIMER_IRQ_PRIORITY_DEFAULT 1 // Requires tight bit timing to communicate reliably with TMC drivers
#define SERVO_TIMER_IRQ_PRIORITY_DEFAULT 1 // Requires tight PWM timing to control a BLTouch reliably
#define STEP_TIMER_IRQ_PRIORITY_DEFAULT 2
#define TEMP_TIMER_IRQ_PRIORITY_DEFAULT 14 // Low priority avoids interference with other hardware and timers
#ifndef TIMER_IRQ_PRIORITY
#define TIMER_IRQ_PRIORITY 12
#endif
#ifndef STEP_TIMER_IRQ_PRIORITY
#define STEP_TIMER_IRQ_PRIORITY STEP_TIMER_IRQ_PRIORITY_DEFAULT
#endif
#ifndef TEMP_TIMER_IRQ_PRIORITY
#define TEMP_TIMER_IRQ_PRIORITY TEMP_TIMER_IRQ_PRIORITY_DEFAULT
#endif
#if HAS_TMC_SW_SERIAL
#include <SoftwareSerial.h>
#ifndef SWSERIAL_TIMER_IRQ_PRIORITY
#define SWSERIAL_TIMER_IRQ_PRIORITY SWSERIAL_TIMER_IRQ_PRIORITY_DEFAULT
#endif
#endif
#if HAS_SERVOS
#include "Servo.h"
#ifndef SERVO_TIMER_IRQ_PRIORITY
#define SERVO_TIMER_IRQ_PRIORITY SERVO_TIMER_IRQ_PRIORITY_DEFAULT
#endif
#endif
#if ENABLED(SPEAKER)
// The MFL framework default timer priority is 12. The TEMP timer must have lower priority
// than this due to the long running temperature ISR, and STEP timer should higher priority.
#if !(TIMER_IRQ_PRIORITY > STEP_TIMER_IRQ_PRIORITY && TIMER_IRQ_PRIORITY < TEMP_TIMER_IRQ_PRIORITY)
#error "Default timer interrupt priority is unspecified or set to a value which may degrade performance."
#endif
#endif
#ifndef STEP_TIMER
#define STEP_TIMER MF_TIMER_STEP
#endif
#ifndef TEMP_TIMER
#define TEMP_TIMER MF_TIMER_TEMP
#endif
GeneralTimer& Step_Timer = GeneralTimer::get_instance(static_cast<timer::TIMER_Base>(STEP_TIMER));
GeneralTimer& Temp_Timer = GeneralTimer::get_instance(static_cast<timer::TIMER_Base>(TEMP_TIMER));
bool is_step_timer_initialized = false;
bool is_temp_timer_initialized = false;
// ------------------------
// Public functions
// ------------------------
// Retrieves the clock frequency of the stepper timer
uint32_t GetStepperTimerClkFreq() {
// Cache result
static uint32_t clkFreq = Step_Timer.getTimerClockFrequency();
return clkFreq;
}
/**
* @brief Starts a hardware timer
*
* If the timer is not already initialized, this function will initialize it with the given frequency.
* The timer is started immediately after initialization
*
* @param timer The timer base index to start
* @param frequency The frequency at which the timer should run
* @return None
*/
void HAL_timer_start(const uint8_t timer_number, const uint32_t frequency) {
if (HAL_timer_initialized(timer_number) || (timer_number != MF_TIMER_STEP && timer_number != MF_TIMER_TEMP))
return;
const bool is_step = (timer_number == MF_TIMER_STEP);
const uint8_t priority = is_step ?
static_cast<uint8_t>(STEP_TIMER_IRQ_PRIORITY) :
static_cast<uint8_t>(TEMP_TIMER_IRQ_PRIORITY);
// Get the reference of the timer instance
GeneralTimer& timer = is_step ? Step_Timer : Temp_Timer;
if (is_step) {
timer.setPrescaler(STEPPER_TIMER_PRESCALE);
timer.setRolloverValue(
_MIN(HAL_TIMER_TYPE_MAX, hal_timer_t((HAL_TIMER_RATE) / (STEPPER_TIMER_PRESCALE))),
TimerFormat::TICK
);
is_step_timer_initialized = true;
}
else {
timer.setRolloverValue(frequency, TimerFormat::HERTZ);
is_temp_timer_initialized = true;
}
timer.setAutoReloadEnable(false);
timer.setInterruptPriority(priority, 0U);
HAL_timer_enable_interrupt(timer_number);
timer.start();
}
/**
* @brief Enables the interrupt for the specified timer
*
* @param handle The timer handle for which to enable the interrupt
* @return None
*/
void HAL_timer_enable_interrupt(const uint8_t timer_number) {
if (!HAL_timer_initialized(timer_number)) return;
GeneralTimer& timer = (timer_number == MF_TIMER_STEP) ? Step_Timer : Temp_Timer;
if (timer_number == MF_TIMER_STEP && !timer.hasInterrupt())
timer.attachInterrupt(Step_Handler);
else if (timer_number == MF_TIMER_TEMP && !timer.hasInterrupt())
timer.attachInterrupt(Temp_Handler);
}
/**
* @brief Disables the interrupt for the specified timer
*
* @param handle The timer handle for which to disable the interrupt
* @return None
*/
void HAL_timer_disable_interrupt(const uint8_t timer_number) {
if (!HAL_timer_initialized(timer_number)) return;
GeneralTimer& timer = (timer_number == MF_TIMER_STEP) ? Step_Timer : Temp_Timer;
if (timer_number == MF_TIMER_STEP || timer_number == MF_TIMER_TEMP)
timer.detachInterrupt();
}
/**
* @brief Checks if the interrupt is enabled for the specified timer
*
* @param handle The timer handle to check
* @return True if the interrupt is enabled, false otherwise
*/
bool HAL_timer_interrupt_enabled(const uint8_t timer_number) {
if (!HAL_timer_initialized(timer_number)) return false;
GeneralTimer& timer = (timer_number == MF_TIMER_STEP) ? Step_Timer : Temp_Timer;
return (timer_number == MF_TIMER_STEP || timer_number == MF_TIMER_TEMP)
? timer.hasInterrupt()
: false;
}
// Sets the interrupt priorities for timers used by TMC SW serial and servos.
void SetTimerInterruptPriorities() {
TERN_(HAS_TMC_SW_SERIAL, SoftwareSerial::setInterruptPriority(SWSERIAL_TIMER_IRQ_PRIORITY, 0));
TERN_(HAS_SERVOS, libServo::setInterruptPriority(SERVO_TIMER_IRQ_PRIORITY, 0));
}
// ------------------------
// Detect timer conflicts
// ------------------------
TERN_(HAS_TMC_SW_SERIAL, static constexpr timer::TIMER_Base timer_serial[] = {static_cast<timer::TIMER_Base>(TIMER_SERIAL)});
TERN_(SPEAKER, static constexpr timer::TIMER_Base timer_tone[] = {static_cast<timer::TIMER_Base>(TIMER_TONE)});
TERN_(HAS_SERVOS, static constexpr timer::TIMER_Base timer_servo[] = {static_cast<timer::TIMER_Base>(TIMER_SERVO)});
enum TimerPurpose {
PURPOSE_SERIAL,
PURPOSE_TONE,
PURPOSE_SERVO,
PURPOSE_STEP,
PURPOSE_TEMP
};
// List of timers to check for conflicts
// Includes the timer purpose to ease debugging when evaluating at build-time
// This cannot yet account for timers used for PWM output, such as for fans
static constexpr struct { TimerPurpose p; int t; } timers_in_use[] = {
#if HAS_TMC_SW_SERIAL
{ PURPOSE_SERIAL, timer_base_to_index(timer_serial[0]) }, // Set in variant.h
#endif
#if ENABLED(SPEAKER)
{ PURPOSE_TONE, timer_base_to_index(timer_tone[0]) }, // Set in variant.h
#endif
#if HAS_SERVOS
{ PURPOSE_SERVO, timer_base_to_index(timer_servo[0]) }, // Set in variant.h
#endif
{ PURPOSE_STEP, MF_TIMER_STEP },
{ PURPOSE_TEMP, MF_TIMER_TEMP },
};
// Verifies if there are any timer conflicts in the timers_in_use array
static constexpr bool verify_no_timer_conflicts() {
for (uint8_t i = 0; i < COUNT(timers_in_use); i++)
for (uint8_t j = i + 1; j < COUNT(timers_in_use); j++)
if (timers_in_use[i].t == timers_in_use[j].t)
return false;
return true;
}
// If this assertion fails at compile time, review the timers_in_use array.
// If default_envs is defined properly in platformio.ini, VSCode can evaluate the array
// when hovering over it, making it easy to identify the conflicting timers
static_assert(verify_no_timer_conflicts(), "One or more timer conflict detected. Examine \"timers_in_use\" to help identify conflict.");
#endif // ARDUINO_ARCH_MFL

View File

@@ -0,0 +1,149 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2025 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
#include "../../inc/MarlinConfig.h"
#include <GeneralTimer.h>
// ------------------------
// Defines
// ------------------------
// Timer instance definitions
#define MF_TIMER_STEP 3
#define MF_TIMER_TEMP 1
#define MF_TIMER_PULSE MF_TIMER_STEP
typedef uint32_t hal_timer_t;
#define HAL_TIMER_TYPE_MAX hal_timer_t(UINT16_MAX)
#ifndef HAL_TIMER_RATE
extern uint32_t GetStepperTimerClkFreq();
#define HAL_TIMER_RATE GetStepperTimerClkFreq()
#endif
// Timer configuration constants
#define STEPPER_TIMER_RATE 2000000
#define TEMP_TIMER_FREQUENCY 1000
// Timer prescaler calculations
#define STEPPER_TIMER_PRESCALE ((HAL_TIMER_RATE) / (STEPPER_TIMER_RATE)) // Prescaler = 30
#define STEPPER_TIMER_TICKS_PER_US ((STEPPER_TIMER_RATE) / 1000000UL) // (MHz) Stepper Timer ticks per µs
// Pulse Timer (counter) calculations
#define PULSE_TIMER_RATE STEPPER_TIMER_RATE // (Hz) Frequency of Pulse Timer
#define PULSE_TIMER_PRESCALE STEPPER_TIMER_PRESCALE
// Timer interrupt priorities
#define STEP_TIMER_IRQ_PRIORITY 2
#define TEMP_TIMER_IRQ_PRIORITY 14
#define ENABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_enable_interrupt(MF_TIMER_STEP)
#define DISABLE_STEPPER_DRIVER_INTERRUPT() HAL_timer_disable_interrupt(MF_TIMER_STEP)
#define STEPPER_ISR_ENABLED() HAL_timer_interrupt_enabled(MF_TIMER_STEP)
#define ENABLE_TEMPERATURE_INTERRUPT() HAL_timer_enable_interrupt(MF_TIMER_TEMP)
#define DISABLE_TEMPERATURE_INTERRUPT() HAL_timer_disable_interrupt(MF_TIMER_TEMP)
extern void Step_Handler();
extern void Temp_Handler();
#ifndef HAL_STEP_TIMER_ISR
#define HAL_STEP_TIMER_ISR() void Step_Handler()
#endif
#ifndef HAL_TEMP_TIMER_ISR
#define HAL_TEMP_TIMER_ISR() void Temp_Handler()
#endif
extern GeneralTimer& Step_Timer;
extern GeneralTimer& Temp_Timer;
extern bool is_step_timer_initialized;
extern bool is_temp_timer_initialized;
// Build-time mapping between timer base and index. Used in timers.cpp and fast_pwm.cpp
static inline constexpr struct {timer::TIMER_Base base; uint8_t timer_number;} base_to_index[] = {
{ timer::TIMER_Base::TIMER0_BASE, 0 },
{ timer::TIMER_Base::TIMER1_BASE, 1 },
{ timer::TIMER_Base::TIMER2_BASE, 2 },
{ timer::TIMER_Base::TIMER3_BASE, 3 },
{ timer::TIMER_Base::TIMER4_BASE, 4 },
{ timer::TIMER_Base::TIMER5_BASE, 5 },
{ timer::TIMER_Base::TIMER6_BASE, 6 },
{ timer::TIMER_Base::TIMER7_BASE, 7 }
};
// Converts a timer base to an integer timer index.
constexpr auto timer_base_to_index(timer::TIMER_Base base) -> int {
for (const auto& timer : base_to_index) {
if (timer.base == base) {
return static_cast<int>(timer.timer_number);
}
}
return -1;
}
// ------------------------
// Public functions
// ------------------------
void HAL_timer_start(const uint8_t timer, const uint32_t frequency);
void HAL_timer_enable_interrupt(const uint8_t timer);
void HAL_timer_disable_interrupt(const uint8_t timer);
bool HAL_timer_interrupt_enabled(const uint8_t timer);
// Configure timer priorities for peripherals such as Software Serial or Servos.
// Exposed here to allow all timer priority information to reside in timers.cpp
void SetTimerInterruptPriorities();
// FORCE_INLINE because these are used in performance-critical situations
FORCE_INLINE bool HAL_timer_initialized(const uint8_t timer_number) {
return (timer_number == MF_TIMER_STEP) ? is_step_timer_initialized :
(timer_number == MF_TIMER_TEMP) ? is_temp_timer_initialized :
false;
}
FORCE_INLINE static hal_timer_t HAL_timer_get_count(const uint8_t timer_number) {
if (!HAL_timer_initialized(timer_number)) return 0U;
GeneralTimer& timer = (timer_number == MF_TIMER_STEP) ? Step_Timer : Temp_Timer;
return (timer_number == MF_TIMER_STEP || timer_number == MF_TIMER_TEMP)
? timer.getCounter(TimerFormat::TICK)
: 0U;
}
FORCE_INLINE static void HAL_timer_set_compare(const uint8_t timer_number, const hal_timer_t value) {
if (!HAL_timer_initialized(timer_number)) return;
const auto new_value = static_cast<uint32_t>(value + 1U);
GeneralTimer& timer = (timer_number == MF_TIMER_STEP) ? Step_Timer : Temp_Timer;
if (timer_number == MF_TIMER_STEP || timer_number == MF_TIMER_TEMP) {
timer.setRolloverValue(new_value, TimerFormat::TICK);
if (value < static_cast<hal_timer_t>(timer.getCounter(TimerFormat::TICK)))
timer.refresh();
}
}
inline void HAL_timer_isr_prologue(const uint8_t) {}
inline void HAL_timer_isr_epilogue(const uint8_t) {}

View File

@@ -0,0 +1,26 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2025 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#pragma once
// MFL LCD-specific defines
uint8_t u8g_com_HAL_MFL_sw_spi_fn(u8g_t* u8g, uint8_t msg, uint8_t arg_val, void* arg_ptr); // u8g_com_mfl_swspi.cpp
#define U8G_COM_HAL_SW_SPI_FN u8g_com_HAL_MFL_sw_spi_fn

View File

@@ -27,7 +27,7 @@
#define GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
#endif
#include HAL_PATH(..,HAL.h)
#include HAL_PATH(.., HAL.h)
extern MarlinHAL hal;
#define HAL_ADC_RANGE _BV(HAL_ADC_RESOLUTION)

View File

@@ -36,60 +36,12 @@
#include "fastio.h"
#include "timers.h"
#include "MarlinSerial.h"
//
// Serial Ports
//
#define _MSERIAL(X) MSerial##X
#define MSERIAL(X) _MSERIAL(X)
#define NUM_UARTS 4
#if SERIAL_PORT == -1
#error "USB Serial is not supported on HC32F460"
#elif WITHIN(SERIAL_PORT, 1, NUM_UARTS)
#define MYSERIAL1 MSERIAL(SERIAL_PORT)
#else
#define MYSERIAL1 MSERIAL(1) // Dummy port
static_assert(false, "SERIAL_PORT must be from 1 to " STRINGIFY(NUM_UARTS) ".")
#endif
#ifdef SERIAL_PORT_2
#if SERIAL_PORT_2 == -1
#error "USB Serial is not supported on HC32F460"
#elif WITHIN(SERIAL_PORT_2, 1, NUM_UARTS)
#define MYSERIAL2 MSERIAL(SERIAL_PORT_2)
#else
#define MYSERIAL2 MSERIAL(1) // Dummy port
static_assert(false, "SERIAL_PORT_2 must be from 1 to " STRINGIFY(NUM_UARTS) ".")
#endif
#endif
#ifdef SERIAL_PORT_3
#if SERIAL_PORT_3 == -1
#error "USB Serial is not supported on HC32F460"
#elif WITHIN(SERIAL_PORT_3, 1, NUM_UARTS)
#define MYSERIAL3 MSERIAL(SERIAL_PORT_3)
#else
#define MYSERIAL3 MSERIAL(1) // Dummy port
static_assert(false, "SERIAL_PORT_3 must be from 1 to " STRINGIFY(NUM_UARTS) ".")
#endif
#endif
#ifdef LCD_SERIAL_PORT
#if LCD_SERIAL_PORT == -1
#error "USB Serial is not supported on HC32F460"
#elif WITHIN(LCD_SERIAL_PORT, 1, NUM_UARTS)
#define LCD_SERIAL MSERIAL(LCD_SERIAL_PORT)
#else
#define LCD_SERIAL MSERIAL(1) // Dummy port
static_assert(false, "LCD_SERIAL_PORT must be from 1 to " STRINGIFY(NUM_UARTS) ".")
#endif
#if HAS_DGUS_LCD
#define LCD_SERIAL_TX_BUFFER_FREE() LCD_SERIAL.availableForWrite()
#endif
#endif
#include "MarlinSerial.h"
//
// Emergency Parser

View File

@@ -67,7 +67,7 @@ public:
static void delay_ms(const int ms);
// Tasks, called from idle()
// Tasks, called from marlin.idle()
static void idletask();
// Reset

View File

@@ -30,17 +30,17 @@
* it would not make sense to parse G-Code from TMC responses
*/
constexpr bool serial_handles_emergency(int port) {
return false
return (false
#ifdef SERIAL_PORT
|| (SERIAL_PORT) == port
|| (SERIAL_PORT) == port
#endif
#ifdef SERIAL_PORT_2
|| (SERIAL_PORT_2) == port
|| (SERIAL_PORT_2) == port
#endif
#ifdef LCD_SERIAL_PORT
|| (LCD_SERIAL_PORT) == port
|| (LCD_SERIAL_PORT) == port
#endif
;
);
}
//
@@ -48,7 +48,7 @@ constexpr bool serial_handles_emergency(int port) {
//
// serial port where RX and TX use IRQs
#define DEFINE_IRQ_SERIAL_MARLIN(name, n) \
#define DEFINE_IRQ_SERIAL_MARLIN(name, n) \
MSerialT name(serial_handles_emergency(n), \
&USART##n##_config, \
BOARD_USART##n##_TX_PIN, \
@@ -57,7 +57,7 @@ constexpr bool serial_handles_emergency(int port) {
// serial port where RX uses DMA and TX uses IRQs
// all serial ports use DMA1
// since there are 4 USARTs and 4 DMA channels, we can use the USART number as the DMA channel
#define DEFINE_DMA_SERIAL_MARLIN(name, n) \
#define DEFINE_DMA_SERIAL_MARLIN(name, n) \
MSerialT name(serial_handles_emergency(n), \
&USART##n##_config, \
BOARD_USART##n##_TX_PIN, \
@@ -67,12 +67,17 @@ constexpr bool serial_handles_emergency(int port) {
#define DEFINE_SERIAL_MARLIN(name, n) TERN(SERIAL_DMA, DEFINE_DMA_SERIAL_MARLIN(name, n), DEFINE_IRQ_SERIAL_MARLIN(name, n))
DEFINE_SERIAL_MARLIN(MSerial1, 1);
DEFINE_SERIAL_MARLIN(MSerial2, 2);
// TODO: remove this warning when SERIAL_DMA has been tested some more
#if ENABLED(SERIAL_DMA)
#warning "SERIAL_DMA may be unstable on HC32F460."
#if PINS_EXIST(BOARD_USART1_RX, BOARD_USART1_TX)
DEFINE_SERIAL_MARLIN(MSerial1, 1);
#endif
#if PINS_EXIST(BOARD_USART2_RX, BOARD_USART2_TX)
DEFINE_SERIAL_MARLIN(MSerial2, 2);
#endif
#if PINS_EXIST(BOARD_USART3_RX, BOARD_USART3_TX)
DEFINE_SERIAL_MARLIN(MSerial3, 3);
#endif
#if PINS_EXIST(BOARD_USART4_RX, BOARD_USART4_TX)
DEFINE_SERIAL_MARLIN(MSerial4, 4);
#endif
//

Some files were not shown because too many files have changed in this diff Show More