Compare commits
2154 Commits
bugfix-2.1
...
2.0.9.2
Author | SHA1 | Date | |
---|---|---|---|
|
a185ce22cf | ||
|
2a4ee1a482 | ||
|
3a82b8a251 | ||
|
765b2b43f6 | ||
|
2e602b9b88 | ||
|
5d3e75905d | ||
|
eacb660e4b | ||
|
021ceeba0b | ||
|
25a131b942 | ||
|
b4c025a451 | ||
|
604a01cd1a | ||
|
064f91e9b0 | ||
|
34c9f64925 | ||
|
060b705dab | ||
|
262cd757fc | ||
|
dc4d2165f2 | ||
|
bcd2a483da | ||
|
d338872e85 | ||
|
2c30b75268 | ||
|
3deb54d0fd | ||
|
9ae6351a02 | ||
|
b7f95dc8d4 | ||
|
99647fa940 | ||
|
ea3df94213 | ||
|
a37580e4e8 | ||
|
b3fd03198a | ||
|
71b8a22d96 | ||
|
669b68497c | ||
|
6014dd9c7b | ||
|
5a54ba8316 | ||
|
be8e8260e2 | ||
|
5d8ca7c944 | ||
|
0e8e215d4e | ||
|
6cf95509cd | ||
|
ded719cc14 | ||
|
2630eefcc4 | ||
|
2b54a9c0ff | ||
|
bb1eb39ecb | ||
|
8b818f4ae5 | ||
|
4d113c2efd | ||
|
ab9609146f | ||
|
e7a25a45e6 | ||
|
023eaabc1c | ||
|
03d7fbd755 | ||
|
89898181bd | ||
|
e705a7724e | ||
|
5b593da04d | ||
|
9c4f9bc62a | ||
|
84d1619127 | ||
|
1386e78369 | ||
|
224371dfc6 | ||
|
033043218e | ||
|
fcbd99d941 | ||
|
209e5c27ca | ||
|
92eb819aee | ||
|
de4eed33e4 | ||
|
59ad93560e | ||
|
50e52c0fdb | ||
|
e679fafaaf | ||
|
6de25804eb | ||
|
ded8ee0a1d | ||
|
44d54a0d01 | ||
|
6e1c997a0a | ||
|
17c9450f0c | ||
|
d6a87aa75b | ||
|
64acb9fe78 | ||
|
22bf774d61 | ||
|
e2a790b759 | ||
|
ee1c1034e5 | ||
|
b661795ae5 | ||
|
6d96c221bd | ||
|
a596faf4e5 | ||
|
3ee27e7e35 | ||
|
6cf2cf7bd4 | ||
|
54416f780d | ||
|
9d73fcb959 | ||
|
f434915ad6 | ||
|
bbce951666 | ||
|
8a4fec9460 | ||
|
3a83516232 | ||
|
03344a0947 | ||
|
72d7bbbbf6 | ||
|
253f91765d | ||
|
4c7f8696ab | ||
|
f94de97cdb | ||
|
bae19a3737 | ||
|
cc3abcd2c5 | ||
|
9e18a543fa | ||
|
13bccd8441 | ||
|
5af3dbdb30 | ||
|
9f43452fbd | ||
|
61364906b3 | ||
|
105fd73c28 | ||
|
b4b69c0de3 | ||
|
a37be7236b | ||
|
bba7c0069f | ||
|
8916b05cb4 | ||
|
99028376e6 | ||
|
c2796fbf3b | ||
|
37777a78bf | ||
|
0da0aa9b2e | ||
|
9ffd3ed2e4 | ||
|
1176c10860 | ||
|
2e9f819d5f | ||
|
19353fc98c | ||
|
b21d62543f | ||
|
a42ecb843e | ||
|
93ff2cb086 | ||
|
086fa0f0a7 | ||
|
5e97f37a78 | ||
|
c14b162b9e | ||
|
61c000d96f | ||
|
c06a183f28 | ||
|
d1db17c6f5 | ||
|
d336a4d71b | ||
|
796309c903 | ||
|
53df1dfe4d | ||
|
6769718264 | ||
|
7704d84419 | ||
|
9b0e196ba2 | ||
|
fd594ab176 | ||
|
8cadcf6bb6 | ||
|
22fdfa9629 | ||
|
a0ebe7c8ff | ||
|
125c5bc345 | ||
|
95f27cf339 | ||
|
02ae4bc9b9 | ||
|
6bf2be66ed | ||
|
d8ef23eda7 | ||
|
73ef26a106 | ||
|
d51e70083d | ||
|
dc5ae16861 | ||
|
0aa87af82f | ||
|
0be98b98a7 | ||
|
f7ce107ac6 | ||
|
3f772df568 | ||
|
caa6ec0519 | ||
|
30665737dc | ||
|
0c401bddad | ||
|
eb0d80cb19 | ||
|
e62486a610 | ||
|
51d954a4fd | ||
|
416234f43a | ||
|
9ddb4de70a | ||
|
9741be5966 | ||
|
ecb625a666 | ||
|
de7f6c425b | ||
|
718227a94c | ||
|
bb12ebcca6 | ||
|
2e14bf15dd | ||
|
11070b79a3 | ||
|
4219ae9106 | ||
|
f803d74bc9 | ||
|
f0bca66d45 | ||
|
b3c8d9bec8 | ||
|
4a7d3a336b | ||
|
65e39116cb | ||
|
0c97a2afdc | ||
|
9c19d4705e | ||
|
be55401e3c | ||
|
c612b56bc1 | ||
|
8385be25cd | ||
|
2a323d0a8e | ||
|
c544711f14 | ||
|
a348f8e02c | ||
|
42d9b4c91f | ||
|
7d0efb452a | ||
|
418743cf6a | ||
|
eafd0ed765 | ||
|
0c0f84b659 | ||
|
166324fc7b | ||
|
3924545912 | ||
|
86e78410d6 | ||
|
157c60c93b | ||
|
d7f3228ec6 | ||
|
c56ac0c34a | ||
|
e71fa2b649 | ||
|
fefde2a644 | ||
|
a668a9d302 | ||
|
e3c294dc9b | ||
|
dc67705049 | ||
|
e0fa6ed4f8 | ||
|
a4cd654e48 | ||
|
06b963d9ea | ||
|
a36a6685ae | ||
|
83b8a0f2ac | ||
|
1866f51d08 | ||
|
4b2fdbeeb1 | ||
|
eeac85642f | ||
|
0bbe85d3e7 | ||
|
0af762d609 | ||
|
b567717762 | ||
|
2b2a8355c9 | ||
|
ac64d6915f | ||
|
1bee38a1c1 | ||
|
4e54fa2320 | ||
|
eba0ae4ee1 | ||
|
d49a26bcc6 | ||
|
a2759bc245 | ||
|
f642d8b79e | ||
|
bc773e9c96 | ||
|
ffde284288 | ||
|
e3b05dd6c2 | ||
|
8e84d24737 | ||
|
981191660d | ||
|
245b6e0884 | ||
|
c753071961 | ||
|
22ef6362ae | ||
|
80f8ec94aa | ||
|
381c5908b4 | ||
|
fbb5732dee | ||
|
90ed772590 | ||
|
3e559d5c1c | ||
|
eb8649ba42 | ||
|
99f917c022 | ||
|
55cf3bd5ee | ||
|
776ededca4 | ||
|
b16a72a7e6 | ||
|
f9809ca75a | ||
|
e402f43c02 | ||
|
2aad79fa15 | ||
|
89e84fec61 | ||
|
8d34a99d8f | ||
|
15cf97f0d5 | ||
|
c158d8023e | ||
|
bc68664c3b | ||
|
924e4f95c8 | ||
|
35df24e1cb | ||
|
74b0133bc9 | ||
|
12581bcc44 | ||
|
c7c56ac45f | ||
|
603b65e843 | ||
|
2e5e5c4a1d | ||
|
bcc31f68c6 | ||
|
f8f68f9259 | ||
|
7773504afa | ||
|
6b73b6c966 | ||
|
29dde9be2b | ||
|
b6cb56f396 | ||
|
8283f1577a | ||
|
0e9eb5f6ce | ||
|
61d0b08298 | ||
|
b57f73a488 | ||
|
40b99d8084 | ||
|
c944e4fc60 | ||
|
eebab93358 | ||
|
0074ea5e0b | ||
|
e190684fe6 | ||
|
69c1e79c30 | ||
|
b3a3d81406 | ||
|
f1161a9a5f | ||
|
95f0970d85 | ||
|
31a3cc6278 | ||
|
6e7c20e78e | ||
|
165ae139d5 | ||
|
42eb2347d4 | ||
|
3ab6789807 | ||
|
5054dc6ea2 | ||
|
ee54cd4bd7 | ||
|
399a240f84 | ||
|
fef76a76a3 | ||
|
a5459a68a6 | ||
|
b44d4746c8 | ||
|
6f9194eb29 | ||
|
6b2370fd7c | ||
|
ee64081696 | ||
|
a35c234ce1 | ||
|
5026797310 | ||
|
8334e92b6f | ||
|
8cf15e8546 | ||
|
7ae099f2be | ||
|
6d191d12c9 | ||
|
e213246ab9 | ||
|
650e1dd1d2 | ||
|
87cc387321 | ||
|
a7cfdeef21 | ||
|
3750ab5c8b | ||
|
a0704cb14f | ||
|
cad2f69687 | ||
|
31fbec9a00 | ||
|
b1c5afaf3c | ||
|
bc459a76f4 | ||
|
dd8ac689c3 | ||
|
24f0613b9f | ||
|
00b27b1aa7 | ||
|
f76b063e58 | ||
|
c746b1a2ae | ||
|
be13220e32 | ||
|
78c2eb6876 | ||
|
fea4e06484 | ||
|
91f11e0d41 | ||
|
573b8a62d9 | ||
|
eafb94e72d | ||
|
69b44c2309 | ||
|
e9a1c10b34 | ||
|
304a926b0a | ||
|
1bb61f27e9 | ||
|
091bdb79e6 | ||
|
968c3b7e4e | ||
|
ed14d14819 | ||
|
cae391bb48 | ||
|
2753b4eeaa | ||
|
6d05da0e5e | ||
|
4235e23c7b | ||
|
cd01421ac3 | ||
|
aa13c78458 | ||
|
b1c5dd985e | ||
|
3109a297d6 | ||
|
b878127ea0 | ||
|
6ea6556d09 | ||
|
2b37a71eba | ||
|
e3ae76d76d | ||
|
b24508907e | ||
|
ec3daadf43 | ||
|
ae76011e75 | ||
|
34066c1717 | ||
|
19fe3d5e79 | ||
|
ec518e6e7b | ||
|
003ce25acf | ||
|
3e5d867276 | ||
|
b1bcb387fa | ||
|
0fbd8c52bb | ||
|
08895e6cb0 | ||
|
38e775496a | ||
|
47631167f9 | ||
|
185e0dc7b7 | ||
|
bcf6ca59df | ||
|
1ba694cebb | ||
|
906fa05bd6 | ||
|
651f15f833 | ||
|
ef41c1f452 | ||
|
8050813d32 | ||
|
25e7e2fce0 | ||
|
a0f7f0e9e2 | ||
|
f3e0bc7a4b | ||
|
49ff1e837a | ||
|
4f8191b481 | ||
|
927a1a1738 | ||
|
f2f23e8097 | ||
|
cce585f6ca | ||
|
5bfb465ab4 | ||
|
ce7bbafb8f | ||
|
5ffc4bfe3a | ||
|
3ecc99e95d | ||
|
f22c5d3cc6 | ||
|
d8df8e0eed | ||
|
e38958f256 | ||
|
d7c77403fd | ||
|
c8898b5ca0 | ||
|
781257bc64 | ||
|
dec083dcc1 | ||
|
cdd9507493 | ||
|
dba877311e | ||
|
31fd3be6eb | ||
|
2b4284df81 | ||
|
d84e2d6e29 | ||
|
56355159c6 | ||
|
a7135d429b | ||
|
3b0a40cd5d | ||
|
83c74802f8 | ||
|
adc17933cd | ||
|
68c52673d6 | ||
|
2aa35577f2 | ||
|
14ffc66c45 | ||
|
2ea0832e0f | ||
|
ab050878e9 | ||
|
707a04022e | ||
|
d12c357793 | ||
|
ddf8668e16 | ||
|
3491e49c5f | ||
|
d322e495b2 | ||
|
5d80f7006a | ||
|
3e7a9e5d20 | ||
|
33e8769226 | ||
|
59842edbcb | ||
|
507e1e436e | ||
|
b27447ef48 | ||
|
c9a3ba99be | ||
|
967942460e | ||
|
bfa257902e | ||
|
3f103c91f0 | ||
|
2fd9971f41 | ||
|
a3063a9392 | ||
|
d8a02bbbdb | ||
|
76d4a395d1 | ||
|
c515bfb5fb | ||
|
83430be580 | ||
|
9bd9f91722 | ||
|
e6ef43e51a | ||
|
16bca67f2d | ||
|
d65eea550c | ||
|
46080b367a | ||
|
317afae37c | ||
|
930a608236 | ||
|
6e3c45580c | ||
|
e3df7d7bc8 | ||
|
c1fca91103 | ||
|
d3c56a76e7 | ||
|
4194cdda5b | ||
|
f5f999d7bf | ||
|
b4b607681c | ||
|
1e75eba27b | ||
|
f3f3d202ac | ||
|
c90fa530db | ||
|
aeb8097cbc | ||
|
04bea72787 | ||
|
ce95f56ac8 | ||
|
aff45fd455 | ||
|
c8f28d9d09 | ||
|
f3697e5e02 | ||
|
557ba20ff4 | ||
|
dd0e5c26d1 | ||
|
c9a3f41152 | ||
|
d13ffa0aba | ||
|
fb0be29604 | ||
|
7ca1550775 | ||
|
665a71b471 | ||
|
9268a4b28c | ||
|
529bbfad10 | ||
|
e7945c2277 | ||
|
5ee91c73ed | ||
|
2116e4202b | ||
|
19521d16cd | ||
|
057302b936 | ||
|
d62619c9c8 | ||
|
9c80a89597 | ||
|
00834ef03d | ||
|
5b7b065b96 | ||
|
a739af823f | ||
|
493eb446b7 | ||
|
1b45b3802a | ||
|
7898307d78 | ||
|
8da8aa140f | ||
|
4572af2bce | ||
|
6dc17f0e6e | ||
|
3fcf3f69ca | ||
|
a9fd2769f3 | ||
|
9adaf92674 | ||
|
e75c3b6c54 | ||
|
61f2bb1228 | ||
|
d1502f74ea | ||
|
83f9413196 | ||
|
cdc3e18d99 | ||
|
55a6315862 | ||
|
cf447a5442 | ||
|
7597b4fb40 | ||
|
7cd0f2a32a | ||
|
4dae5890e9 | ||
|
738ae4be33 | ||
|
e573611021 | ||
|
f60965a107 | ||
|
3995e8373c | ||
|
ddc82b84e2 | ||
|
87a943756a | ||
|
8e28731f96 | ||
|
cdbd438a04 | ||
|
3220c49f1b | ||
|
94e67a036a | ||
|
c977e82074 | ||
|
9878a5ab58 | ||
|
2de914c38c | ||
|
49b05ba989 | ||
|
85fa8c55c9 | ||
|
57eef65d9c | ||
|
894c954e8f | ||
|
046bac6769 | ||
|
765720e98b | ||
|
26a244325b | ||
|
f7d28ce1d6 | ||
|
c85633b47f | ||
|
6861b1ec82 | ||
|
003cb20b9f | ||
|
f1f622de01 | ||
|
dbb8f3db09 | ||
|
5d7c72db5a | ||
|
755adb8973 | ||
|
0977429138 | ||
|
1dfa6cbc80 | ||
|
e3998dc3df | ||
|
b6e1838fa6 | ||
|
908caba735 | ||
|
121f3b1096 | ||
|
9e373617dc | ||
|
5298fa357c | ||
|
2c15bc5d39 | ||
|
159f9c85a6 | ||
|
1d1f318752 | ||
|
40a9d82ae9 | ||
|
72c28d3462 | ||
|
ed224ca7d8 | ||
|
02e131b5fd | ||
|
5afb5e03b0 | ||
|
52a23b969b | ||
|
afcc7ea22b | ||
|
c463b81819 | ||
|
f688c7d20d | ||
|
0167bba371 | ||
|
7004fb702d | ||
|
2f2dd3322d | ||
|
31d3a781a8 | ||
|
a7fd6b68be | ||
|
6a1e78e614 | ||
|
770edea577 | ||
|
08a51b2820 | ||
|
ac11c689f7 | ||
|
f3e199fcd2 | ||
|
ffcbe68570 | ||
|
06e965e29c | ||
|
e865cc0249 | ||
|
5d8d03da03 | ||
|
0b3da61ac7 | ||
|
a24eb691fb | ||
|
c5c8ef436c | ||
|
83309c1ac8 | ||
|
ec2f4f512e | ||
|
ad991734c4 | ||
|
03184e1c31 | ||
|
cca5844ba9 | ||
|
45d3866f97 | ||
|
94edfc0a8f | ||
|
9fa9eebe51 | ||
|
4518506559 | ||
|
c1fb84e1a6 | ||
|
ea34aa2d3e | ||
|
d6cb657c85 | ||
|
0df9f30f14 | ||
|
d3e902af76 | ||
|
0b3420a012 | ||
|
5cf0975913 | ||
|
db90a180c2 | ||
|
d174d610bd | ||
|
e69e56ea52 | ||
|
0c66c713b6 | ||
|
95230c9792 | ||
|
7eea0ac6de | ||
|
b19a1f602a | ||
|
789235b925 | ||
|
00722c3294 | ||
|
cb4e3889ec | ||
|
76ec7040f1 | ||
|
b41365b495 | ||
|
6e18af6f81 | ||
|
12bc28bc8c | ||
|
3fa3be1f31 | ||
|
a468701511 | ||
|
f67cd07328 | ||
|
5cbdf51b4a | ||
|
7378afc6d8 | ||
|
7957408497 | ||
|
53fc13ba7f | ||
|
a0ea7cbf26 | ||
|
6310e023a7 | ||
|
5f594ce5d3 | ||
|
64a7dfbe7d | ||
|
5d0e94c11c | ||
|
0ca1170b6d | ||
|
addc91a409 | ||
|
450f329f05 | ||
|
1f72b4f65b | ||
|
50195ec990 | ||
|
2d9557cf40 | ||
|
5625ceec7d | ||
|
888e9cb60b | ||
|
d00f6cbe12 | ||
|
8abef30a75 | ||
|
158b26b875 | ||
|
d92decb774 | ||
|
af9d3c027e | ||
|
47c148628e | ||
|
e7c2a3a1da | ||
|
d32575ee74 | ||
|
f6b0398ca8 | ||
|
d5c6762332 | ||
|
a1154b226d | ||
|
731a018905 | ||
|
f45f4a8d54 | ||
|
e306abaf8a | ||
|
bc28aed5b1 | ||
|
93afb02994 | ||
|
0db64af9b2 | ||
|
4da3f45f41 | ||
|
8a8aeba17c | ||
|
e640d9246d | ||
|
81d7a6b81d | ||
|
08537dc891 | ||
|
c2741affe9 | ||
|
301cc85fec | ||
|
3433bfc3bd | ||
|
62ec696cae | ||
|
0d0ec3ec89 | ||
|
1d4c2454bc | ||
|
0fb606fa0a | ||
|
0ec489d6f2 | ||
|
7e3cf82a40 | ||
|
84e8d4c603 | ||
|
8373bd1b71 | ||
|
6202b2d324 | ||
|
e46f81af22 | ||
|
888cabff27 | ||
|
c6b6437761 | ||
|
1830629472 | ||
|
12ca73947b | ||
|
c39c17c1b5 | ||
|
27a26fcfeb | ||
|
48d5fae514 | ||
|
3153080301 | ||
|
309d82b6aa | ||
|
b9715c5a03 | ||
|
3ae0557258 | ||
|
02b6c0e881 | ||
|
cf5ea1ccdc | ||
|
011a344500 | ||
|
1570005683 | ||
|
899fcf51e6 | ||
|
7d5714fedd | ||
|
9f22aaea2f | ||
|
4ab19e7882 | ||
|
ecc419fce0 | ||
|
d5e62a8255 | ||
|
5859860a02 | ||
|
b8aeaa3bf4 | ||
|
a866a8f2fb | ||
|
214324aaa2 | ||
|
181e1280af | ||
|
2316fb2d05 | ||
|
81ab756759 | ||
|
c50a9ef055 | ||
|
3d3c0591e8 | ||
|
e0f60c3811 | ||
|
59e55ea6fb | ||
|
df36d759fc | ||
|
fe24aa2254 | ||
|
1a44270284 | ||
|
a860f7f5f7 | ||
|
e5fc3f3a62 | ||
|
276fd6b077 | ||
|
27754a76dc | ||
|
b586b64119 | ||
|
9c86eef98b | ||
|
db054ba757 | ||
|
2e726c46c8 | ||
|
791edd0cec | ||
|
e4760ea2b0 | ||
|
61ee5b1d76 | ||
|
b6ce7a9f74 | ||
|
99fa641a24 | ||
|
c67e115f61 | ||
|
027a5a872d | ||
|
973f65f80c | ||
|
643f04681c | ||
|
713e606b28 | ||
|
ce18713f57 | ||
|
761d283d6d | ||
|
4512bcd72c | ||
|
47dbea9334 | ||
|
326b1c1225 | ||
|
e26eebfb2f | ||
|
107dd313bd | ||
|
02a99e3f0b | ||
|
896123513e | ||
|
562f3e43bc | ||
|
ed477abbd5 | ||
|
21518fbd4e | ||
|
52f928700a | ||
|
c96340980a | ||
|
8384582116 | ||
|
ac5b39b354 | ||
|
0f7161785e | ||
|
49fba5a82a | ||
|
fb7bdabb70 | ||
|
5ab64708c5 | ||
|
f14d0e0983 | ||
|
ca84e5b1f2 | ||
|
c66cbf0d69 | ||
|
f69ce3e02b | ||
|
2251038ab8 | ||
|
42d63258e9 | ||
|
d34a143d82 | ||
|
4e9eb95830 | ||
|
9a31702a75 | ||
|
34f7142323 | ||
|
00ea75ce82 | ||
|
6d9aaf8de5 | ||
|
a82b3955bb | ||
|
c9a7fd1722 | ||
|
1bd35072cb | ||
|
c8c83e9f52 | ||
|
ab2441c088 | ||
|
2c73964b2b | ||
|
ee21e31a17 | ||
|
93dfd411fc | ||
|
c197ecc99b | ||
|
c2c73215b2 | ||
|
1ba0ed8121 | ||
|
c5ab0a66b7 | ||
|
f3510db367 | ||
|
c46c2c4f3c | ||
|
0b5c25aa7c | ||
|
ba5644376c | ||
|
c4379db8fc | ||
|
cdd2450a97 | ||
|
84445b82e4 | ||
|
05d7d37872 | ||
|
a8f8201c90 | ||
|
7297cc13b0 | ||
|
4f174afc1a | ||
|
96bdc4c830 | ||
|
9fbce867ee | ||
|
fea4835941 | ||
|
47a13263f6 | ||
|
82e6a2ed62 | ||
|
b1be96e40e | ||
|
a4d5f96e9a | ||
|
a4f1623012 | ||
|
fe99bb4b9b | ||
|
259115bb3f | ||
|
a572e2ed12 | ||
|
5ad7118aea | ||
|
16af2148b9 | ||
|
e787cdd1cb | ||
|
2b0fcc79c5 | ||
|
4e77fe50a4 | ||
|
9902e6fb9f | ||
|
f18da95d38 | ||
|
368fcaee54 | ||
|
badbb4a500 | ||
|
b96c3a063f | ||
|
84a2746d05 | ||
|
2059c6e4d0 | ||
|
bf3fce3550 | ||
|
19078966d9 | ||
|
f734f79f5b | ||
|
627331aa68 | ||
|
3ed4503c30 | ||
|
f1986545da | ||
|
9f48314cb4 | ||
|
7c275285ea | ||
|
4ffb95a736 | ||
|
943a8ebdc6 | ||
|
8d73a6c4e2 | ||
|
e817db62a4 | ||
|
85eb179acf | ||
|
3d70b645b6 | ||
|
c83b6217f9 | ||
|
a97f6c4c74 | ||
|
710b1bcb6d | ||
|
b4617e7904 | ||
|
a9f022dacf | ||
|
5ff4476ccb | ||
|
98a6015d3a | ||
|
05b281ad9e | ||
|
3c9ffa77f9 | ||
|
2a32d14dc4 | ||
|
e087271d48 | ||
|
375404290d | ||
|
5c8f7c7ea3 | ||
|
c6774812fa | ||
|
af13128430 | ||
|
6b7a92035c | ||
|
9e8b158ee1 | ||
|
3226e12037 | ||
|
2a011779e9 | ||
|
faa1118ca7 | ||
|
3341e4f88c | ||
|
976403d10d | ||
|
ff729744e5 | ||
|
d924adef75 | ||
|
dca4c2904e | ||
|
e806c3376a | ||
|
c9674cd809 | ||
|
259d8f19b3 | ||
|
9a1c4f91fe | ||
|
4bdc303f6c | ||
|
5b0dc4d325 | ||
|
39c30d6fd6 | ||
|
e50af65a1b | ||
|
c4d757c6f7 | ||
|
ac4f3c0c7e | ||
|
107cc1f6a1 | ||
|
f49dc90655 | ||
|
7cfaa50148 | ||
|
dec9b9ad2f | ||
|
7973b954b4 | ||
|
e0711d87a0 | ||
|
3bbcfb0185 | ||
|
86a8e8970a | ||
|
f5d612b213 | ||
|
a2d2e19f84 | ||
|
35c32602f4 | ||
|
0d04dcd9ae | ||
|
f6f5ed166f | ||
|
b644aca98c | ||
|
e5ab4a7283 | ||
|
f36eb4646b | ||
|
0c3eb04a37 | ||
|
09233129a8 | ||
|
2480c82d76 | ||
|
7fb04b3656 | ||
|
166d4a26f3 | ||
|
b6169a957d | ||
|
ead6d99069 | ||
|
59a9be5f5a | ||
|
d81838e9fa | ||
|
894688c547 | ||
|
059e6514ca | ||
|
a729999f55 | ||
|
f332cca4a7 | ||
|
242ef2b2b4 | ||
|
5c0f909949 | ||
|
633491833c | ||
|
b713ca2638 | ||
|
46246c8db6 | ||
|
e1cca6d97b | ||
|
01f3dc6d41 | ||
|
0e1a1959de | ||
|
6c70402161 | ||
|
6652c7c435 | ||
|
7f3208ba79 | ||
|
b680ddc66c | ||
|
7a5a6ca53f | ||
|
b80ec493ed | ||
|
d4a6014578 | ||
|
6ee61c8380 | ||
|
db4d9b7fcf | ||
|
95136abc47 | ||
|
5b586ea4d8 | ||
|
05a124930e | ||
|
423c4e4636 | ||
|
6c6beeee70 | ||
|
74457dc989 | ||
|
34b76c6f80 | ||
|
35355d1f1b | ||
|
7c37a82821 | ||
|
5a01cdb81c | ||
|
6cfd190107 | ||
|
10ec13b2c3 | ||
|
8a3d0b23cf | ||
|
c90927cf54 | ||
|
f187a5304b | ||
|
d5b09fdbf5 | ||
|
c8b73b00be | ||
|
ee74cee5d4 | ||
|
99eedf77b5 | ||
|
d61e7dd685 | ||
|
864d27d460 | ||
|
3c86eb18a5 | ||
|
c4fe072751 | ||
|
0e61b4a982 | ||
|
92da7659f4 | ||
|
be8b547261 | ||
|
ef57a3e585 | ||
|
b71f1e1edd | ||
|
f3db2551a6 | ||
|
7eace53eb7 | ||
|
c6e82160e4 | ||
|
c8cd824be2 | ||
|
854ab04ee4 | ||
|
4e6ed43198 | ||
|
2d4a1cd428 | ||
|
fd5f1f1f5d | ||
|
fbb30a2570 | ||
|
043bd34e2b | ||
|
e4a67c8496 | ||
|
0a097b7a1e | ||
|
4343de3ee2 | ||
|
3f34916c57 | ||
|
0e6e7b0608 | ||
|
334bafc9c1 | ||
|
8eedec04a1 | ||
|
5aa9cc82a8 | ||
|
6183cd0731 | ||
|
971fb8729a | ||
|
124fb331cc | ||
|
d20375c185 | ||
|
fff95b7173 | ||
|
130dfbe11c | ||
|
68e50a725a | ||
|
3f9fe2dac4 | ||
|
e1283b8a86 | ||
|
653608e931 | ||
|
80aac1b711 | ||
|
b428a53b7a | ||
|
94d1637221 | ||
|
3a5ac12321 | ||
|
c9d757fc0e | ||
|
532dbb8064 | ||
|
adf26fd69e | ||
|
13dee4d059 | ||
|
fc09581aa3 | ||
|
52c539eced | ||
|
5fdab77cc2 | ||
|
00ceeeae7a | ||
|
7240c2172b | ||
|
f3d15b995c | ||
|
b71af6a50f | ||
|
362776c38d | ||
|
e6bf89e82b | ||
|
19c38f1a8a | ||
|
ac5f2a9300 | ||
|
088b5cfec2 | ||
|
b33afb790e | ||
|
73332f4df1 | ||
|
7cb286bb6e | ||
|
e9d62822bd | ||
|
8d05a823e9 | ||
|
c051a2ecae | ||
|
dc0247c57e | ||
|
8fca59f63b | ||
|
1ab1c62f03 | ||
|
a19c79d714 | ||
|
dc11874abe | ||
|
61753bb5e3 | ||
|
3f1a8c2a1c | ||
|
bdb67b4397 | ||
|
c4fcf8bfd7 | ||
|
7e8b02145c | ||
|
a09d7a59b4 | ||
|
27721c564f | ||
|
2e040d03df | ||
|
2724816152 | ||
|
03396922ab | ||
|
b4a3013c28 | ||
|
903c2915ed | ||
|
3ca2195ed0 | ||
|
c759b2d2a6 | ||
|
adbe152256 | ||
|
3883853817 | ||
|
ead41ac491 | ||
|
8a35c9a1a0 | ||
|
10da0f92a0 | ||
|
ca79af7a46 | ||
|
ba4ce63858 | ||
|
f31a8f4086 | ||
|
9c47a9256d | ||
|
8ec86b810d | ||
|
69fcd9210f | ||
|
b95e60dbbd | ||
|
8bca8e5ba0 | ||
|
92b5f06bf9 | ||
|
4316522146 | ||
|
c0d1fd14f8 | ||
|
f740226a82 | ||
|
54f401506b | ||
|
4d75c2e0f9 | ||
|
7361fbfe28 | ||
|
897291c470 | ||
|
6320928795 | ||
|
9acd2e176d | ||
|
c7efb2d964 | ||
|
41ab63897f | ||
|
77f48d2bad | ||
|
897d29ea31 | ||
|
13f0e4729c | ||
|
86fd38ef42 | ||
|
127a4ada93 | ||
|
1aae6395c6 | ||
|
1bf469411a | ||
|
47b872f5d0 | ||
|
80c1be919f | ||
|
243c8b4e1a | ||
|
d7fbb1512a | ||
|
8416edd127 | ||
|
77966135e8 | ||
|
6054052248 | ||
|
bbb49c43e1 | ||
|
9437c72ef6 | ||
|
bb511195b8 | ||
|
582458998f | ||
|
bb5c643dfb | ||
|
bf631046c0 | ||
|
0d7c02d2c6 | ||
|
129e9151da | ||
|
4771379302 | ||
|
62a65d3fdc | ||
|
032152c41d | ||
|
da80fd782c | ||
|
460cdf4c09 | ||
|
0badef42d5 | ||
|
811b3d0f08 | ||
|
8de850fd07 | ||
|
1e5995335c | ||
|
4153b6a30b | ||
|
c631fb79d5 | ||
|
9ae204df9c | ||
|
e7658ec5f5 | ||
|
b3656c387f | ||
|
164199614c | ||
|
219f92c4ca | ||
|
0e37370b0c | ||
|
845b99feb7 | ||
|
4b9f2f13b1 | ||
|
b44de74b91 | ||
|
59d16eb189 | ||
|
c7004d100c | ||
|
07a3ed1d7e | ||
|
cc545a73a1 | ||
|
efa1e56369 | ||
|
8da8e7d17b | ||
|
b10b76e882 | ||
|
be058430b4 | ||
|
7a559e4733 | ||
|
5fb8818ae5 | ||
|
cdefc19129 | ||
|
918894fd84 | ||
|
1bc65be70f | ||
|
b9d19291fe | ||
|
2aaff47c9d | ||
|
a582d1dc2f | ||
|
5acd8f36a4 | ||
|
efaff24145 | ||
|
b059c9e5c0 | ||
|
82122fe9cd | ||
|
3beb6a9df3 | ||
|
a576ab83e9 | ||
|
70ee5e94fd | ||
|
69da8719cf | ||
|
4ce87eeb91 | ||
|
24a801b660 | ||
|
786bba39ff | ||
|
bed027f41f | ||
|
17a4ef6730 | ||
|
56383d3ca0 | ||
|
60c9a9e654 | ||
|
5398bfab36 | ||
|
a8a6040b78 | ||
|
22db4c0448 | ||
|
7bbf958e5c | ||
|
0b7de80a6f | ||
|
de37fbffa3 | ||
|
f4a3db8db8 | ||
|
c409a6df5e | ||
|
71be210795 | ||
|
67942622f1 | ||
|
5252a32de4 | ||
|
5e5c0d65f3 | ||
|
3dde2722bd | ||
|
befcdeb74d | ||
|
0c62fd02b0 | ||
|
8d2f1851eb | ||
|
b355f4605e | ||
|
f6c4c26937 | ||
|
c334151294 | ||
|
faf4cb1b74 | ||
|
ccbff12d6a | ||
|
a02e884415 | ||
|
1fdf283e5d | ||
|
910059adcb | ||
|
a8bd376fd4 | ||
|
c69f9b9883 | ||
|
69b873b766 | ||
|
6162560b69 | ||
|
f101e19257 | ||
|
7836b85c96 | ||
|
522c78b5e6 | ||
|
aabd40a7a2 | ||
|
e351ea2ee8 | ||
|
efc396bd05 | ||
|
ae53998a88 | ||
|
d814d8f954 | ||
|
63e3117510 | ||
|
cab93c2ad8 | ||
|
3acf86510d | ||
|
418524b1be | ||
|
a5d2180bf5 | ||
|
0364ae4908 | ||
|
a7c97182f7 | ||
|
1e7426e549 | ||
|
fd6501207f | ||
|
7f8188ccb6 | ||
|
f5341da94d | ||
|
a588f69f16 | ||
|
86bf374fc4 | ||
|
a3d6442d02 | ||
|
62d20c8b37 | ||
|
726e2e9bc0 | ||
|
eedd9c2bda | ||
|
5c181562f6 | ||
|
104aceb44a | ||
|
bee794e598 | ||
|
483804bafd | ||
|
55709b9d2c | ||
|
8eb32cef24 | ||
|
92f847c8f7 | ||
|
be3caa4686 | ||
|
fa6a2f52e2 | ||
|
7e188c48e1 | ||
|
928cd1b8ab | ||
|
4145d85ef1 | ||
|
9901b4e9f1 | ||
|
4e46de66d3 | ||
|
7c7d28345e | ||
|
8690f4862d | ||
|
c9a9c00f61 | ||
|
6a60d47b90 | ||
|
f19a1833bd | ||
|
074d3f6266 | ||
|
92eee0386f | ||
|
32caeecffb | ||
|
5ef0475dc5 | ||
|
aa5ac6c3b2 | ||
|
fd7e34312a | ||
|
d10c734730 | ||
|
c64a5a4b8f | ||
|
e3cd293f4e | ||
|
d324f3b16a | ||
|
01c9d49f09 | ||
|
cc1b8c2d0b | ||
|
ed7698efaa | ||
|
efe2859227 | ||
|
4b4498be93 | ||
|
eff2330ce1 | ||
|
8884b1f9a6 | ||
|
bb747bcd62 | ||
|
b1f0671541 | ||
|
abeefaac7f | ||
|
90c04ee15d | ||
|
d3d8fd6d9b | ||
|
c6c5cc7246 | ||
|
d5465f1ad8 | ||
|
3f8a83b285 | ||
|
385152b3d2 | ||
|
66c69aef6a | ||
|
f4f152bd01 | ||
|
eaeb9d1b20 | ||
|
a42755a061 | ||
|
5d35e3ccf5 | ||
|
7ef03a761b | ||
|
f570791e19 | ||
|
25152a8cef | ||
|
14b7eb1c5a | ||
|
3b4c5f982c | ||
|
2c58d0881b | ||
|
7a748bd565 | ||
|
cf996949fa | ||
|
79672d51f6 | ||
|
c3dc74bba0 | ||
|
f539e319f0 | ||
|
eda5a884c6 | ||
|
7b33ceebbb | ||
|
8aa453d75b | ||
|
ed1c0b71df | ||
|
63f083db96 | ||
|
a74d4609af | ||
|
427a2fca4d | ||
|
910908fb32 | ||
|
a8800d5b0a | ||
|
adca49e432 | ||
|
214f6cb6e3 | ||
|
3395d10e82 | ||
|
2e93923e24 | ||
|
892e83e872 | ||
|
10482ca49c | ||
|
9947072d2d | ||
|
6d3e22dd4a | ||
|
e3d7603d54 | ||
|
f9dd484381 | ||
|
48bf80d190 | ||
|
089bfad490 | ||
|
f1bf1e1835 | ||
|
35e1917655 | ||
|
121d4bf52a | ||
|
fadc8a1944 | ||
|
a5dd4028ac | ||
|
a510c16838 | ||
|
156b5f4749 | ||
|
fa89a7b0bc | ||
|
a24298f625 | ||
|
ec83a96484 | ||
|
a03ebfda52 | ||
|
323bf47738 | ||
|
ad15890a81 | ||
|
60aeed99c6 | ||
|
c529209c8f | ||
|
be3e45d759 | ||
|
7c8cff0d3c | ||
|
256e94980e | ||
|
aa65c6e477 | ||
|
59b5cb6fe2 | ||
|
a33c689c40 | ||
|
30d9839631 | ||
|
f0b7f27029 | ||
|
a1313c7066 | ||
|
31c84d4559 | ||
|
076f12e82d | ||
|
231e5a5eed | ||
|
350dc4ca05 | ||
|
ff2f6cb110 | ||
|
b667722184 | ||
|
bc3f2f246f | ||
|
28548e7ea2 | ||
|
023ef753b9 | ||
|
b799d0d073 | ||
|
be6e1ccba2 | ||
|
2a58aa2181 | ||
|
525cdeae19 | ||
|
c831aabe14 | ||
|
642110b072 | ||
|
56e2f39175 | ||
|
3e26e23e60 | ||
|
588fec6474 | ||
|
87fbb89330 | ||
|
a4701fbd3e | ||
|
e02fd232ba | ||
|
f7f531e59d | ||
|
51e3d8f08b | ||
|
02b65de6a2 | ||
|
c3a1cd10ab | ||
|
e5d094d2bd | ||
|
d6efe75251 | ||
|
f50abfcb1b | ||
|
bee6b8af8f | ||
|
1b6db623a7 | ||
|
a45603a344 | ||
|
fa9463528d | ||
|
82b6044dbb | ||
|
be7aab204f | ||
|
f82b3f0f51 | ||
|
3d7680a426 | ||
|
878305671b | ||
|
46d2dc9bee | ||
|
e188b3e28c | ||
|
a59164d5c8 | ||
|
0b0eb6a119 | ||
|
e6b3c74069 | ||
|
20bd54f6d3 | ||
|
6599e4ea53 | ||
|
5617d64119 | ||
|
b81a9e54a3 | ||
|
cbe27daafb | ||
|
430855fdca | ||
|
e9bde7e6fc | ||
|
5aebc9fb0c | ||
|
d0c2b643f8 | ||
|
c0ad4718a4 | ||
|
8f188adc32 | ||
|
74042d368e | ||
|
2a5b32f109 | ||
|
0c383b858f | ||
|
aecfd95592 | ||
|
9f740d1872 | ||
|
70d393b5cd | ||
|
f193cda03b | ||
|
e3e9982fec | ||
|
4ca3c0bc86 | ||
|
38bb3b86d2 | ||
|
ad7fe15154 | ||
|
91e9599554 | ||
|
47fd7fcaea | ||
|
50247fc894 | ||
|
37dd0fd2d6 | ||
|
1932e70e72 | ||
|
ea81790d48 | ||
|
2384e5c9c9 | ||
|
72eda1d3ae | ||
|
3a73f04fd3 | ||
|
107834f899 | ||
|
b6cd7aaf17 | ||
|
4b6fa1b54d | ||
|
284cc8f62d | ||
|
ef35fc60c1 | ||
|
ec2843bcf3 | ||
|
8a18bb8440 | ||
|
21b15a0a09 | ||
|
c400c54b86 | ||
|
1a618b1b31 | ||
|
a09d096b87 | ||
|
c88a7935d6 | ||
|
43bbf04764 | ||
|
10b8737c7d | ||
|
dab29dddc3 | ||
|
20ea00e7f6 | ||
|
6a8ab8f1e6 | ||
|
eba2937715 | ||
|
07954edadc | ||
|
1c695e130e | ||
|
f42d15437b | ||
|
564e2e865c | ||
|
c76f179487 | ||
|
29a962320c | ||
|
e927ef94a6 | ||
|
f929123a7b | ||
|
d34bbee304 | ||
|
74c509d36e | ||
|
448cf2c357 | ||
|
f22b677906 | ||
|
272265c636 | ||
|
a8ba3c4e2e | ||
|
523bc7d355 | ||
|
1dd17d857e | ||
|
a54b07d3ae | ||
|
f63a7b978d | ||
|
04483dd307 | ||
|
3c5c36de50 | ||
|
deb8df8eff | ||
|
3231741cd2 | ||
|
747bde7e64 | ||
|
7c9c897dac | ||
|
fc1deea2b8 | ||
|
7421282d9a | ||
|
9d5a391b54 | ||
|
6ec6d1d39d | ||
|
e2c57f6d47 | ||
|
664e9d6dfe | ||
|
0c24347cdb | ||
|
c86ede8cfb | ||
|
38a62f0d5b | ||
|
27b2e2d3e7 | ||
|
4e940ffcc2 | ||
|
109c08e9e5 | ||
|
03cdfafc2a | ||
|
6cca5a9f92 | ||
|
629f0e21c9 | ||
|
a711e22b17 | ||
|
82663c7d11 | ||
|
8cd25f35c2 | ||
|
300a944af6 | ||
|
5e57e60692 | ||
|
28cd6eca88 | ||
|
82c1bac4e3 | ||
|
08717ef117 | ||
|
56c0608e4d | ||
|
9c9fd8714e | ||
|
69b61fef67 | ||
|
add6b836df | ||
|
a95a41ef73 | ||
|
f3805edbd6 | ||
|
7f91ff07c4 | ||
|
d5e13f255d | ||
|
9ebe050646 | ||
|
7f84a7a85e | ||
|
264e921d3f | ||
|
7ad127668d | ||
|
35d3e74267 | ||
|
2abde8a068 | ||
|
afd3ee264b | ||
|
2e193b9a29 | ||
|
48c2065a17 | ||
|
7729a0c3bb | ||
|
f1b32b808f | ||
|
5ef1d053eb | ||
|
0264841dc4 | ||
|
40071c3fb9 | ||
|
d92f69f137 | ||
|
15febdfe07 | ||
|
1040f14da4 | ||
|
11f08804d1 | ||
|
29d45b1144 | ||
|
bd38e59479 | ||
|
b6d2671260 | ||
|
5f9ccb361a | ||
|
ef51bd16dc | ||
|
125ad2003d | ||
|
ccac37613b | ||
|
292e83466e | ||
|
172cc0dd03 | ||
|
26d3caf97c | ||
|
7848096acb | ||
|
18869c666f | ||
|
1c81a126c5 | ||
|
180fe914b6 | ||
|
dc644df9bc | ||
|
550306d1b6 | ||
|
78eb12958a | ||
|
cc9df782ce | ||
|
562c41af4e | ||
|
b5e7b8e29e | ||
|
2979504b9c | ||
|
a01fab662c | ||
|
daa2a04fc9 | ||
|
983bb89063 | ||
|
3d9b453000 | ||
|
90f647b6be | ||
|
7f7c27be30 | ||
|
2b63a1b4e1 | ||
|
90f3d1f7a6 | ||
|
65a5eb47b3 | ||
|
6b5ddfe235 | ||
|
2f57b1d529 | ||
|
7e535022ab | ||
|
cb1d2de838 | ||
|
96acbb2506 | ||
|
030f745b08 | ||
|
dc949f5488 | ||
|
7b745345f7 | ||
|
3ee61e2084 | ||
|
26a1cd9a00 | ||
|
27c74d2f72 | ||
|
a5ee22baa2 | ||
|
02c3c314fe | ||
|
012745b218 | ||
|
d4b86322a9 | ||
|
ac74786c2b | ||
|
cf43c9901f | ||
|
3030bf4274 | ||
|
dc144fb910 | ||
|
45b242d5f7 | ||
|
42b37da1e7 | ||
|
8eb5950ebd | ||
|
ccb5e34052 | ||
|
ee48fc6544 | ||
|
2365df532f | ||
|
24c2ce6a87 | ||
|
791fba3187 | ||
|
367c447ff8 | ||
|
ca730314e7 | ||
|
b2d6b8c567 | ||
|
170ba87648 | ||
|
44f689320b | ||
|
7da62cc9f7 | ||
|
841f0d5778 | ||
|
367e717aeb | ||
|
5bf82b34c6 | ||
|
734dd1c293 | ||
|
4052ef7097 | ||
|
dfb6dd2ad2 | ||
|
426d555f6e | ||
|
b129652597 | ||
|
ec5b2aab15 | ||
|
af5cf823ea | ||
|
7e94079b5b | ||
|
d81c1961c2 | ||
|
45e0dd1966 | ||
|
a1ec49feda | ||
|
3afa6e526b | ||
|
ecabbb6974 | ||
|
989ef47bde | ||
|
5a918e2b2e | ||
|
2dd1522e30 | ||
|
e49f267c4a | ||
|
afed97bf0e | ||
|
9ba113bc05 | ||
|
35d7618117 | ||
|
10c8647c1b | ||
|
1767a3bd70 | ||
|
5082106145 | ||
|
b643a07b66 | ||
|
dd92c79339 | ||
|
b767a82bd8 | ||
|
67d58ccb98 | ||
|
bbfac75f19 | ||
|
930aad6d31 | ||
|
65383dd616 | ||
|
2ae8014da7 | ||
|
b79e2d1e8d | ||
|
172996f2b3 | ||
|
3c512648da | ||
|
e335e74379 | ||
|
5c90d0d0ae | ||
|
95fb749923 | ||
|
d9a47ec075 | ||
|
c9c17b8863 | ||
|
2a61ce80b8 | ||
|
3eaeaa8af3 | ||
|
261e8df837 | ||
|
d18ab2d206 | ||
|
08f2735e86 | ||
|
aec215aaf3 | ||
|
4b08e06fa6 | ||
|
2774b70fbf | ||
|
3dbe4ac593 | ||
|
ba28660acb | ||
|
cec9075361 | ||
|
176cb29eab | ||
|
3cb7128116 | ||
|
88e88743b9 | ||
|
e6092ad146 | ||
|
59914df5b7 | ||
|
67fbee389e | ||
|
b590cee35a | ||
|
0c81d86cd4 | ||
|
d6e93bb9c7 | ||
|
2bb94b4329 | ||
|
fa0614516a | ||
|
d08511c5dc | ||
|
2a4cdf5a5d | ||
|
f5f6170858 | ||
|
d7d1ef8228 | ||
|
d4669dbf6a | ||
|
f43f71646e | ||
|
aecf545446 | ||
|
3b42e0263a | ||
|
5a74114e23 | ||
|
3bab0fccc2 | ||
|
2a8fdb8ee4 | ||
|
6c103b72a2 | ||
|
ea9e28bb69 | ||
|
c94afc7592 | ||
|
80909e4424 | ||
|
c59f64ce49 | ||
|
e232f93018 | ||
|
62d578de9e | ||
|
a625fee035 | ||
|
b586a30e7b | ||
|
676354f1d1 | ||
|
e44a97a096 | ||
|
35597ae336 | ||
|
c3e8b46284 | ||
|
d3ee5d7dfe | ||
|
2fed3982d6 | ||
|
f9b04af650 | ||
|
b1b2ecba6c | ||
|
6601ca7a22 | ||
|
1b51000736 | ||
|
994cda3b6b | ||
|
2becb5ebf7 | ||
|
32433fae61 | ||
|
99ce660aed | ||
|
01b9badb51 | ||
|
f27b61cb0f | ||
|
52bc509fcf | ||
|
2984960793 | ||
|
e32bdf6a93 | ||
|
35d75c354e | ||
|
9f85a15955 | ||
|
b1b8161447 | ||
|
c6f17ac01e | ||
|
53a4b8fa33 | ||
|
a90b90e98d | ||
|
ff9a27ee9f | ||
|
cf0a817db1 | ||
|
e00745c548 | ||
|
af956bbb32 | ||
|
4343a96fac | ||
|
9124f1d7c8 | ||
|
32ca42ead3 | ||
|
25bb249ac6 | ||
|
332adafa23 | ||
|
a44aae268a | ||
|
52c090dfbe | ||
|
141f6825ce | ||
|
fff5649b6a | ||
|
34c16bb395 | ||
|
cedc5d340f | ||
|
3becc3ad63 | ||
|
19498040ef | ||
|
060b2f4989 | ||
|
2ecc3bb560 | ||
|
d5340675ae | ||
|
dea995e19f | ||
|
473abe8eb4 | ||
|
386e643179 | ||
|
1fa19e1fc2 | ||
|
13720ce6b2 | ||
|
02b668baf5 | ||
|
57dc1a0649 | ||
|
8ae8e1e455 | ||
|
7905aa64fa | ||
|
d81abf1d50 | ||
|
6a5799fc7d | ||
|
3e4d9aa9bb | ||
|
2004080c9d | ||
|
70dc2ee9bb | ||
|
7825fc63a0 | ||
|
33b2f0700e | ||
|
647981ef44 | ||
|
252fd66b76 | ||
|
1ef1ea0b3e | ||
|
14fe7ee414 | ||
|
bd22194438 | ||
|
ea65e10dc7 | ||
|
48a24202ef | ||
|
9b1ed45b3e | ||
|
f163f1940d | ||
|
fdcd28a0ec | ||
|
d2863466ac | ||
|
5047979340 | ||
|
7ab74d22c4 | ||
|
c1729330c5 | ||
|
2dafba1ad2 | ||
|
67e0e6d5ad | ||
|
8b4f82cd07 | ||
|
2c7b5fe1f2 | ||
|
a30e8baf3e | ||
|
2e01eb9189 | ||
|
2adac87c45 | ||
|
72f9fdc05f | ||
|
cbed6f4241 | ||
|
50de8bd6fb | ||
|
7e09160ba3 | ||
|
3facf34f5f | ||
|
2553a18f40 | ||
|
0b13608bad | ||
|
8143d70829 | ||
|
92bbf3ba18 | ||
|
5441ee5a7a | ||
|
fde169d3ef | ||
|
3516c3f936 | ||
|
e6de60d04e | ||
|
cd839a251f | ||
|
fadee1b46b | ||
|
3e9c6c6297 | ||
|
45385e737c | ||
|
c86e14c6ff | ||
|
b5da52007b | ||
|
22ef4fe26c | ||
|
ebca2efb24 | ||
|
61d500462c | ||
|
6002dc634e | ||
|
563bd01789 | ||
|
cc863ba378 | ||
|
fb28e0cba9 | ||
|
cd33062a81 | ||
|
1ac7cf2ab6 | ||
|
53b7ad3a92 | ||
|
01c161d380 | ||
|
af4c2dab8d | ||
|
2a755d68d9 | ||
|
770f2b1e02 | ||
|
85c6ffb364 | ||
|
bf3f7ae5b9 | ||
|
9804677669 | ||
|
c5614c8529 | ||
|
6bafa69f8f | ||
|
a2c4c4a916 | ||
|
de42ef017f | ||
|
69917690f3 | ||
|
02b17886c9 | ||
|
0507df61b2 | ||
|
0af95b188a | ||
|
bf3b36ae6a | ||
|
58ce9a85c1 | ||
|
dc5f86e039 | ||
|
46c8775542 | ||
|
059d966d7b | ||
|
2069ab3a15 | ||
|
bb90bc6165 | ||
|
de4f882a22 | ||
|
9aff5cb095 | ||
|
782b9ce69e | ||
|
806c908091 | ||
|
04a712dacc | ||
|
3453d2d17a | ||
|
25bf561aed | ||
|
ad3c475dd1 | ||
|
85573909d1 | ||
|
63e6437d66 | ||
|
58deab1915 | ||
|
ac900b17e0 | ||
|
a11ba51389 | ||
|
5cd004defe | ||
|
03a5c7f52a | ||
|
717de1e703 | ||
|
33f291d769 | ||
|
7f93173659 | ||
|
4648351270 | ||
|
4bd1ecf8a7 | ||
|
584c836918 | ||
|
ac0511f02a | ||
|
32b854a98b | ||
|
943a594ba0 | ||
|
def328eec1 | ||
|
e26edbc623 | ||
|
d06e526dc2 | ||
|
9a2de1570c | ||
|
3065e4f941 | ||
|
0fedd76819 | ||
|
fd83407991 | ||
|
3d521a2e34 | ||
|
affb5e53df | ||
|
d6b1563655 | ||
|
9d02cedfed | ||
|
449a31dea9 | ||
|
bfa6cd3693 | ||
|
f588d50d57 | ||
|
27c067612c | ||
|
a3a5b334c4 | ||
|
cbaba010f2 | ||
|
8b69d697dd | ||
|
632ac54440 | ||
|
873b5db13d | ||
|
1978a29678 | ||
|
f34ea44d73 | ||
|
bc081473f2 | ||
|
0b18034055 | ||
|
d1eeb692c1 | ||
|
05680a4662 | ||
|
a08217a33c | ||
|
5ccb2c62a9 | ||
|
9dd49b6c6a | ||
|
b52a2176fe | ||
|
d2a36b38ca | ||
|
33788c8405 | ||
|
32cd5a3dc4 | ||
|
ee1232051c | ||
|
b3890d385c | ||
|
5a35595a3a | ||
|
584a8cd1a8 | ||
|
7a0d655292 | ||
|
2f483a25e9 | ||
|
7735be367f | ||
|
a50633d8e0 | ||
|
dc7e2965d6 | ||
|
9065a8da89 | ||
|
9d60047018 | ||
|
9d5f978d00 | ||
|
23376b8a31 | ||
|
70c5871910 | ||
|
9d1b1cf073 | ||
|
90dea98a14 | ||
|
9cdb8ca244 | ||
|
7e56e6c4ea | ||
|
c407c08b0b | ||
|
08a7dedbc9 | ||
|
68c98811a1 | ||
|
07f13c28ee | ||
|
fbd812ebb3 | ||
|
34d0b5de90 | ||
|
d3f88a2482 | ||
|
8debad803c | ||
|
9aceb3711b | ||
|
8e3ac54de3 | ||
|
2877dc9794 | ||
|
c6e35ce066 | ||
|
7742e70865 | ||
|
4fdfdaf2e6 | ||
|
2396b4e27f | ||
|
a941faccb0 | ||
|
196a72b29e | ||
|
c1dcbab932 | ||
|
4d14667266 | ||
|
c517c2ea65 | ||
|
ee32e3eb40 | ||
|
09d1bf37e7 | ||
|
bf6ce68ed1 | ||
|
ad5e73d772 | ||
|
26492ff0ea | ||
|
ade9476721 | ||
|
a2a53406c8 | ||
|
5e3d051b6a | ||
|
e48b283e39 | ||
|
3adb07aa00 | ||
|
136b7a5305 | ||
|
d6bbcd020b | ||
|
42619a3a81 | ||
|
8393c6a63d | ||
|
13f2915b65 | ||
|
f7885bbdde | ||
|
ba6659f6be | ||
|
2af9e2f759 | ||
|
e6cf959170 | ||
|
ea39d3c45e | ||
|
a8904d25ba | ||
|
784016a25e | ||
|
5fcfecc56e | ||
|
09a5014b3c | ||
|
f5dc18730c | ||
|
0bd7a2fc7e | ||
|
b186ab90a2 | ||
|
c360705e6a | ||
|
9172271c7f | ||
|
a1860ed680 | ||
|
643f192515 | ||
|
a8db9f52ec | ||
|
83dba77955 | ||
|
e79af802b1 | ||
|
3a1145b999 | ||
|
24fbfae0fd | ||
|
563bd5b5bc | ||
|
c1d9e8d571 | ||
|
f7cb9455c8 | ||
|
d94b5b5ad0 | ||
|
e2625db1dd | ||
|
47753d8a01 | ||
|
94809feac7 | ||
|
6a511b6ea7 | ||
|
ffba220ae8 | ||
|
43e40524c4 | ||
|
4f1a14532b | ||
|
c113984b32 | ||
|
edba363d54 | ||
|
919ea2a76d | ||
|
755a4440e7 | ||
|
c7335bcd4d | ||
|
881bb7bf0a | ||
|
2212bf85b7 | ||
|
0c85e2838c | ||
|
7967590682 | ||
|
df7e35ccd7 | ||
|
414136f33a | ||
|
ee572856e9 | ||
|
7d2e4481c7 | ||
|
d10f7eae31 | ||
|
757ab484ac | ||
|
d62933fba5 | ||
|
a6829838c6 | ||
|
fd1731a7b9 | ||
|
9419331500 | ||
|
8a24c33151 | ||
|
f5e94cd7f1 | ||
|
7769f19bf5 | ||
|
3b4779fa15 | ||
|
5059586fc3 | ||
|
8670f475b8 | ||
|
1b129ede4e | ||
|
6844ef21d4 | ||
|
6043f5d5d0 | ||
|
0070a0642b | ||
|
9bf6ddd4f1 | ||
|
0decb50fcd | ||
|
40b89456af | ||
|
008362cd77 | ||
|
9d2241efe7 | ||
|
f473145d42 | ||
|
b93a4bae45 | ||
|
42604cf4b2 | ||
|
19a237bbb0 | ||
|
ba3b995e58 | ||
|
e7b730528e | ||
|
db04bcb727 | ||
|
f3d0b49928 | ||
|
fe89f5fdff | ||
|
05d2bb0df5 | ||
|
98ec7b61a9 | ||
|
8565f1e681 | ||
|
3aa5b45768 | ||
|
e02fb4a862 | ||
|
ee19e1d3ff | ||
|
fe1e880ffe | ||
|
a5dc42c47c | ||
|
070412a6a5 | ||
|
0ffd5aa743 | ||
|
744f74506f | ||
|
46744e8433 | ||
|
038945110f | ||
|
7852b06038 | ||
|
dded56c4bb | ||
|
7dea6c53ed | ||
|
fd0a3df315 | ||
|
a1bdc1974a | ||
|
24636eb7f1 | ||
|
737a5453d9 | ||
|
f860152a35 | ||
|
87d2c471db | ||
|
ca54d67814 | ||
|
615af841f0 | ||
|
c43d264d3e | ||
|
d1aed52280 | ||
|
7e7e870eae | ||
|
f7dade8c2c | ||
|
24139c6ff0 | ||
|
16c1e80491 | ||
|
5a7979b435 | ||
|
349bddc652 | ||
|
acc90ad09f | ||
|
7a750156ef | ||
|
8075eafe91 | ||
|
58975fc8b5 | ||
|
8320c43589 | ||
|
73d1a98ce6 | ||
|
f9f514a46c | ||
|
16f2f2bce7 | ||
|
8258a76c9b | ||
|
c9ddbaa2c0 | ||
|
a99c844296 | ||
|
492f49c06a | ||
|
80480ae919 | ||
|
1327eaa83b | ||
|
eee101b9dd | ||
|
77ab354a5a | ||
|
1801eb6393 | ||
|
28d6dc38af | ||
|
dc6e3d083e | ||
|
4e7c5f19fe | ||
|
3dfbdbc66c | ||
|
95f373448d | ||
|
648b253f41 | ||
|
3e2b272239 | ||
|
489143f160 | ||
|
3eafce4683 | ||
|
b23da503fa | ||
|
cae4c76b56 | ||
|
069993e880 | ||
|
a13834b9f9 | ||
|
c82ff17d3b | ||
|
ca8fbbc2be | ||
|
b94b3e6315 | ||
|
ab61bcafa3 | ||
|
9e44df9c5f | ||
|
438a9bb4aa | ||
|
6f686b1801 | ||
|
d7d3827f47 | ||
|
ad30383b46 | ||
|
9af3b06fc2 | ||
|
f395960741 | ||
|
02eb4bd806 | ||
|
24f0c9da11 | ||
|
3dc0f9c0b4 | ||
|
8af8ef4404 | ||
|
7a8e99de7d | ||
|
8d6a263c1c | ||
|
cb18b858d4 | ||
|
cd977c70ca | ||
|
57c3b0e0b7 | ||
|
0e70d8bacb | ||
|
8f0cd470ae | ||
|
48ddaf35fb | ||
|
9493682e49 | ||
|
da6e5ce3db | ||
|
f4894b7140 | ||
|
7d3be90159 | ||
|
76eff24718 | ||
|
e8dc7cad18 | ||
|
4201a48ecf | ||
|
c0d031cd1e | ||
|
1a50260ebd | ||
|
38a24ce6c9 | ||
|
a0a87c2b81 | ||
|
a100306b00 | ||
|
17bbcce52b | ||
|
0b2bd123ef | ||
|
ea53abbca7 | ||
|
7f69f8e680 | ||
|
301569bee6 | ||
|
e82e94be5b | ||
|
0c07e7a96f | ||
|
7dd7d6dda6 | ||
|
3bb1f0a7df | ||
|
a0d25379b2 | ||
|
643b31a6a1 | ||
|
0e2013d244 | ||
|
e6c95762ba | ||
|
b66df5fa3c | ||
|
afb51d1de3 | ||
|
db290201ea | ||
|
ed5ae0a2f7 | ||
|
8f8b0d84ae | ||
|
3fbc002bad | ||
|
60cc56b31c | ||
|
fc12ffcb30 | ||
|
0c1bf01cf7 | ||
|
bb21d79321 | ||
|
c63c069d58 | ||
|
513d3172cb | ||
|
5c699ab406 | ||
|
a87114fbfa | ||
|
29e900977f | ||
|
796471a7c6 | ||
|
524613b610 | ||
|
b765bfa5a5 | ||
|
c0d8542a85 | ||
|
36ef9327ef | ||
|
f2205b1725 | ||
|
25c7577779 | ||
|
9ece3cfdaf | ||
|
c5108687c5 | ||
|
e52bfeb491 | ||
|
dd1503d5a8 | ||
|
e9618f1ba2 | ||
|
0f9e096d6e | ||
|
392d01555d | ||
|
89f7a19691 | ||
|
c0673dbdf1 | ||
|
3e1b9e11d7 | ||
|
dda2f58588 | ||
|
e3a12c3c28 | ||
|
b9065195f1 | ||
|
aba28ef0bc | ||
|
e9f7003b70 | ||
|
d3d1f82f73 | ||
|
2439c44779 | ||
|
19b94ec325 | ||
|
b9fa72d582 | ||
|
b26516b3ac | ||
|
2f97505b93 | ||
|
5ee1087959 | ||
|
6596a50c90 | ||
|
730833f96c | ||
|
f74015b4e5 | ||
|
eb254ef70b | ||
|
3327568142 | ||
|
65983b4288 | ||
|
1d631b7280 | ||
|
072b15784f | ||
|
ba2939b1dc | ||
|
ee7476a0bf | ||
|
88a2ac92d5 | ||
|
3ccb3801f2 | ||
|
cc7fbabc96 | ||
|
28a9708ddb | ||
|
d896dedf9b | ||
|
00709017e2 | ||
|
b7d9b05952 | ||
|
f7f1224941 | ||
|
fd8d83b7c8 | ||
|
52fc0b896d | ||
|
ba045d6852 | ||
|
54bdcb4691 | ||
|
2a2666326b | ||
|
3bba5d55bf | ||
|
5d07d83e78 | ||
|
37f97bc013 | ||
|
6d31bbe2bf | ||
|
e2e1776a14 | ||
|
bd196e7efc | ||
|
dffe7b9072 | ||
|
2b326ebc84 | ||
|
f4ff6a673f | ||
|
cc915a25ed | ||
|
600870f22b | ||
|
04882e2f34 | ||
|
c6cf3da276 | ||
|
8a5c3782b8 | ||
|
beb17d8855 | ||
|
4ee717f7c4 | ||
|
e680196c59 | ||
|
ce92abfe47 | ||
|
50410aaeaa | ||
|
35c40bc376 | ||
|
aae644c507 | ||
|
ce830f8a71 | ||
|
d3d423a322 | ||
|
8b060a3902 | ||
|
faae900747 | ||
|
11662bf2b6 | ||
|
887e2637c0 | ||
|
958f05e4b4 | ||
|
9126a2e654 | ||
|
5070fae231 | ||
|
454f9d6319 | ||
|
59b6b32e6e | ||
|
6d9709e20d | ||
|
7a484959d5 | ||
|
78060f55e6 | ||
|
3fca19fbab | ||
|
b8700e0aa8 | ||
|
d66bc5cec2 | ||
|
fb28c6041a | ||
|
0f9d57e03a | ||
|
32377849da | ||
|
0975c487f0 | ||
|
d07ad63016 | ||
|
1a5a3cf253 | ||
|
6f6901180c | ||
|
9cc6297292 | ||
|
cf53bc2dd2 | ||
|
f4f4ea05e1 | ||
|
2b845e5a75 | ||
|
6fcbf11454 | ||
|
8a69147adf | ||
|
f8ceedea5c | ||
|
a4e4226578 | ||
|
e76fd6bd33 | ||
|
437bee418b | ||
|
31238de937 | ||
|
cb8c99c4f8 | ||
|
2fe81d0cb2 | ||
|
fb7d7ee7b4 | ||
|
d99fdcf526 | ||
|
e4d2234a04 | ||
|
bea919da6e | ||
|
2fb22cc116 | ||
|
d4b6542ce1 | ||
|
7d47ee732e | ||
|
6ceacd62f9 | ||
|
2ce6741731 | ||
|
2213eb3317 | ||
|
b947590082 | ||
|
20bcaa78f6 | ||
|
9834a36a17 | ||
|
90801f8815 | ||
|
4d1357e318 | ||
|
8d090cbdbb | ||
|
ec5b78d18b | ||
|
d33317eadb | ||
|
f8375a3ea2 | ||
|
5a02959d18 | ||
|
cc123bc657 | ||
|
4f6a0605bf | ||
|
b89700ed35 | ||
|
ca853fbe19 | ||
|
1ba2548fb2 | ||
|
1332be77a5 | ||
|
a7f334387c | ||
|
e8177735a0 | ||
|
aac0326f7f | ||
|
a52afd2aeb | ||
|
9913333c33 | ||
|
ca194ca52e | ||
|
b90e7c421f | ||
|
96e29cd7e5 | ||
|
fd9c6983d3 | ||
|
da144dcf3b | ||
|
1d92badecd | ||
|
242064fa99 | ||
|
ad2d1b6e31 | ||
|
978e0e49c7 | ||
|
02a500dc93 | ||
|
fa5ca8678c | ||
|
01359cff6b | ||
|
37b56d6347 | ||
|
ad59adfe24 | ||
|
121cd42c41 | ||
|
cf1c57a04d | ||
|
5804761b5d | ||
|
3dd21a2770 | ||
|
b160e8b93f | ||
|
de37196760 | ||
|
84b96d3d47 | ||
|
92076c6560 | ||
|
5e5daf1ff2 | ||
|
8b637e436c | ||
|
b73ac40fa3 | ||
|
7ed66d06a0 | ||
|
c1b2379204 | ||
|
5e0958edbf | ||
|
5513e67512 | ||
|
354a9e5970 | ||
|
ee4910c5d7 | ||
|
697ef2636e | ||
|
481b8ff2d9 | ||
|
7bf89f2b9f | ||
|
ed7110838e | ||
|
842dea4bd5 | ||
|
a73e61078d | ||
|
c352aeb32e | ||
|
e4d8336175 | ||
|
0518dec60d | ||
|
015c4e6fbd | ||
|
0f9a14dfda | ||
|
7124b2164d | ||
|
efc19260a7 | ||
|
d37bfa3b4e | ||
|
129b1bb8d4 | ||
|
8dbbcfd382 | ||
|
fa48fbb9b8 | ||
|
d6e767e36b | ||
|
b29aae6c0c | ||
|
1955eea1b8 | ||
|
42fa9fc570 | ||
|
130d0395d0 | ||
|
c5f1ff9ee1 | ||
|
089cc68a04 | ||
|
2b759b9e8d | ||
|
5f27f7de47 | ||
|
282f4678cd | ||
|
c41f3f8582 | ||
|
8670df08a2 | ||
|
730690ea03 | ||
|
3543873da7 | ||
|
c505626c42 | ||
|
7e8505fc11 | ||
|
f9aec2685c | ||
|
dd6a7ca197 | ||
|
62b9d7dc73 | ||
|
d83382eb55 | ||
|
4c76314c26 | ||
|
64ab254f26 | ||
|
e6a7be922b | ||
|
1525c2530e | ||
|
016e4c0193 | ||
|
be642610ae | ||
|
ee17051933 | ||
|
0673f335e1 | ||
|
ac7ee4b94a |
169
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
Normal file
169
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
Normal file
@@ -0,0 +1,169 @@
|
|||||||
|
name: 🪲 Report a bug
|
||||||
|
description: Create a bug report to help improve Marlin Firmware
|
||||||
|
title: "[BUG] (bug summary)"
|
||||||
|
body:
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: >
|
||||||
|
Do you want to ask a question? Are you looking for support? Please use one of the [support links](https://github.com/MarlinFirmware/Marlin/issues/new/choose).
|
||||||
|
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: |
|
||||||
|
**Thank you for reporting a bug in Marlin Firmware!**
|
||||||
|
|
||||||
|
## Before Reporting a Bug
|
||||||
|
|
||||||
|
- Read and understand Marlin's [Code of Conduct](https://github.com/MarlinFirmware/Marlin/blob/master/.github/code_of_conduct.md). You are expected to comply with it, including treating everyone with respect.
|
||||||
|
|
||||||
|
- Test with the [`bugfix-2.0.x` branch](https://github.com/MarlinFirmware/Marlin/archive/bugfix-2.0.x.zip) to see whether the issue still exists.
|
||||||
|
|
||||||
|
## Instructions
|
||||||
|
|
||||||
|
Please follow the instructions below. Failure to do so may result in your issue being closed. See [Contributing to Marlin](https://github.com/MarlinFirmware/Marlin/blob/2.0.x/.github/contributing.md) for additional guidelines.
|
||||||
|
|
||||||
|
1. Provide a good title starting with [BUG].
|
||||||
|
2. Fill out all sections of this bug report form.
|
||||||
|
3. Always attach configuration files so we can build and test your setup.
|
||||||
|
|
||||||
|
- type: dropdown
|
||||||
|
attributes:
|
||||||
|
label: Did you test the latest `bugfix-2.0.x` code?
|
||||||
|
description: >-
|
||||||
|
Always try the latest code to make sure the issue you are reporting is not already fixed. To download
|
||||||
|
the latest code just [click this link](https://github.com/MarlinFirmware/Marlin/archive/bugfix-2.0.x.zip).
|
||||||
|
options:
|
||||||
|
- Yes, and the problem still exists.
|
||||||
|
- No, but I will test it now!
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: |
|
||||||
|
# Bug Details
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Bug Description
|
||||||
|
description: >-
|
||||||
|
Describe the bug in this section. Tell us what you were trying to do and what
|
||||||
|
happened that you did not expect. Provide a clear and concise description of the
|
||||||
|
problem and include as many details as possible.
|
||||||
|
placeholder: |
|
||||||
|
Marlin doesn't work.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: input
|
||||||
|
attributes:
|
||||||
|
label: Bug Timeline
|
||||||
|
description: Is this a new bug or an old issue? When did it first start?
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Expected behavior
|
||||||
|
description: >-
|
||||||
|
What did you expect to happen?
|
||||||
|
placeholder: I expected it to move left.
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Actual behavior
|
||||||
|
description: What actually happened instead?
|
||||||
|
placeholder: It moved right instead of left.
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Steps to Reproduce
|
||||||
|
description: >-
|
||||||
|
Please describe the steps needed to reproduce the issue.
|
||||||
|
placeholder: |
|
||||||
|
1. [First Step] ...
|
||||||
|
2. [Second Step] ...
|
||||||
|
3. [and so on] ...
|
||||||
|
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: |
|
||||||
|
# Your Setup
|
||||||
|
|
||||||
|
- type: input
|
||||||
|
attributes:
|
||||||
|
label: Version of Marlin Firmware
|
||||||
|
description: "See the About Menu on the LCD or the output of `M115`. NOTE: For older releases we only patch critical bugs."
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: input
|
||||||
|
attributes:
|
||||||
|
label: Printer model
|
||||||
|
description: Creality Ender 3, Prusa mini, or Kossel Delta?
|
||||||
|
|
||||||
|
- type: input
|
||||||
|
attributes:
|
||||||
|
label: Electronics
|
||||||
|
description: Stock electronics, upgrade board, or something else?
|
||||||
|
|
||||||
|
- type: input
|
||||||
|
attributes:
|
||||||
|
label: Add-ons
|
||||||
|
description: Please list any hardware add-ons that could be involved.
|
||||||
|
|
||||||
|
- type: dropdown
|
||||||
|
attributes:
|
||||||
|
label: Bed Leveling
|
||||||
|
description: What kind of bed leveling compensation are you using?
|
||||||
|
options:
|
||||||
|
- UBL Bilinear mesh
|
||||||
|
- ABL Bilinear mesh
|
||||||
|
- ABL Linear grid
|
||||||
|
- ABL 3-point
|
||||||
|
- MBL Manual Bed Leveling
|
||||||
|
- No Bed Leveling
|
||||||
|
|
||||||
|
- type: dropdown
|
||||||
|
attributes:
|
||||||
|
label: Your Slicer
|
||||||
|
description: Do you use Slic3r, Prusa Slicer, Simplify3D, IdeaMaker...?
|
||||||
|
options:
|
||||||
|
- Slic3r
|
||||||
|
- Simplify3D
|
||||||
|
- Prusa Slicer
|
||||||
|
- IdeaMaker
|
||||||
|
- Cura
|
||||||
|
- Other (explain below)
|
||||||
|
|
||||||
|
- type: dropdown
|
||||||
|
attributes:
|
||||||
|
label: Host Software
|
||||||
|
description: Do you use OctoPrint, Repetier Host, Pronterface...?
|
||||||
|
options:
|
||||||
|
- SD Card (headless)
|
||||||
|
- Repetier Host
|
||||||
|
- OctoPrint
|
||||||
|
- Pronterface
|
||||||
|
- Cura
|
||||||
|
- Same as my slicer
|
||||||
|
- Other (explain below)
|
||||||
|
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: >-
|
||||||
|
## Other things to include
|
||||||
|
|
||||||
|
Please also be sure to include these items to help with troubleshooting:
|
||||||
|
|
||||||
|
* **A ZIP file** containing your `Configuration.h` and `Configuration_adv.h`.
|
||||||
|
(Please don't paste lengthy configuration text here.)
|
||||||
|
* **Log output** from the host. (`M111 S247` for maximum logging.)
|
||||||
|
* **Images or videos** demonstrating the problem, if it helps to make it clear.
|
||||||
|
* **A G-Code file** that exposes the problem, if not affecting _all_ G-code.
|
||||||
|
|
||||||
|
If you've made any other modifications to the firmware, please describe them in detail in the space provided.
|
||||||
|
|
||||||
|
When pasting formatted text into the box below don't forget to put ` ``` ` (on its own line) before and after to make it readable.
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Additional information & file uploads
|
20
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
20
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
blank_issues_enabled: false
|
||||||
|
contact_links:
|
||||||
|
- name: 📖 Marlin Documentation
|
||||||
|
url: http://marlinfw.org/
|
||||||
|
about: Lots of documentation on installing and using Marlin.
|
||||||
|
- name: 👤 MarlinFirmware Facebook group
|
||||||
|
url: https://www.facebook.com/groups/1049718498464482
|
||||||
|
about: Please ask and answer questions here.
|
||||||
|
- name: 🕹 Marlin on Discord
|
||||||
|
url: https://discord.gg/n5NJ59y
|
||||||
|
about: Join the Discord server for support and discussion.
|
||||||
|
- name: 🔗 Marlin Discussion Forum
|
||||||
|
url: http://forums.reprap.org/list.php?415
|
||||||
|
about: A searchable web forum hosted by RepRap dot org.
|
||||||
|
- name: 📺 Marlin Videos on YouTube
|
||||||
|
url: https://www.youtube.com/results?search_query=marlin+firmware
|
||||||
|
about: Tutorials and more from Marlin users all around the world. Great for new users!
|
||||||
|
- name: 💸 Want to donate?
|
||||||
|
url: https://www.thinkyhead.com/donate-to-marlin
|
||||||
|
about: Please take a look at the various options to support Marlin Firmware's development financially!
|
44
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
Normal file
44
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
name: ✨ Request a feature
|
||||||
|
description: Request a new Marlin Firmware feature
|
||||||
|
title: "[FR] (feature summary)"
|
||||||
|
labels: 'T: Feature Request'
|
||||||
|
body:
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: >
|
||||||
|
Do you want to ask a question? Are you looking for support? Please use one of the [support links](https://github.com/MarlinFirmware/Marlin/issues/new/choose).
|
||||||
|
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: >
|
||||||
|
**Thank you for requesting a new Marlin Firmware feature!**
|
||||||
|
|
||||||
|
## Before Requesting a Feature
|
||||||
|
|
||||||
|
- Read and understand Marlin's [Code of Conduct](https://github.com/MarlinFirmware/Marlin/blob/master/.github/code_of_conduct.md). You are expected to comply with it, including treating everyone with respect.
|
||||||
|
|
||||||
|
- Check the latest [`bugfix-2.0.x` branch](https://github.com/MarlinFirmware/Marlin/archive/bugfix-2.0.x.zip) to see if the feature already exists.
|
||||||
|
|
||||||
|
- Before you proceed with your request, please consider if it is necessary to make it into a firmware feature, or if it may be better suited for a slicer or host feature.
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Is your feature request related to a problem? Please describe.
|
||||||
|
description: A clear description of the problem (e.g., "I need X but Marlin can't do it [...]").
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Are you looking for hardware support?
|
||||||
|
description: Tell us the printer, board, or peripheral that needs support.
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Describe the feature you want
|
||||||
|
description: A clear description of the feature and how you think it should work.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Additional context
|
||||||
|
description: Add any other context or screenshots about the feature request here.
|
22
.github/pull_request_template.md
vendored
22
.github/pull_request_template.md
vendored
@@ -1,23 +1,33 @@
|
|||||||
### Requirements
|
<!--
|
||||||
|
|
||||||
* Filling out this template is required. Pull Requests without a clear description may be closed at the maintainers' discretion.
|
Submitting a Pull Request
|
||||||
|
|
||||||
|
- Please fill out all sections of this form. You can delete the helpful comments.
|
||||||
|
- Pull Requests without clear information will take longer and may even be rejected.
|
||||||
|
- We get a high volume of submissions so please be patient during review.
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
### Description
|
### Description
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
|
|
||||||
We must be able to understand your proposed change from this description. If we can't understand what the code will do from this description, the Pull Request may be closed at the maintainers' discretion. Keep in mind that the maintainer reviewing this PR may not be familiar with or have worked with the code recently, so please walk us through the concepts.
|
Clearly describe the submitted changes with lots of details. Include images where helpful. Initial reviewers may not be familiar with the subject, so be as thorough as possible. You can use MarkDown syntax to improve readability with bullet lists, code blocks, and so on. PREVIEW and fix up formatting before submitting.
|
||||||
|
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
### Requirements
|
||||||
|
|
||||||
|
<!-- Does this PR require a specific board, LCD, etc.? -->
|
||||||
|
|
||||||
### Benefits
|
### Benefits
|
||||||
|
|
||||||
<!-- What does this fix or improve? -->
|
<!-- What does this PR fix or improve? -->
|
||||||
|
|
||||||
### Configurations
|
### Configurations
|
||||||
|
|
||||||
<!-- Attach any Configuration.h, Configuration_adv.h, or platformio.ini files needed to compile/test your Pull Request. -->
|
<!-- Attach Configurations ZIP and any other files needed to test this PR. -->
|
||||||
|
|
||||||
### Related Issues
|
### Related Issues
|
||||||
|
|
||||||
<!-- Whether this fixes a bug or fulfills a feature request, please list any related Issues here. -->
|
<!-- Does this PR fix a bug or fulfill a Feature Request? Link related Issues here. -->
|
||||||
|
36
.github/workflows/bump-date.yml
vendored
Normal file
36
.github/workflows/bump-date.yml
vendored
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
#
|
||||||
|
# bump-date.yml
|
||||||
|
# Bump the distribution date once per day
|
||||||
|
#
|
||||||
|
|
||||||
|
name: Bump Distribution Date
|
||||||
|
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: '0 0 * * *'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
bump_date:
|
||||||
|
name: Bump Distribution Date
|
||||||
|
if: github.repository == 'MarlinFirmware/Marlin'
|
||||||
|
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
|
||||||
|
- name: Check out bugfix-2.0.x
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
ref: bugfix-2.0.x
|
||||||
|
|
||||||
|
- name: Bump Distribution Date
|
||||||
|
run: |
|
||||||
|
# Inline Bump Script
|
||||||
|
DIST=$( date +"%Y-%m-%d" )
|
||||||
|
eval "sed -E -i 's/(#define +STRING_DISTRIBUTION_DATE) .*$/\1 \"$DIST\"/g' Marlin/src/inc/Version.h" && \
|
||||||
|
eval "sed -E -i 's/(#define +STRING_DISTRIBUTION_DATE) .*$/\1 \"$DIST\"/g' Marlin/Version.h" && \
|
||||||
|
git config user.name "${GITHUB_ACTOR}" && \
|
||||||
|
git config user.email "${GITHUB_ACTOR}@users.noreply.github.com" && \
|
||||||
|
git add . && \
|
||||||
|
git commit -m "[cron] Bump distribution date ($DIST)" && \
|
||||||
|
git push
|
32
.github/workflows/check-pr.yml
vendored
Normal file
32
.github/workflows/check-pr.yml
vendored
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
#
|
||||||
|
# check-pr.yml
|
||||||
|
# Close PRs directed at release branches
|
||||||
|
#
|
||||||
|
|
||||||
|
name: PR Bad Target
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- 1.0.x
|
||||||
|
- 1.1.x
|
||||||
|
- 2.0.x
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
bad_target:
|
||||||
|
name: PR Bad Target
|
||||||
|
if: github.repository == 'MarlinFirmware/Marlin'
|
||||||
|
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: superbrothers/close-pull-request@v3
|
||||||
|
with:
|
||||||
|
comment: >
|
||||||
|
Thanks for your contribution! Unfortunately we can't accept PRs directed at release branches. We make patches to the bugfix branches and only later do we push them out as releases.
|
||||||
|
|
||||||
|
Please redo this PR starting with the `bugfix-2.0.x` branch and be careful to target `bugfix-2.0.x` when resubmitting the PR.
|
||||||
|
|
||||||
|
It may help to set your fork's default branch to `bugfix-2.0.x`.
|
||||||
|
|
||||||
|
See [this page](http://marlinfw.org/docs/development/getting_started_pull_requests.html) for full instructions.
|
39
.github/workflows/clean-closed.yml
vendored
Normal file
39
.github/workflows/clean-closed.yml
vendored
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
#
|
||||||
|
# clean-closed.yml
|
||||||
|
# Remove obsolete labels when an Issue or PR is closed
|
||||||
|
#
|
||||||
|
|
||||||
|
name: Clean Closed
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
types: [closed]
|
||||||
|
issues:
|
||||||
|
types: [closed]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
remove_label:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
label:
|
||||||
|
- "S: Don't Merge"
|
||||||
|
- "S: Hold for 2.1"
|
||||||
|
- "S: Please Merge"
|
||||||
|
- "S: Please Test"
|
||||||
|
- "help wanted"
|
||||||
|
- "Needs: Discussion"
|
||||||
|
- "Needs: Documentation"
|
||||||
|
- "Needs: More Data"
|
||||||
|
- "Needs: Patch"
|
||||||
|
- "Needs: Testing"
|
||||||
|
- "Needs: Work"
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Remove Labels
|
||||||
|
uses: actions-ecosystem/action-remove-labels@v1
|
||||||
|
with:
|
||||||
|
github_token: ${{ github.token }}
|
||||||
|
labels: ${{ matrix.label }}
|
28
.github/workflows/close-stale.yml
vendored
Normal file
28
.github/workflows/close-stale.yml
vendored
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
#
|
||||||
|
# close-stale.yml
|
||||||
|
# Close open issues after a period of inactivity
|
||||||
|
#
|
||||||
|
|
||||||
|
name: Close Stale Issues
|
||||||
|
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: "22 1 * * *"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
stale:
|
||||||
|
name: Close Stale Issues
|
||||||
|
if: github.repository == 'MarlinFirmware/Marlin'
|
||||||
|
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/stale@v3
|
||||||
|
with:
|
||||||
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
stale-issue-message: 'This issue has had no activity in the last 60 days. Please add a reply if you want to keep this issue active, otherwise it will be automatically closed within 10 days.'
|
||||||
|
days-before-stale: 60
|
||||||
|
days-before-close: 10
|
||||||
|
stale-issue-label: 'stale-closing-soon'
|
||||||
|
exempt-all-assignees: true
|
||||||
|
exempt-issue-labels: 'Bug: Confirmed !,T: Feature Request,Needs: Discussion,Needs: Documentation,Needs: More Data,Needs: Patch,Needs: Work,Needs: Testing,help wanted,no-locking'
|
32
.github/workflows/lock-closed.yml
vendored
Normal file
32
.github/workflows/lock-closed.yml
vendored
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
#
|
||||||
|
# lock-closed.yml
|
||||||
|
# Lock closed issues after a period of inactivity
|
||||||
|
#
|
||||||
|
|
||||||
|
name: Lock Closed Issues
|
||||||
|
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: '0 1/13 * * *'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
lock:
|
||||||
|
name: Lock Closed Issues
|
||||||
|
if: github.repository == 'MarlinFirmware/Marlin'
|
||||||
|
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: dessant/lock-threads@v2
|
||||||
|
with:
|
||||||
|
github-token: ${{ github.token }}
|
||||||
|
process-only: 'issues'
|
||||||
|
issue-lock-inactive-days: '60'
|
||||||
|
issue-exclude-created-before: '2017-07-01T00:00:00Z'
|
||||||
|
issue-exclude-labels: 'no-locking'
|
||||||
|
issue-lock-labels: ''
|
||||||
|
issue-lock-comment: >
|
||||||
|
This issue has been automatically locked since there
|
||||||
|
has not been any recent activity after it was closed.
|
||||||
|
Please open a new issue for related bugs.
|
||||||
|
issue-lock-reason: ''
|
57
.github/workflows/test-builds.yml
vendored
57
.github/workflows/test-builds.yml
vendored
@@ -56,28 +56,33 @@ jobs:
|
|||||||
|
|
||||||
# STM32F1 (Maple) Environments
|
# STM32F1 (Maple) Environments
|
||||||
|
|
||||||
- STM32F103RC_btt
|
#- STM32F103RC_btt_maple
|
||||||
- STM32F103RC_btt_USB
|
- STM32F103RC_btt_USB_maple
|
||||||
- STM32F103RE_btt
|
- STM32F103RC_fysetc_maple
|
||||||
- STM32F103RE_btt_USB
|
|
||||||
- STM32F103RC_fysetc
|
|
||||||
- STM32F103RC_meeb
|
- STM32F103RC_meeb
|
||||||
- jgaurora_a5s_a1
|
- jgaurora_a5s_a1_maple
|
||||||
- STM32F103VE_longer
|
- STM32F103VE_longer_maple
|
||||||
- mks_robin
|
#- mks_robin_maple
|
||||||
- mks_robin_lite
|
- mks_robin_lite_maple
|
||||||
- mks_robin_pro
|
- mks_robin_pro_maple
|
||||||
- STM32F103RET6_creality
|
#- mks_robin_nano35_maple
|
||||||
- mks_robin_nano35
|
#- STM32F103RET6_creality_maple
|
||||||
|
- STM32F103VE_ZM3E4V2_USB_maple
|
||||||
|
|
||||||
# STM32 (ST) Environments
|
# STM32 (ST) Environments
|
||||||
|
|
||||||
|
- STM32F103RC_btt
|
||||||
|
#- STM32F103RC_btt_USB
|
||||||
|
- STM32F103RE_btt
|
||||||
|
- STM32F103RE_btt_USB
|
||||||
|
- STM32F103RET6_creality
|
||||||
|
- STM32F103VE_longer
|
||||||
- STM32F407VE_black
|
- STM32F407VE_black
|
||||||
- STM32F401VE_STEVAL
|
- STM32F401VE_STEVAL
|
||||||
- BIGTREE_BTT002
|
- BIGTREE_BTT002
|
||||||
- BIGTREE_SKR_PRO
|
- BIGTREE_SKR_PRO
|
||||||
- BIGTREE_GTR_V1_0
|
- BIGTREE_GTR_V1_0
|
||||||
- mks_robin_stm32
|
- mks_robin
|
||||||
- ARMED
|
- ARMED
|
||||||
- FYSETC_S6
|
- FYSETC_S6
|
||||||
- STM32F070CB_malyan
|
- STM32F070CB_malyan
|
||||||
@@ -86,11 +91,13 @@ jobs:
|
|||||||
- FLYF407ZG
|
- FLYF407ZG
|
||||||
- rumba32
|
- rumba32
|
||||||
- LERDGEX
|
- LERDGEX
|
||||||
- mks_robin_nano35_stm32
|
- LERDGEK
|
||||||
|
- mks_robin_nano35
|
||||||
- NUCLEO_F767ZI
|
- NUCLEO_F767ZI
|
||||||
- REMRAM_V1
|
- REMRAM_V1
|
||||||
- BTT_SKR_SE_BX
|
- BTT_SKR_SE_BX
|
||||||
- chitu_f103
|
- chitu_f103
|
||||||
|
- Index_Mobo_Rev03
|
||||||
|
|
||||||
# Put lengthy tests last
|
# Put lengthy tests last
|
||||||
|
|
||||||
@@ -105,8 +112,25 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
|
||||||
|
- name: Check out the PR
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Cache pip
|
||||||
|
uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: ~/.cache/pip
|
||||||
|
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
|
||||||
|
restore-keys: |
|
||||||
|
${{ runner.os }}-pip-
|
||||||
|
|
||||||
|
- name: Cache PlatformIO
|
||||||
|
uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: ~/.platformio
|
||||||
|
key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }}
|
||||||
|
|
||||||
- name: Select Python 3.7
|
- name: Select Python 3.7
|
||||||
uses: actions/setup-python@v1
|
uses: actions/setup-python@v2
|
||||||
with:
|
with:
|
||||||
python-version: '3.7' # Version range or exact version of a Python version to use, using semvers version range syntax.
|
python-version: '3.7' # Version range or exact version of a Python version to use, using semvers version range syntax.
|
||||||
architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified
|
architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified
|
||||||
@@ -116,9 +140,6 @@ jobs:
|
|||||||
pip install -U https://github.com/platformio/platformio-core/archive/develop.zip
|
pip install -U https://github.com/platformio/platformio-core/archive/develop.zip
|
||||||
platformio update
|
platformio update
|
||||||
|
|
||||||
- name: Check out the PR
|
|
||||||
uses: actions/checkout@v2
|
|
||||||
|
|
||||||
- name: Run ${{ matrix.test-platform }} Tests
|
- name: Run ${{ matrix.test-platform }} Tests
|
||||||
run: |
|
run: |
|
||||||
make tests-single-ci TEST_TARGET=${{ matrix.test-platform }}
|
make tests-single-ci TEST_TARGET=${{ matrix.test-platform }}
|
||||||
|
22
.github/workflows/unlock-reopened.yml
vendored
Normal file
22
.github/workflows/unlock-reopened.yml
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
#
|
||||||
|
# unlock-reopened.yml
|
||||||
|
# Unlock an issue whenever it is re-opened
|
||||||
|
#
|
||||||
|
|
||||||
|
name: "Unlock reopened issue"
|
||||||
|
|
||||||
|
on:
|
||||||
|
issues:
|
||||||
|
types: [reopened]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
unlock:
|
||||||
|
name: Unlock Reopened
|
||||||
|
if: github.repository == 'MarlinFirmware/Marlin'
|
||||||
|
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: OSDKDev/unlock-issues@v1.1
|
||||||
|
with:
|
||||||
|
repo-token: "${{ secrets.GITHUB_TOKEN }}"
|
6
.gitignore
vendored
6
.gitignore
vendored
@@ -143,7 +143,11 @@ vc-fileutils.settings
|
|||||||
.vscode/launch.json
|
.vscode/launch.json
|
||||||
.vscode/*.db
|
.vscode/*.db
|
||||||
|
|
||||||
# cmake
|
#Simulation
|
||||||
|
imgui.ini
|
||||||
|
eeprom.dat
|
||||||
|
|
||||||
|
#cmake
|
||||||
CMakeLists.txt
|
CMakeLists.txt
|
||||||
src/CMakeLists.txt
|
src/CMakeLists.txt
|
||||||
CMakeListsPrivate.txt
|
CMakeListsPrivate.txt
|
||||||
|
@@ -35,7 +35,7 @@
|
|||||||
*
|
*
|
||||||
* Advanced settings can be found in Configuration_adv.h
|
* Advanced settings can be found in Configuration_adv.h
|
||||||
*/
|
*/
|
||||||
#define CONFIGURATION_H_VERSION 020008
|
#define CONFIGURATION_H_VERSION 02000902
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
//============================= Getting Started =============================
|
//============================= Getting Started =============================
|
||||||
@@ -105,14 +105,9 @@
|
|||||||
#define SERIAL_PORT 0
|
#define SERIAL_PORT 0
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Select a secondary serial port on the board to use for communication with the host.
|
* Serial Port Baud Rate
|
||||||
* Currently Ethernet (-2) is only supported on Teensy 4.1 boards.
|
* This is the default communication speed for all serial ports.
|
||||||
* :[-2, -1, 0, 1, 2, 3, 4, 5, 6, 7]
|
* Set the baud rate defaults for additional serial ports below.
|
||||||
*/
|
|
||||||
//#define SERIAL_PORT_2 -1
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This setting determines the communication speed of the printer.
|
|
||||||
*
|
*
|
||||||
* 250000 works in most cases, but you might try a lower speed if
|
* 250000 works in most cases, but you might try a lower speed if
|
||||||
* you commonly experience drop-outs during host printing.
|
* you commonly experience drop-outs during host printing.
|
||||||
@@ -121,6 +116,23 @@
|
|||||||
* :[2400, 9600, 19200, 38400, 57600, 115200, 250000, 500000, 1000000]
|
* :[2400, 9600, 19200, 38400, 57600, 115200, 250000, 500000, 1000000]
|
||||||
*/
|
*/
|
||||||
#define BAUDRATE 250000
|
#define BAUDRATE 250000
|
||||||
|
//#define BAUD_RATE_GCODE // Enable G-code M575 to set the baud rate
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Select a secondary serial port on the board to use for communication with the host.
|
||||||
|
* Currently Ethernet (-2) is only supported on Teensy 4.1 boards.
|
||||||
|
* :[-2, -1, 0, 1, 2, 3, 4, 5, 6, 7]
|
||||||
|
*/
|
||||||
|
//#define SERIAL_PORT_2 -1
|
||||||
|
//#define BAUDRATE_2 250000 // Enable to override BAUDRATE
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Select a third serial port on the board to use for communication with the host.
|
||||||
|
* Currently only supported for AVR, DUE, LPC1768/9 and STM32/STM32F1
|
||||||
|
* :[-1, 0, 1, 2, 3, 4, 5, 6, 7]
|
||||||
|
*/
|
||||||
|
//#define SERIAL_PORT_3 1
|
||||||
|
//#define BAUDRATE_3 250000 // Enable to override BAUDRATE
|
||||||
|
|
||||||
// Enable the Bluetooth serial interface on AT90USB devices
|
// Enable the Bluetooth serial interface on AT90USB devices
|
||||||
//#define BLUETOOTH
|
//#define BLUETOOTH
|
||||||
@@ -137,6 +149,45 @@
|
|||||||
// Choose your own or use a service like https://www.uuidgenerator.net/version4
|
// Choose your own or use a service like https://www.uuidgenerator.net/version4
|
||||||
//#define MACHINE_UUID "00000000-0000-0000-0000-000000000000"
|
//#define MACHINE_UUID "00000000-0000-0000-0000-000000000000"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Define the number of coordinated linear axes.
|
||||||
|
* See https://github.com/DerAndere1/Marlin/wiki
|
||||||
|
* Each linear axis gets its own stepper control and endstop:
|
||||||
|
*
|
||||||
|
* Steppers: *_STEP_PIN, *_ENABLE_PIN, *_DIR_PIN, *_ENABLE_ON
|
||||||
|
* Endstops: *_STOP_PIN, USE_*MIN_PLUG, USE_*MAX_PLUG
|
||||||
|
* Axes: *_MIN_POS, *_MAX_POS, INVERT_*_DIR
|
||||||
|
* Planner: DEFAULT_AXIS_STEPS_PER_UNIT, DEFAULT_MAX_FEEDRATE
|
||||||
|
* DEFAULT_MAX_ACCELERATION, AXIS_RELATIVE_MODES,
|
||||||
|
* MICROSTEP_MODES, MANUAL_FEEDRATE
|
||||||
|
*
|
||||||
|
* :[3, 4, 5, 6]
|
||||||
|
*/
|
||||||
|
//#define LINEAR_AXES 3
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Axis codes for additional axes:
|
||||||
|
* This defines the axis code that is used in G-code commands to
|
||||||
|
* reference a specific axis.
|
||||||
|
* 'A' for rotational axis parallel to X
|
||||||
|
* 'B' for rotational axis parallel to Y
|
||||||
|
* 'C' for rotational axis parallel to Z
|
||||||
|
* 'U' for secondary linear axis parallel to X
|
||||||
|
* 'V' for secondary linear axis parallel to Y
|
||||||
|
* 'W' for secondary linear axis parallel to Z
|
||||||
|
* Regardless of the settings, firmware-internal axis IDs are
|
||||||
|
* I (AXIS4), J (AXIS5), K (AXIS6).
|
||||||
|
*/
|
||||||
|
#if LINEAR_AXES >= 4
|
||||||
|
#define AXIS4_NAME 'A' // :['A', 'B', 'C', 'U', 'V', 'W']
|
||||||
|
#endif
|
||||||
|
#if LINEAR_AXES >= 5
|
||||||
|
#define AXIS5_NAME 'B' // :['A', 'B', 'C', 'U', 'V', 'W']
|
||||||
|
#endif
|
||||||
|
#if LINEAR_AXES >= 6
|
||||||
|
#define AXIS6_NAME 'C' // :['A', 'B', 'C', 'U', 'V', 'W']
|
||||||
|
#endif
|
||||||
|
|
||||||
// @section extruder
|
// @section extruder
|
||||||
|
|
||||||
// This defines the number of extruders
|
// This defines the number of extruders
|
||||||
@@ -291,6 +342,7 @@
|
|||||||
#define MIXING_VIRTUAL_TOOLS 16 // Use the Virtual Tool method with M163 and M164
|
#define MIXING_VIRTUAL_TOOLS 16 // Use the Virtual Tool method with M163 and M164
|
||||||
//#define DIRECT_MIXING_IN_G1 // Allow ABCDHI mix factors in G1 movement commands
|
//#define DIRECT_MIXING_IN_G1 // Allow ABCDHI mix factors in G1 movement commands
|
||||||
//#define GRADIENT_MIX // Support for gradient mixing with M166 and LCD
|
//#define GRADIENT_MIX // Support for gradient mixing with M166 and LCD
|
||||||
|
//#define MIXING_PRESETS // Assign 8 default V-tool presets for 2 or 3 MIXING_STEPPERS
|
||||||
#if ENABLED(GRADIENT_MIX)
|
#if ENABLED(GRADIENT_MIX)
|
||||||
//#define GRADIENT_VTOOL // Add M166 T to use a V-tool index as a Gradient alias
|
//#define GRADIENT_VTOOL // Add M166 T to use a V-tool index as a Gradient alias
|
||||||
#endif
|
#endif
|
||||||
@@ -315,6 +367,9 @@
|
|||||||
//#define PSU_NAME "Power Supply"
|
//#define PSU_NAME "Power Supply"
|
||||||
|
|
||||||
#if ENABLED(PSU_CONTROL)
|
#if ENABLED(PSU_CONTROL)
|
||||||
|
//#define MKS_PWC // Using the MKS PWC add-on
|
||||||
|
//#define PS_OFF_CONFIRM // Confirm dialog when power off
|
||||||
|
//#define PS_OFF_SOUND // Beep 1s when power off
|
||||||
#define PSU_ACTIVE_STATE LOW // Set 'LOW' for ATX, 'HIGH' for X-Box
|
#define PSU_ACTIVE_STATE LOW // Set 'LOW' for ATX, 'HIGH' for X-Box
|
||||||
|
|
||||||
//#define PSU_DEFAULT_OFF // Keep power off until enabled directly with M80
|
//#define PSU_DEFAULT_OFF // Keep power off until enabled directly with M80
|
||||||
@@ -344,70 +399,93 @@
|
|||||||
// @section temperature
|
// @section temperature
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* --NORMAL IS 4.7kohm PULLUP!-- 1kohm pullup can be used on hotend sensor, using correct resistor and table
|
* --NORMAL IS 4.7kΩ PULLUP!-- 1kΩ pullup can be used on hotend sensor, using correct resistor and table
|
||||||
*
|
*
|
||||||
* Temperature sensors available:
|
* Temperature sensors available:
|
||||||
*
|
*
|
||||||
* -5 : PT100 / PT1000 with MAX31865 (only for sensors 0-1)
|
* SPI RTD/Thermocouple Boards - IMPORTANT: Read the NOTE below!
|
||||||
* -3 : thermocouple with MAX31855 (only for sensors 0-1)
|
* -------
|
||||||
* -2 : thermocouple with MAX6675 (only for sensors 0-1)
|
* -5 : MAX31865 with Pt100/Pt1000, 2, 3, or 4-wire (only for sensors 0-1)
|
||||||
* -4 : thermocouple with AD8495
|
* NOTE: You must uncomment/set the MAX31865_*_OHMS_n defines below.
|
||||||
* -1 : thermocouple with AD595
|
* -3 : MAX31855 with Thermocouple, -200°C to +700°C (only for sensors 0-1)
|
||||||
|
* -2 : MAX6675 with Thermocouple, 0°C to +700°C (only for sensors 0-1)
|
||||||
|
*
|
||||||
|
* NOTE: Ensure TEMP_n_CS_PIN is set in your pins file for each TEMP_SENSOR_n using an SPI Thermocouple. By default,
|
||||||
|
* Hardware SPI on the default serial bus is used. If you have also set TEMP_n_SCK_PIN and TEMP_n_MISO_PIN,
|
||||||
|
* Software SPI will be used on those ports instead. You can force Hardware SPI on the default bus in the
|
||||||
|
* Configuration_adv.h file. At this time, separate Hardware SPI buses for sensors are not supported.
|
||||||
|
*
|
||||||
|
* Analog Themocouple Boards
|
||||||
|
* -------
|
||||||
|
* -4 : AD8495 with Thermocouple
|
||||||
|
* -1 : AD595 with Thermocouple
|
||||||
|
*
|
||||||
|
* Analog Thermistors - 4.7kΩ pullup - Normal
|
||||||
|
* -------
|
||||||
|
* 1 : 100kΩ EPCOS - Best choice for EPCOS thermistors
|
||||||
|
* 331 : 100kΩ Same as #1, but 3.3V scaled for MEGA
|
||||||
|
* 332 : 100kΩ Same as #1, but 3.3V scaled for DUE
|
||||||
|
* 2 : 200kΩ ATC Semitec 204GT-2
|
||||||
|
* 202 : 200kΩ Copymaster 3D
|
||||||
|
* 3 : ???Ω Mendel-parts thermistor
|
||||||
|
* 4 : 10kΩ Generic Thermistor !! DO NOT use for a hotend - it gives bad resolution at high temp. !!
|
||||||
|
* 5 : 100kΩ ATC Semitec 104GT-2/104NT-4-R025H42G - Used in ParCan, J-Head, and E3D, SliceEngineering 300°C
|
||||||
|
* 501 : 100kΩ Zonestar - Tronxy X3A
|
||||||
|
* 502 : 100kΩ Zonestar - used by hot bed in Zonestar Průša P802M
|
||||||
|
* 512 : 100kΩ RPW-Ultra hotend
|
||||||
|
* 6 : 100kΩ EPCOS - Not as accurate as table #1 (created using a fluke thermocouple)
|
||||||
|
* 7 : 100kΩ Honeywell 135-104LAG-J01
|
||||||
|
* 71 : 100kΩ Honeywell 135-104LAF-J01
|
||||||
|
* 8 : 100kΩ Vishay 0603 SMD NTCS0603E3104FXT
|
||||||
|
* 9 : 100kΩ GE Sensing AL03006-58.2K-97-G1
|
||||||
|
* 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%
|
||||||
|
* 15 : 100kΩ Calibrated for JGAurora A5 hotend
|
||||||
|
* 18 : 200kΩ ATC Semitec 204GT-2 Dagoma.Fr - MKS_Base_DKU001327
|
||||||
|
* 22 : 100kΩ GTM32 Pro vB - hotend - 4.7kΩ pullup to 3.3V and 220Ω to analog input
|
||||||
|
* 23 : 100kΩ GTM32 Pro vB - bed - 4.7kΩ pullup to 3.3v and 220Ω to analog input
|
||||||
|
* 30 : 100kΩ Kis3d Silicone heating mat 200W/300W with 6mm precision cast plate (EN AW 5083) NTC100K - beta 3950
|
||||||
|
* 60 : 100kΩ Maker's Tool Works Kapton Bed Thermistor - beta 3950
|
||||||
|
* 61 : 100kΩ Formbot/Vivedino 350°C Thermistor - beta 3950
|
||||||
|
* 66 : 4.7MΩ Dyze Design High Temperature Thermistor
|
||||||
|
* 67 : 500kΩ SliceEngineering 450°C Thermistor
|
||||||
|
* 70 : 100kΩ bq Hephestos 2
|
||||||
|
* 75 : 100kΩ Generic Silicon Heat Pad with NTC100K MGB18-104F39050L32
|
||||||
|
* 2000 : 100kΩ Ultimachine Rambo TDK NTCG104LH104KT1 NTC100K motherboard Thermistor
|
||||||
|
*
|
||||||
|
* Analog Thermistors - 1kΩ pullup - Atypical, and requires changing out the 4.7kΩ pullup for 1kΩ.
|
||||||
|
* ------- (but gives greater accuracy and more stable PID)
|
||||||
|
* 51 : 100kΩ EPCOS (1kΩ pullup)
|
||||||
|
* 52 : 200kΩ ATC Semitec 204GT-2 (1kΩ pullup)
|
||||||
|
* 55 : 100kΩ ATC Semitec 104GT-2 - Used in ParCan & J-Head (1kΩ pullup)
|
||||||
|
*
|
||||||
|
* Analog Thermistors - 10kΩ pullup - Atypical
|
||||||
|
* -------
|
||||||
|
* 99 : 100kΩ Found on some Wanhao i3 machines with a 10kΩ pull-up resistor
|
||||||
|
*
|
||||||
|
* Analog RTDs (Pt100/Pt1000)
|
||||||
|
* -------
|
||||||
|
* 110 : Pt100 with 1kΩ pullup (atypical)
|
||||||
|
* 147 : Pt100 with 4.7kΩ pullup
|
||||||
|
* 1010 : Pt1000 with 1kΩ pullup (atypical)
|
||||||
|
* 1047 : Pt1000 with 4.7kΩ pullup (E3D)
|
||||||
|
* 20 : Pt100 with circuit in the Ultimainboard V2.x with mainboard ADC reference voltage = INA826 amplifier-board supply voltage.
|
||||||
|
* NOTE: (1) Must use an ADC input with no pullup. (2) Some INA826 amplifiers are unreliable at 3.3V so consider using sensor 147, 110, or 21.
|
||||||
|
* 21 : Pt100 with circuit in the Ultimainboard V2.x with 3.3v ADC reference voltage (STM32, LPC176x....) and 5V INA826 amplifier board supply.
|
||||||
|
* NOTE: ADC pins are not 5V tolerant. Not recommended because it's possible to damage the CPU by going over 500°C.
|
||||||
|
* 201 : Pt100 with circuit in Overlord, similar to Ultimainboard V2.x
|
||||||
|
*
|
||||||
|
* Custom/Dummy/Other Thermal Sensors
|
||||||
|
* ------
|
||||||
* 0 : not used
|
* 0 : not used
|
||||||
* 1 : 100k thermistor - best choice for EPCOS 100k (4.7k pullup)
|
|
||||||
* 331 : (3.3V scaled thermistor 1 table for MEGA)
|
|
||||||
* 332 : (3.3V scaled thermistor 1 table for DUE)
|
|
||||||
* 2 : 200k thermistor - ATC Semitec 204GT-2 (4.7k pullup)
|
|
||||||
* 202 : 200k thermistor - Copymaster 3D
|
|
||||||
* 3 : Mendel-parts thermistor (4.7k pullup)
|
|
||||||
* 4 : 10k thermistor !! do not use it for a hotend. It gives bad resolution at high temp. !!
|
|
||||||
* 5 : 100K thermistor - ATC Semitec 104GT-2/104NT-4-R025H42G (Used in ParCan, J-Head, and E3D) (4.7k pullup)
|
|
||||||
* 501 : 100K Zonestar (Tronxy X3A) Thermistor
|
|
||||||
* 502 : 100K Zonestar Thermistor used by hot bed in Zonestar Průša P802M
|
|
||||||
* 512 : 100k RPW-Ultra hotend thermistor (4.7k pullup)
|
|
||||||
* 6 : 100k EPCOS - Not as accurate as table 1 (created using a fluke thermocouple) (4.7k pullup)
|
|
||||||
* 7 : 100k Honeywell thermistor 135-104LAG-J01 (4.7k pullup)
|
|
||||||
* 71 : 100k Honeywell thermistor 135-104LAF-J01 (4.7k pullup)
|
|
||||||
* 8 : 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup)
|
|
||||||
* 9 : 100k GE Sensing AL03006-58.2K-97-G1 (4.7k pullup)
|
|
||||||
* 10 : 100k RS thermistor 198-961 (4.7k pullup)
|
|
||||||
* 11 : 100k beta 3950 1% thermistor (Used in Keenovo AC silicone mats and most Wanhao i3 machines) (4.7k pullup)
|
|
||||||
* 12 : 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) (calibrated for Makibox hot bed)
|
|
||||||
* 13 : 100k Hisens 3950 1% up to 300°C for hotend "Simple ONE " & "Hotend "All In ONE"
|
|
||||||
* 15 : 100k thermistor calibration for JGAurora A5 hotend
|
|
||||||
* 18 : ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327
|
|
||||||
* 20 : Pt100 with circuit in the Ultimainboard V2.x with mainboard ADC reference voltage = INA826 amplifier-board supply voltage.
|
|
||||||
* NOTES: (1) Must use an ADC input with no pullup. (2) Some INA826 amplifiers are unreliable at 3.3V so consider using sensor 147, 110, or 21.
|
|
||||||
* 21 : Pt100 with circuit in the Ultimainboard V2.x with 3.3v ADC reference voltage (STM32, LPC176x....) and 5V INA826 amplifier board supply.
|
|
||||||
* NOTE: ADC pins are not 5V tolerant. Not recommended because it's possible to damage the CPU by going over 500°C.
|
|
||||||
* 22 : 100k (hotend) with 4.7k pullup to 3.3V and 220R to analog input (as in GTM32 Pro vB)
|
|
||||||
* 23 : 100k (bed) with 4.7k pullup to 3.3v and 220R to analog input (as in GTM32 Pro vB)
|
|
||||||
* 30 : Kis3d Silicone heating mat 200W/300W with 6mm precision cast plate (EN AW 5083) NTC100K / B3950 (4.7k pullup)
|
|
||||||
* 201 : Pt100 with circuit in Overlord, similar to Ultimainboard V2.x
|
|
||||||
* 60 : 100k Maker's Tool Works Kapton Bed Thermistor beta=3950
|
|
||||||
* 61 : 100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup
|
|
||||||
* 66 : 4.7M High Temperature thermistor from Dyze Design
|
|
||||||
* 67 : 450C thermistor from SliceEngineering
|
|
||||||
* 70 : the 100K thermistor found in the bq Hephestos 2
|
|
||||||
* 75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
|
|
||||||
* 99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
|
|
||||||
*
|
|
||||||
* 1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
|
|
||||||
* (but gives greater accuracy and more stable PID)
|
|
||||||
* 51 : 100k thermistor - EPCOS (1k pullup)
|
|
||||||
* 52 : 200k thermistor - ATC Semitec 204GT-2 (1k pullup)
|
|
||||||
* 55 : 100k thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (1k pullup)
|
|
||||||
*
|
|
||||||
* 1047 : Pt1000 with 4k7 pullup (E3D)
|
|
||||||
* 1010 : Pt1000 with 1k pullup (non standard)
|
|
||||||
* 147 : Pt100 with 4k7 pullup
|
|
||||||
* 110 : Pt100 with 1k pullup (non standard)
|
|
||||||
*
|
|
||||||
* 1000 : Custom - Specify parameters in Configuration_adv.h
|
* 1000 : Custom - Specify parameters in Configuration_adv.h
|
||||||
*
|
*
|
||||||
* Use these for Testing or Development purposes. NEVER for production machine.
|
* !!! Use these for Testing or Development purposes. NEVER for production machine. !!!
|
||||||
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
|
* 998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
|
||||||
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
|
* 999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
#define TEMP_SENSOR_0 1
|
#define TEMP_SENSOR_0 1
|
||||||
#define TEMP_SENSOR_1 0
|
#define TEMP_SENSOR_1 0
|
||||||
@@ -421,6 +499,8 @@
|
|||||||
#define TEMP_SENSOR_PROBE 0
|
#define TEMP_SENSOR_PROBE 0
|
||||||
#define TEMP_SENSOR_CHAMBER 0
|
#define TEMP_SENSOR_CHAMBER 0
|
||||||
#define TEMP_SENSOR_COOLER 0
|
#define TEMP_SENSOR_COOLER 0
|
||||||
|
#define TEMP_SENSOR_BOARD 0
|
||||||
|
#define TEMP_SENSOR_REDUNDANT 0
|
||||||
|
|
||||||
// Dummy thermistor constant temperature readings, for use with 998 and 999
|
// Dummy thermistor constant temperature readings, for use with 998 and 999
|
||||||
#define DUMMY_THERMISTOR_998_VALUE 25
|
#define DUMMY_THERMISTOR_998_VALUE 25
|
||||||
@@ -428,15 +508,10 @@
|
|||||||
|
|
||||||
// Resistor values when using MAX31865 sensors (-5) on TEMP_SENSOR_0 / 1
|
// Resistor values when using MAX31865 sensors (-5) on TEMP_SENSOR_0 / 1
|
||||||
//#define MAX31865_SENSOR_OHMS_0 100 // (Ω) Typically 100 or 1000 (PT100 or PT1000)
|
//#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
|
//#define MAX31865_CALIBRATION_OHMS_0 430 // (Ω) Typically 430 for Adafruit PT100; 4300 for Adafruit PT1000
|
||||||
//#define MAX31865_SENSOR_OHMS_1 100
|
//#define MAX31865_SENSOR_OHMS_1 100
|
||||||
//#define MAX31865_CALIBRATION_OHMS_1 430
|
//#define MAX31865_CALIBRATION_OHMS_1 430
|
||||||
|
|
||||||
// Use temp sensor 1 as a redundant sensor with sensor 0. If the readings
|
|
||||||
// from the two sensors differ too much the print will be aborted.
|
|
||||||
//#define TEMP_SENSOR_1_AS_REDUNDANT
|
|
||||||
#define MAX_REDUNDANT_TEMP_SENSOR_DIFF 10
|
|
||||||
|
|
||||||
#define TEMP_RESIDENCY_TIME 10 // (seconds) Time to wait for hotend to "settle" in M109
|
#define TEMP_RESIDENCY_TIME 10 // (seconds) Time to wait for hotend to "settle" in M109
|
||||||
#define TEMP_WINDOW 1 // (°C) Temperature proximity for the "temperature reached" timer
|
#define TEMP_WINDOW 1 // (°C) Temperature proximity for the "temperature reached" timer
|
||||||
#define TEMP_HYSTERESIS 3 // (°C) Temperature proximity considered "close enough" to the target
|
#define TEMP_HYSTERESIS 3 // (°C) Temperature proximity considered "close enough" to the target
|
||||||
@@ -449,6 +524,22 @@
|
|||||||
#define TEMP_CHAMBER_WINDOW 1 // (°C) Temperature proximity for the "temperature reached" timer
|
#define TEMP_CHAMBER_WINDOW 1 // (°C) Temperature proximity for the "temperature reached" timer
|
||||||
#define TEMP_CHAMBER_HYSTERESIS 3 // (°C) Temperature proximity considered "close enough" to the target
|
#define TEMP_CHAMBER_HYSTERESIS 3 // (°C) Temperature proximity considered "close enough" to the target
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Redundant Temperature Sensor (TEMP_SENSOR_REDUNDANT)
|
||||||
|
*
|
||||||
|
* Use a temp sensor as a redundant sensor for another reading. Select an unused temperature sensor, and another
|
||||||
|
* sensor you'd like it to be redundant for. If the two thermistors differ by TEMP_SENSOR_REDUNDANT_MAX_DIFF (°C),
|
||||||
|
* the print will be aborted. Whichever sensor is selected will have its normal functions disabled; i.e. selecting
|
||||||
|
* the Bed sensor (-1) will disable bed heating/monitoring.
|
||||||
|
*
|
||||||
|
* For selecting source/target use: COOLER, PROBE, BOARD, CHAMBER, BED, E0, E1, E2, E3, E4, E5, E6, E7
|
||||||
|
*/
|
||||||
|
#if TEMP_SENSOR_REDUNDANT
|
||||||
|
#define TEMP_SENSOR_REDUNDANT_SOURCE E1 // The sensor that will provide the redundant reading.
|
||||||
|
#define TEMP_SENSOR_REDUNDANT_TARGET E0 // The sensor that we are providing a redundant reading for.
|
||||||
|
#define TEMP_SENSOR_REDUNDANT_MAX_DIFF 10 // (°C) Temperature difference that will trigger a print abort.
|
||||||
|
#endif
|
||||||
|
|
||||||
// Below this temperature the heater will be switched off
|
// Below this temperature the heater will be switched off
|
||||||
// because it probably indicates a broken thermistor wire.
|
// because it probably indicates a broken thermistor wire.
|
||||||
#define HEATER_0_MINTEMP 5
|
#define HEATER_0_MINTEMP 5
|
||||||
@@ -504,8 +595,8 @@
|
|||||||
// Set/get with gcode: M301 E[extruder number, 0-2]
|
// Set/get with gcode: M301 E[extruder number, 0-2]
|
||||||
|
|
||||||
#if ENABLED(PID_PARAMS_PER_HOTEND)
|
#if ENABLED(PID_PARAMS_PER_HOTEND)
|
||||||
// Specify between 1 and HOTENDS values per array.
|
// Specify up to one value per hotend here, according to your setup.
|
||||||
// If fewer than EXTRUDER values are provided, the last element will be repeated.
|
// If there are fewer values, the last one applies to the remaining hotends.
|
||||||
#define DEFAULT_Kp_LIST { 22.20, 22.20 }
|
#define DEFAULT_Kp_LIST { 22.20, 22.20 }
|
||||||
#define DEFAULT_Ki_LIST { 1.08, 1.08 }
|
#define DEFAULT_Ki_LIST { 1.08, 1.08 }
|
||||||
#define DEFAULT_Kd_LIST { 114.00, 114.00 }
|
#define DEFAULT_Kd_LIST { 114.00, 114.00 }
|
||||||
@@ -667,6 +758,16 @@
|
|||||||
//#define COREZY
|
//#define COREZY
|
||||||
//#define MARKFORGED_XY // MarkForged. See https://reprap.org/forum/read.php?152,504042
|
//#define MARKFORGED_XY // MarkForged. See https://reprap.org/forum/read.php?152,504042
|
||||||
|
|
||||||
|
// Enable for a belt style printer with endless "Z" motion
|
||||||
|
//#define BELTPRINTER
|
||||||
|
|
||||||
|
// Enable for Polargraph Kinematics
|
||||||
|
//#define POLARGRAPH
|
||||||
|
#if ENABLED(POLARGRAPH)
|
||||||
|
#define POLARGRAPH_MAX_BELT_LEN 1035.0
|
||||||
|
#define POLAR_SEGMENTS_PER_SECOND 5
|
||||||
|
#endif
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
//============================== Endstop Settings ===========================
|
//============================== Endstop Settings ===========================
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
@@ -679,20 +780,32 @@
|
|||||||
#define USE_XMIN_PLUG
|
#define USE_XMIN_PLUG
|
||||||
#define USE_YMIN_PLUG
|
#define USE_YMIN_PLUG
|
||||||
#define USE_ZMIN_PLUG
|
#define USE_ZMIN_PLUG
|
||||||
|
//#define USE_IMIN_PLUG
|
||||||
|
//#define USE_JMIN_PLUG
|
||||||
|
//#define USE_KMIN_PLUG
|
||||||
//#define USE_XMAX_PLUG
|
//#define USE_XMAX_PLUG
|
||||||
//#define USE_YMAX_PLUG
|
//#define USE_YMAX_PLUG
|
||||||
//#define USE_ZMAX_PLUG
|
//#define USE_ZMAX_PLUG
|
||||||
|
//#define USE_IMAX_PLUG
|
||||||
|
//#define USE_JMAX_PLUG
|
||||||
|
//#define USE_KMAX_PLUG
|
||||||
|
|
||||||
// Enable pullup for all endstops to prevent a floating state
|
// Enable pullup for all endstops to prevent a floating state
|
||||||
#define ENDSTOPPULLUPS
|
#define ENDSTOPPULLUPS
|
||||||
#if DISABLED(ENDSTOPPULLUPS)
|
#if DISABLED(ENDSTOPPULLUPS)
|
||||||
// Disable ENDSTOPPULLUPS to set pullups individually
|
// Disable ENDSTOPPULLUPS to set pullups individually
|
||||||
//#define ENDSTOPPULLUP_XMAX
|
|
||||||
//#define ENDSTOPPULLUP_YMAX
|
|
||||||
//#define ENDSTOPPULLUP_ZMAX
|
|
||||||
//#define ENDSTOPPULLUP_XMIN
|
//#define ENDSTOPPULLUP_XMIN
|
||||||
//#define ENDSTOPPULLUP_YMIN
|
//#define ENDSTOPPULLUP_YMIN
|
||||||
//#define ENDSTOPPULLUP_ZMIN
|
//#define ENDSTOPPULLUP_ZMIN
|
||||||
|
//#define ENDSTOPPULLUP_IMIN
|
||||||
|
//#define ENDSTOPPULLUP_JMIN
|
||||||
|
//#define ENDSTOPPULLUP_KMIN
|
||||||
|
//#define ENDSTOPPULLUP_XMAX
|
||||||
|
//#define ENDSTOPPULLUP_YMAX
|
||||||
|
//#define ENDSTOPPULLUP_ZMAX
|
||||||
|
//#define ENDSTOPPULLUP_IMAX
|
||||||
|
//#define ENDSTOPPULLUP_JMAX
|
||||||
|
//#define ENDSTOPPULLUP_KMAX
|
||||||
//#define ENDSTOPPULLUP_ZMIN_PROBE
|
//#define ENDSTOPPULLUP_ZMIN_PROBE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -700,12 +813,18 @@
|
|||||||
//#define ENDSTOPPULLDOWNS
|
//#define ENDSTOPPULLDOWNS
|
||||||
#if DISABLED(ENDSTOPPULLDOWNS)
|
#if DISABLED(ENDSTOPPULLDOWNS)
|
||||||
// Disable ENDSTOPPULLDOWNS to set pulldowns individually
|
// Disable ENDSTOPPULLDOWNS to set pulldowns individually
|
||||||
//#define ENDSTOPPULLDOWN_XMAX
|
|
||||||
//#define ENDSTOPPULLDOWN_YMAX
|
|
||||||
//#define ENDSTOPPULLDOWN_ZMAX
|
|
||||||
//#define ENDSTOPPULLDOWN_XMIN
|
//#define ENDSTOPPULLDOWN_XMIN
|
||||||
//#define ENDSTOPPULLDOWN_YMIN
|
//#define ENDSTOPPULLDOWN_YMIN
|
||||||
//#define ENDSTOPPULLDOWN_ZMIN
|
//#define ENDSTOPPULLDOWN_ZMIN
|
||||||
|
//#define ENDSTOPPULLDOWN_IMIN
|
||||||
|
//#define ENDSTOPPULLDOWN_JMIN
|
||||||
|
//#define ENDSTOPPULLDOWN_KMIN
|
||||||
|
//#define ENDSTOPPULLDOWN_XMAX
|
||||||
|
//#define ENDSTOPPULLDOWN_YMAX
|
||||||
|
//#define ENDSTOPPULLDOWN_ZMAX
|
||||||
|
//#define ENDSTOPPULLDOWN_IMAX
|
||||||
|
//#define ENDSTOPPULLDOWN_JMAX
|
||||||
|
//#define ENDSTOPPULLDOWN_KMAX
|
||||||
//#define ENDSTOPPULLDOWN_ZMIN_PROBE
|
//#define ENDSTOPPULLDOWN_ZMIN_PROBE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -713,9 +832,15 @@
|
|||||||
#define X_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
|
#define X_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
|
||||||
#define Y_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
|
#define Y_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
|
||||||
#define Z_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
|
#define Z_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
|
||||||
|
#define I_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
|
||||||
|
#define J_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
|
||||||
|
#define K_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
|
||||||
#define X_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
|
#define X_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
|
||||||
#define Y_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
|
#define Y_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
|
||||||
#define Z_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
|
#define Z_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
|
||||||
|
#define I_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
|
||||||
|
#define J_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
|
||||||
|
#define K_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
|
||||||
#define Z_MIN_PROBE_ENDSTOP_INVERTING false // Set to true to invert the logic of the probe.
|
#define Z_MIN_PROBE_ENDSTOP_INVERTING false // Set to true to invert the logic of the probe.
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -744,6 +869,9 @@
|
|||||||
//#define Z2_DRIVER_TYPE A4988
|
//#define Z2_DRIVER_TYPE A4988
|
||||||
//#define Z3_DRIVER_TYPE A4988
|
//#define Z3_DRIVER_TYPE A4988
|
||||||
//#define Z4_DRIVER_TYPE A4988
|
//#define Z4_DRIVER_TYPE A4988
|
||||||
|
//#define I_DRIVER_TYPE A4988
|
||||||
|
//#define J_DRIVER_TYPE A4988
|
||||||
|
//#define K_DRIVER_TYPE A4988
|
||||||
#define E0_DRIVER_TYPE A4988
|
#define E0_DRIVER_TYPE A4988
|
||||||
//#define E1_DRIVER_TYPE A4988
|
//#define E1_DRIVER_TYPE A4988
|
||||||
//#define E2_DRIVER_TYPE A4988
|
//#define E2_DRIVER_TYPE A4988
|
||||||
@@ -797,14 +925,14 @@
|
|||||||
/**
|
/**
|
||||||
* Default Axis Steps Per Unit (steps/mm)
|
* Default Axis Steps Per Unit (steps/mm)
|
||||||
* Override with M92
|
* Override with M92
|
||||||
* X, Y, Z, E0 [, E1[, E2...]]
|
* X, Y, Z [, I [, J [, K]]], E0 [, E1[, E2...]]
|
||||||
*/
|
*/
|
||||||
#define DEFAULT_AXIS_STEPS_PER_UNIT { 80, 80, 400, 500 }
|
#define DEFAULT_AXIS_STEPS_PER_UNIT { 80, 80, 400, 500 }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default Max Feed Rate (mm/s)
|
* Default Max Feed Rate (mm/s)
|
||||||
* Override with M203
|
* Override with M203
|
||||||
* X, Y, Z, E0 [, E1[, E2...]]
|
* X, Y, Z [, I [, J [, K]]], E0 [, E1[, E2...]]
|
||||||
*/
|
*/
|
||||||
#define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 }
|
#define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 }
|
||||||
|
|
||||||
@@ -817,7 +945,7 @@
|
|||||||
* Default Max Acceleration (change/s) change = mm/s
|
* Default Max Acceleration (change/s) change = mm/s
|
||||||
* (Maximum start speed for accelerated moves)
|
* (Maximum start speed for accelerated moves)
|
||||||
* Override with M201
|
* Override with M201
|
||||||
* X, Y, Z, E0 [, E1[, E2...]]
|
* X, Y, Z [, I [, J [, K]]], E0 [, E1[, E2...]]
|
||||||
*/
|
*/
|
||||||
#define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 }
|
#define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 }
|
||||||
|
|
||||||
@@ -851,6 +979,9 @@
|
|||||||
#define DEFAULT_XJERK 10.0
|
#define DEFAULT_XJERK 10.0
|
||||||
#define DEFAULT_YJERK 10.0
|
#define DEFAULT_YJERK 10.0
|
||||||
#define DEFAULT_ZJERK 0.3
|
#define DEFAULT_ZJERK 0.3
|
||||||
|
//#define DEFAULT_IJERK 0.3
|
||||||
|
//#define DEFAULT_JJERK 0.3
|
||||||
|
//#define DEFAULT_KJERK 0.3
|
||||||
|
|
||||||
//#define TRAVEL_EXTRA_XYJERK 0.0 // Additional jerk allowance for all travel moves
|
//#define TRAVEL_EXTRA_XYJERK 0.0 // Additional jerk allowance for all travel moves
|
||||||
|
|
||||||
@@ -990,7 +1121,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Duet Smart Effector (for delta printers) - https://bit.ly/2ul5U7J
|
// Duet Smart Effector (for delta printers) - https://bit.ly/2ul5U7J
|
||||||
// When the pin is defined you can use M672 to set/reset the probe sensivity.
|
// When the pin is defined you can use M672 to set/reset the probe sensitivity.
|
||||||
//#define DUET_SMART_EFFECTOR
|
//#define DUET_SMART_EFFECTOR
|
||||||
#if ENABLED(DUET_SMART_EFFECTOR)
|
#if ENABLED(DUET_SMART_EFFECTOR)
|
||||||
#define SMART_EFFECTOR_MOD_PIN -1 // Connect a GPIO pin to the Smart Effector MOD pin
|
#define SMART_EFFECTOR_MOD_PIN -1 // Connect a GPIO pin to the Smart Effector MOD pin
|
||||||
@@ -1149,7 +1280,8 @@
|
|||||||
//#define WAIT_FOR_HOTEND // Wait for hotend to heat back up between probes (to improve accuracy & prevent cold extrude)
|
//#define WAIT_FOR_HOTEND // Wait for hotend to heat back up between probes (to improve accuracy & prevent cold extrude)
|
||||||
#endif
|
#endif
|
||||||
//#define PROBING_FANS_OFF // Turn fans off when probing
|
//#define PROBING_FANS_OFF // Turn fans off when probing
|
||||||
//#define PROBING_STEPPERS_OFF // Turn steppers off (unless needed to hold position) when probing
|
//#define PROBING_ESTEPPERS_OFF // Turn all extruder steppers off when probing
|
||||||
|
//#define PROBING_STEPPERS_OFF // Turn all steppers off (unless needed to hold position) when probing (including extruders)
|
||||||
//#define DELAY_BEFORE_PROBING 200 // (ms) To prevent vibrations from triggering piezo sensors
|
//#define DELAY_BEFORE_PROBING 200 // (ms) To prevent vibrations from triggering piezo sensors
|
||||||
|
|
||||||
// Require minimum nozzle and/or bed temperature for probing
|
// Require minimum nozzle and/or bed temperature for probing
|
||||||
@@ -1165,12 +1297,18 @@
|
|||||||
#define Y_ENABLE_ON 0
|
#define Y_ENABLE_ON 0
|
||||||
#define Z_ENABLE_ON 0
|
#define Z_ENABLE_ON 0
|
||||||
#define E_ENABLE_ON 0 // For all extruders
|
#define E_ENABLE_ON 0 // For all extruders
|
||||||
|
//#define I_ENABLE_ON 0
|
||||||
|
//#define J_ENABLE_ON 0
|
||||||
|
//#define K_ENABLE_ON 0
|
||||||
|
|
||||||
// Disable axis steppers immediately when they're not being stepped.
|
// Disable axis steppers immediately when they're not being stepped.
|
||||||
// WARNING: When motors turn off there is a chance of losing position accuracy!
|
// WARNING: When motors turn off there is a chance of losing position accuracy!
|
||||||
#define DISABLE_X false
|
#define DISABLE_X false
|
||||||
#define DISABLE_Y false
|
#define DISABLE_Y false
|
||||||
#define DISABLE_Z false
|
#define DISABLE_Z false
|
||||||
|
//#define DISABLE_I false
|
||||||
|
//#define DISABLE_J false
|
||||||
|
//#define DISABLE_K false
|
||||||
|
|
||||||
// Turn off the display blinking that warns about possible accuracy reduction
|
// Turn off the display blinking that warns about possible accuracy reduction
|
||||||
//#define DISABLE_REDUCED_ACCURACY_WARNING
|
//#define DISABLE_REDUCED_ACCURACY_WARNING
|
||||||
@@ -1186,6 +1324,9 @@
|
|||||||
#define INVERT_X_DIR false
|
#define INVERT_X_DIR false
|
||||||
#define INVERT_Y_DIR true
|
#define INVERT_Y_DIR true
|
||||||
#define INVERT_Z_DIR false
|
#define INVERT_Z_DIR false
|
||||||
|
//#define INVERT_I_DIR false
|
||||||
|
//#define INVERT_J_DIR false
|
||||||
|
//#define INVERT_K_DIR false
|
||||||
|
|
||||||
// @section extruder
|
// @section extruder
|
||||||
|
|
||||||
@@ -1221,6 +1362,9 @@
|
|||||||
#define X_HOME_DIR -1
|
#define X_HOME_DIR -1
|
||||||
#define Y_HOME_DIR -1
|
#define Y_HOME_DIR -1
|
||||||
#define Z_HOME_DIR -1
|
#define Z_HOME_DIR -1
|
||||||
|
//#define I_HOME_DIR -1
|
||||||
|
//#define J_HOME_DIR -1
|
||||||
|
//#define K_HOME_DIR -1
|
||||||
|
|
||||||
// @section machine
|
// @section machine
|
||||||
|
|
||||||
@@ -1235,6 +1379,12 @@
|
|||||||
#define X_MAX_POS X_BED_SIZE
|
#define X_MAX_POS X_BED_SIZE
|
||||||
#define Y_MAX_POS Y_BED_SIZE
|
#define Y_MAX_POS Y_BED_SIZE
|
||||||
#define Z_MAX_POS 200
|
#define Z_MAX_POS 200
|
||||||
|
//#define I_MIN_POS 0
|
||||||
|
//#define I_MAX_POS 50
|
||||||
|
//#define J_MIN_POS 0
|
||||||
|
//#define J_MAX_POS 50
|
||||||
|
//#define K_MIN_POS 0
|
||||||
|
//#define K_MAX_POS 50
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Software Endstops
|
* Software Endstops
|
||||||
@@ -1251,6 +1401,9 @@
|
|||||||
#define MIN_SOFTWARE_ENDSTOP_X
|
#define MIN_SOFTWARE_ENDSTOP_X
|
||||||
#define MIN_SOFTWARE_ENDSTOP_Y
|
#define MIN_SOFTWARE_ENDSTOP_Y
|
||||||
#define MIN_SOFTWARE_ENDSTOP_Z
|
#define MIN_SOFTWARE_ENDSTOP_Z
|
||||||
|
#define MIN_SOFTWARE_ENDSTOP_I
|
||||||
|
#define MIN_SOFTWARE_ENDSTOP_J
|
||||||
|
#define MIN_SOFTWARE_ENDSTOP_K
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Max software endstops constrain movement within maximum coordinate bounds
|
// Max software endstops constrain movement within maximum coordinate bounds
|
||||||
@@ -1259,6 +1412,9 @@
|
|||||||
#define MAX_SOFTWARE_ENDSTOP_X
|
#define MAX_SOFTWARE_ENDSTOP_X
|
||||||
#define MAX_SOFTWARE_ENDSTOP_Y
|
#define MAX_SOFTWARE_ENDSTOP_Y
|
||||||
#define MAX_SOFTWARE_ENDSTOP_Z
|
#define MAX_SOFTWARE_ENDSTOP_Z
|
||||||
|
#define MAX_SOFTWARE_ENDSTOP_I
|
||||||
|
#define MAX_SOFTWARE_ENDSTOP_J
|
||||||
|
#define MAX_SOFTWARE_ENDSTOP_K
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if EITHER(MIN_SOFTWARE_ENDSTOPS, MAX_SOFTWARE_ENDSTOPS)
|
#if EITHER(MIN_SOFTWARE_ENDSTOPS, MAX_SOFTWARE_ENDSTOPS)
|
||||||
@@ -1491,6 +1647,8 @@
|
|||||||
//#define UBL_Z_RAISE_WHEN_OFF_MESH 2.5 // When the nozzle is off the mesh, this value is used
|
//#define UBL_Z_RAISE_WHEN_OFF_MESH 2.5 // When the nozzle is off the mesh, this value is used
|
||||||
// as the Z-Height correction value.
|
// as the Z-Height correction value.
|
||||||
|
|
||||||
|
//#define UBL_MESH_WIZARD // Run several commands in a row to get a complete mesh
|
||||||
|
|
||||||
#elif ENABLED(MESH_BED_LEVELING)
|
#elif ENABLED(MESH_BED_LEVELING)
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
@@ -1568,16 +1726,17 @@
|
|||||||
//#define MANUAL_X_HOME_POS 0
|
//#define MANUAL_X_HOME_POS 0
|
||||||
//#define MANUAL_Y_HOME_POS 0
|
//#define MANUAL_Y_HOME_POS 0
|
||||||
//#define MANUAL_Z_HOME_POS 0
|
//#define MANUAL_Z_HOME_POS 0
|
||||||
|
//#define MANUAL_I_HOME_POS 0
|
||||||
|
//#define MANUAL_J_HOME_POS 0
|
||||||
|
//#define MANUAL_K_HOME_POS 0
|
||||||
|
|
||||||
// Use "Z Safe Homing" to avoid homing with a Z probe outside the bed area.
|
/**
|
||||||
//
|
* Use "Z Safe Homing" to avoid homing with a Z probe outside the bed area.
|
||||||
// With this feature enabled:
|
*
|
||||||
//
|
* - Moves the Z probe (or nozzle) to a defined XY point before Z homing.
|
||||||
// - Allow Z homing only after X and Y homing AND stepper drivers still enabled.
|
* - Allows Z homing only when XY positions are known and trusted.
|
||||||
// - If stepper drivers time out, it will need X and Y homing again before Z homing.
|
* - If stepper drivers sleep, XY homing may be required again before Z homing.
|
||||||
// - Move the Z probe (or nozzle) to a defined XY point before Z Homing.
|
*/
|
||||||
// - Prevent Z homing when the Z probe is outside bed area.
|
|
||||||
//
|
|
||||||
//#define Z_SAFE_HOMING
|
//#define Z_SAFE_HOMING
|
||||||
|
|
||||||
#if ENABLED(Z_SAFE_HOMING)
|
#if ENABLED(Z_SAFE_HOMING)
|
||||||
@@ -1810,11 +1969,20 @@
|
|||||||
/**
|
/**
|
||||||
* Print Job Timer
|
* Print Job Timer
|
||||||
*
|
*
|
||||||
* Automatically start and stop the print job timer on M104/M109/M190.
|
* Automatically start and stop the print job timer on M104/M109/M140/M190/M141/M191.
|
||||||
|
* The print job timer will only be stopped if the bed/chamber target temp is
|
||||||
|
* below BED_MINTEMP/CHAMBER_MINTEMP.
|
||||||
*
|
*
|
||||||
* M104 (hotend, no wait) - high temp = none, low temp = stop timer
|
* M104 (hotend, no wait) - high temp = none, low temp = stop timer
|
||||||
* M109 (hotend, wait) - high temp = start timer, low temp = stop timer
|
* M109 (hotend, wait) - high temp = start timer, low temp = stop timer
|
||||||
* M190 (bed, wait) - high temp = start timer, low temp = none
|
* M140 (bed, no wait) - high temp = none, low temp = stop timer
|
||||||
|
* M190 (bed, wait) - high temp = start timer, low temp = none
|
||||||
|
* M141 (chamber, no wait) - high temp = none, low temp = stop timer
|
||||||
|
* M191 (chamber, wait) - high temp = start timer, low temp = none
|
||||||
|
*
|
||||||
|
* For M104/M109, high temp is anything over EXTRUDE_MINTEMP / 2.
|
||||||
|
* For M140/M190, high temp is anything over BED_MINTEMP.
|
||||||
|
* For M141/M191, high temp is anything over CHAMBER_MINTEMP.
|
||||||
*
|
*
|
||||||
* The timer can also be controlled with the following commands:
|
* The timer can also be controlled with the following commands:
|
||||||
*
|
*
|
||||||
@@ -1883,10 +2051,10 @@
|
|||||||
*
|
*
|
||||||
* Select the language to display on the LCD. These languages are available:
|
* Select the language to display on the LCD. These languages are available:
|
||||||
*
|
*
|
||||||
* en, an, bg, ca, cz, da, de, el, el_gr, es, eu, fi, fr, gl, hr, hu, it,
|
* en, an, bg, ca, cz, da, de, el, el_CY, es, eu, fi, fr, gl, hr, hu, it,
|
||||||
* jp_kana, ko_KR, nl, pl, pt, pt_br, ro, ru, sk, sv, tr, uk, vi, zh_CN, zh_TW
|
* jp_kana, ko_KR, nl, pl, pt, pt_br, ro, ru, sk, sv, tr, uk, vi, zh_CN, zh_TW
|
||||||
*
|
*
|
||||||
* :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek', 'el_gr':'Greek (Greece)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'hu':'Hungarian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ro':'Romanian', 'ru':'Russian', 'sk':'Slovak', 'sv':'Swedish', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)' }
|
* :{ 'en':'English', 'an':'Aragonese', 'bg':'Bulgarian', 'ca':'Catalan', 'cz':'Czech', 'da':'Danish', 'de':'German', 'el':'Greek (Greece)', 'el_CY':'Greek (Cyprus)', 'es':'Spanish', 'eu':'Basque-Euskera', 'fi':'Finnish', 'fr':'French', 'gl':'Galician', 'hr':'Croatian', 'hu':'Hungarian', 'it':'Italian', 'jp_kana':'Japanese', 'ko_KR':'Korean (South Korea)', 'nl':'Dutch', 'pl':'Polish', 'pt':'Portuguese', 'pt_br':'Portuguese (Brazilian)', 'ro':'Romanian', 'ru':'Russian', 'sk':'Slovak', 'sv':'Swedish', 'tr':'Turkish', 'uk':'Ukrainian', 'vi':'Vietnamese', 'zh_CN':'Chinese (Simplified)', 'zh_TW':'Chinese (Traditional)' }
|
||||||
*/
|
*/
|
||||||
#define LCD_LANGUAGE en
|
#define LCD_LANGUAGE en
|
||||||
|
|
||||||
@@ -1998,6 +2166,7 @@
|
|||||||
// Add individual axis homing items (Home X, Home Y, and Home Z) to the LCD menu.
|
// Add individual axis homing items (Home X, Home Y, and Home Z) to the LCD menu.
|
||||||
//
|
//
|
||||||
//#define INDIVIDUAL_AXIS_HOMING_MENU
|
//#define INDIVIDUAL_AXIS_HOMING_MENU
|
||||||
|
//#define INDIVIDUAL_AXIS_HOMING_SUBMENU
|
||||||
|
|
||||||
//
|
//
|
||||||
// SPEAKER/BUZZER
|
// SPEAKER/BUZZER
|
||||||
@@ -2254,11 +2423,17 @@
|
|||||||
//
|
//
|
||||||
//#define MKS_MINI_12864
|
//#define MKS_MINI_12864
|
||||||
|
|
||||||
|
//
|
||||||
|
// MKS MINI12864 V3 is an alias for FYSETC_MINI_12864_2_1. Type A/B. NeoPixel RGB Backlight.
|
||||||
|
//
|
||||||
|
//#define MKS_MINI_12864_V3
|
||||||
|
|
||||||
//
|
//
|
||||||
// MKS LCD12864A/B with graphic controller and SD support. Follows MKS_MINI_12864 pinout.
|
// MKS LCD12864A/B with graphic controller and SD support. Follows MKS_MINI_12864 pinout.
|
||||||
// https://www.aliexpress.com/item/33018110072.html
|
// https://www.aliexpress.com/item/33018110072.html
|
||||||
//
|
//
|
||||||
//#define MKS_LCD12864
|
//#define MKS_LCD12864A
|
||||||
|
//#define MKS_LCD12864B
|
||||||
|
|
||||||
//
|
//
|
||||||
// FYSETC variant of the MINI12864 graphic controller with SD support
|
// FYSETC variant of the MINI12864 graphic controller with SD support
|
||||||
@@ -2373,12 +2548,39 @@
|
|||||||
// DGUS Touch Display with DWIN OS. (Choose one.)
|
// DGUS Touch Display with DWIN OS. (Choose one.)
|
||||||
// ORIGIN : https://www.aliexpress.com/item/32993409517.html
|
// ORIGIN : https://www.aliexpress.com/item/32993409517.html
|
||||||
// FYSETC : https://www.aliexpress.com/item/32961471929.html
|
// FYSETC : https://www.aliexpress.com/item/32961471929.html
|
||||||
|
// MKS : https://www.aliexpress.com/item/1005002008179262.html
|
||||||
|
//
|
||||||
|
// Flash display with DGUS Displays for Marlin:
|
||||||
|
// - Format the SD card to FAT32 with an allocation size of 4kb.
|
||||||
|
// - Download files as specified for your type of display.
|
||||||
|
// - Plug the microSD card into the back of the display.
|
||||||
|
// - Boot the display and wait for the update to complete.
|
||||||
|
//
|
||||||
|
// ORIGIN (Marlin DWIN_SET)
|
||||||
|
// - Download https://github.com/coldtobi/Marlin_DGUS_Resources
|
||||||
|
// - Copy the downloaded DWIN_SET folder to the SD card.
|
||||||
|
//
|
||||||
|
// FYSETC (Supplier default)
|
||||||
|
// - Download https://github.com/FYSETC/FYSTLCD-2.0
|
||||||
|
// - Copy the downloaded SCREEN folder to the SD card.
|
||||||
|
//
|
||||||
|
// HIPRECY (Supplier default)
|
||||||
|
// - Download https://github.com/HiPrecy/Touch-Lcd-LEO
|
||||||
|
// - Copy the downloaded DWIN_SET folder to the SD card.
|
||||||
|
//
|
||||||
|
// MKS (MKS-H43) (Supplier default)
|
||||||
|
// - Download https://github.com/makerbase-mks/MKS-H43
|
||||||
|
// - Copy the downloaded DWIN_SET folder to the SD card.
|
||||||
|
//
|
||||||
|
// RELOADED (T5UID1)
|
||||||
|
// - Download https://github.com/Desuuuu/DGUS-reloaded/releases
|
||||||
|
// - Copy the downloaded DWIN_SET folder to the SD card.
|
||||||
//
|
//
|
||||||
//#define DGUS_LCD_UI_ORIGIN
|
//#define DGUS_LCD_UI_ORIGIN
|
||||||
//#define DGUS_LCD_UI_FYSETC
|
//#define DGUS_LCD_UI_FYSETC
|
||||||
//#define DGUS_LCD_UI_HIPRECY
|
//#define DGUS_LCD_UI_HIPRECY
|
||||||
|
|
||||||
//#define DGUS_LCD_UI_MKS
|
//#define DGUS_LCD_UI_MKS
|
||||||
|
//#define DGUS_LCD_UI_RELOADED
|
||||||
#if ENABLED(DGUS_LCD_UI_MKS)
|
#if ENABLED(DGUS_LCD_UI_MKS)
|
||||||
#define USE_MKS_GREEN_UI
|
#define USE_MKS_GREEN_UI
|
||||||
#endif
|
#endif
|
||||||
@@ -2521,6 +2723,7 @@
|
|||||||
//#define TFT_RES_320x240
|
//#define TFT_RES_320x240
|
||||||
//#define TFT_RES_480x272
|
//#define TFT_RES_480x272
|
||||||
//#define TFT_RES_480x320
|
//#define TFT_RES_480x320
|
||||||
|
//#define TFT_RES_1024x600
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -2561,13 +2764,31 @@
|
|||||||
//#define DWIN_CREALITY_LCD
|
//#define DWIN_CREALITY_LCD
|
||||||
|
|
||||||
//
|
//
|
||||||
// ADS7843/XPT2046 ADC Touchscreen such as ILI9341 2.8
|
// Ender-3 v2 OEM display, enhanced.
|
||||||
|
//
|
||||||
|
//#define DWIN_CREALITY_LCD_ENHANCED
|
||||||
|
|
||||||
|
//
|
||||||
|
// Ender-3 v2 OEM display with enhancements by Jacob Myers
|
||||||
|
//
|
||||||
|
//#define DWIN_CREALITY_LCD_JYERSUI
|
||||||
|
|
||||||
|
//
|
||||||
|
// MarlinUI for Creality's DWIN display (and others)
|
||||||
|
//
|
||||||
|
//#define DWIN_MARLINUI_PORTRAIT
|
||||||
|
//#define DWIN_MARLINUI_LANDSCAPE
|
||||||
|
|
||||||
|
//
|
||||||
|
// Touch Screen Settings
|
||||||
//
|
//
|
||||||
//#define TOUCH_SCREEN
|
//#define TOUCH_SCREEN
|
||||||
#if ENABLED(TOUCH_SCREEN)
|
#if ENABLED(TOUCH_SCREEN)
|
||||||
#define BUTTON_DELAY_EDIT 50 // (ms) Button repeat delay for edit screens
|
#define BUTTON_DELAY_EDIT 50 // (ms) Button repeat delay for edit screens
|
||||||
#define BUTTON_DELAY_MENU 250 // (ms) Button repeat delay for menus
|
#define BUTTON_DELAY_MENU 250 // (ms) Button repeat delay for menus
|
||||||
|
|
||||||
|
//#define TOUCH_IDLE_SLEEP 300 // (secs) Turn off the TFT backlight if set (5mn)
|
||||||
|
|
||||||
#define TOUCH_SCREEN_CALIBRATION
|
#define TOUCH_SCREEN_CALIBRATION
|
||||||
|
|
||||||
//#define TOUCH_CALIBRATION_X 12316
|
//#define TOUCH_CALIBRATION_X 12316
|
||||||
@@ -2675,7 +2896,7 @@
|
|||||||
//#define NEOPIXEL_LED
|
//#define NEOPIXEL_LED
|
||||||
#if ENABLED(NEOPIXEL_LED)
|
#if ENABLED(NEOPIXEL_LED)
|
||||||
#define NEOPIXEL_TYPE NEO_GRBW // NEO_GRBW / NEO_GRB - four/three channel driver type (defined in Adafruit_NeoPixel.h)
|
#define NEOPIXEL_TYPE NEO_GRBW // NEO_GRBW / NEO_GRB - four/three channel driver type (defined in Adafruit_NeoPixel.h)
|
||||||
#define NEOPIXEL_PIN 4 // LED driving pin
|
//#define NEOPIXEL_PIN 4 // LED driving pin
|
||||||
//#define NEOPIXEL2_TYPE NEOPIXEL_TYPE
|
//#define NEOPIXEL2_TYPE NEOPIXEL_TYPE
|
||||||
//#define NEOPIXEL2_PIN 5
|
//#define NEOPIXEL2_PIN 5
|
||||||
#define NEOPIXEL_PIXELS 30 // Number of LEDs in the strip. (Longest strip when NEOPIXEL2_SEPARATE is disabled.)
|
#define NEOPIXEL_PIXELS 30 // Number of LEDs in the strip. (Longest strip when NEOPIXEL2_SEPARATE is disabled.)
|
||||||
@@ -2693,10 +2914,11 @@
|
|||||||
//#define NEOPIXEL2_INSERIES // Default behavior is NeoPixel 2 in parallel
|
//#define NEOPIXEL2_INSERIES // Default behavior is NeoPixel 2 in parallel
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Use a single NeoPixel LED for static (background) lighting
|
// Use some of the NeoPixel LEDs for static (background) lighting
|
||||||
//#define NEOPIXEL_BKGD_LED_INDEX 0 // Index of the LED to use
|
//#define NEOPIXEL_BKGD_INDEX_FIRST 0 // Index of the first background LED
|
||||||
//#define NEOPIXEL_BKGD_COLOR { 255, 255, 255, 0 } // R, G, B, W
|
//#define NEOPIXEL_BKGD_INDEX_LAST 5 // Index of the last background LED
|
||||||
//#define NEOPIXEL_BKGD_ALWAYS_ON // Keep the backlight on when other NeoPixels are off
|
//#define NEOPIXEL_BKGD_COLOR { 255, 255, 255, 0 } // R, G, B, W
|
||||||
|
//#define NEOPIXEL_BKGD_ALWAYS_ON // Keep the backlight on when other NeoPixels are off
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -2721,9 +2943,9 @@
|
|||||||
* Set this manually if there are extra servos needing manual control.
|
* Set this manually if there are extra servos needing manual control.
|
||||||
* Set to 0 to turn off servo support.
|
* Set to 0 to turn off servo support.
|
||||||
*/
|
*/
|
||||||
//#define NUM_SERVOS 3 // Servo index starts with 0 for M280 command
|
//#define NUM_SERVOS 3 // Note: Servo index starts with 0 for M280-M282 commands
|
||||||
|
|
||||||
// (ms) Delay before the next move will start, to give the servo time to reach its target angle.
|
// (ms) Delay before the next move will start, to give the servo time to reach its target angle.
|
||||||
// 300ms is a good value but you can try less delay.
|
// 300ms is a good value but you can try less delay.
|
||||||
// If the servo can't reach the requested position, increase it.
|
// If the servo can't reach the requested position, increase it.
|
||||||
#define SERVO_DELAY { 300 }
|
#define SERVO_DELAY { 300 }
|
||||||
@@ -2733,3 +2955,6 @@
|
|||||||
|
|
||||||
// Edit servo angles with M281 and save to EEPROM with M500
|
// Edit servo angles with M281 and save to EEPROM with M500
|
||||||
//#define EDITABLE_SERVO_ANGLES
|
//#define EDITABLE_SERVO_ANGLES
|
||||||
|
|
||||||
|
// Disable servo with M282 to reduce power consumption, noise, and heat when not in use
|
||||||
|
//#define SERVO_DETACH_GCODE
|
||||||
|
@@ -30,7 +30,7 @@
|
|||||||
*
|
*
|
||||||
* Basic settings can be found in Configuration.h
|
* Basic settings can be found in Configuration.h
|
||||||
*/
|
*/
|
||||||
#define CONFIGURATION_ADV_H_VERSION 020008
|
#define CONFIGURATION_ADV_H_VERSION 02000902
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
//============================= Thermal Settings ============================
|
//============================= Thermal Settings ============================
|
||||||
@@ -125,10 +125,33 @@
|
|||||||
#define PROBE_BETA 3950 // Beta value
|
#define PROBE_BETA 3950 // Beta value
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//
|
#if TEMP_SENSOR_BOARD == 1000
|
||||||
// Hephestos 2 24V heated bed upgrade kit.
|
#define BOARD_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor
|
||||||
// https://store.bq.com/en/heated-bed-kit-hephestos2
|
#define BOARD_RESISTANCE_25C_OHMS 100000 // Resistance at 25C
|
||||||
//
|
#define BOARD_BETA 3950 // Beta value
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if TEMP_SENSOR_REDUNDANT == 1000
|
||||||
|
#define REDUNDANT_PULLUP_RESISTOR_OHMS 4700 // Pullup resistor
|
||||||
|
#define REDUNDANT_RESISTANCE_25C_OHMS 100000 // Resistance at 25C
|
||||||
|
#define REDUNDANT_BETA 3950 // Beta value
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configuration options for MAX Thermocouples (-2, -3, -5).
|
||||||
|
* FORCE_HW_SPI: Ignore SCK/MOSI/MISO pins and just use the CS pin & default SPI bus.
|
||||||
|
* MAX31865_WIRES: Set the number of wires for the probe connected to a MAX31865 board, 2-4. Default: 2
|
||||||
|
* MAX31865_50HZ: Enable 50Hz filter instead of the default 60Hz.
|
||||||
|
*/
|
||||||
|
//#define TEMP_SENSOR_FORCE_HW_SPI
|
||||||
|
//#define MAX31865_SENSOR_WIRES_0 2
|
||||||
|
//#define MAX31865_SENSOR_WIRES_1 2
|
||||||
|
//#define MAX31865_50HZ_FILTER
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hephestos 2 24V heated bed upgrade kit.
|
||||||
|
* https://store.bq.com/en/heated-bed-kit-hephestos2
|
||||||
|
*/
|
||||||
//#define HEPHESTOS2_HEATED_BED_KIT
|
//#define HEPHESTOS2_HEATED_BED_KIT
|
||||||
#if ENABLED(HEPHESTOS2_HEATED_BED_KIT)
|
#if ENABLED(HEPHESTOS2_HEATED_BED_KIT)
|
||||||
#undef TEMP_SENSOR_BED
|
#undef TEMP_SENSOR_BED
|
||||||
@@ -196,7 +219,7 @@
|
|||||||
#define COOLER_MAXTEMP 26 // (°C)
|
#define COOLER_MAXTEMP 26 // (°C)
|
||||||
#define COOLER_DEFAULT_TEMP 16 // (°C)
|
#define COOLER_DEFAULT_TEMP 16 // (°C)
|
||||||
#define TEMP_COOLER_HYSTERESIS 1 // (°C) Temperature proximity considered "close enough" to the target
|
#define TEMP_COOLER_HYSTERESIS 1 // (°C) Temperature proximity considered "close enough" to the target
|
||||||
#define COOLER_PIN 8 // Laser cooler on/off pin used to control power to the cooling element e.g. TEC, External chiller via relay
|
#define COOLER_PIN 8 // Laser cooler on/off pin used to control power to the cooling element (e.g., TEC, External chiller via relay)
|
||||||
#define COOLER_INVERTING false
|
#define COOLER_INVERTING false
|
||||||
#define TEMP_COOLER_PIN 15 // Laser/Cooler temperature sensor pin. ADC is required.
|
#define TEMP_COOLER_PIN 15 // Laser/Cooler temperature sensor pin. ADC is required.
|
||||||
#define COOLER_FAN // Enable a fan on the cooler, Fan# 0,1,2,3 etc.
|
#define COOLER_FAN // Enable a fan on the cooler, Fan# 0,1,2,3 etc.
|
||||||
@@ -207,6 +230,18 @@
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
//
|
||||||
|
// Motherboard Sensor options
|
||||||
|
//
|
||||||
|
#if TEMP_SENSOR_BOARD
|
||||||
|
#define THERMAL_PROTECTION_BOARD // Halt the printer if the board sensor leaves the temp range below.
|
||||||
|
#define BOARD_MINTEMP 8 // (°C)
|
||||||
|
#define BOARD_MAXTEMP 70 // (°C)
|
||||||
|
#ifndef TEMP_BOARD_PIN
|
||||||
|
//#define TEMP_BOARD_PIN -1 // Board temp sensor pin, if not set in pins file.
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
//
|
//
|
||||||
// Laser Coolant Flow Meter
|
// Laser Coolant Flow Meter
|
||||||
//
|
//
|
||||||
@@ -463,16 +498,20 @@
|
|||||||
*/
|
*/
|
||||||
//#define USE_CONTROLLER_FAN
|
//#define USE_CONTROLLER_FAN
|
||||||
#if ENABLED(USE_CONTROLLER_FAN)
|
#if ENABLED(USE_CONTROLLER_FAN)
|
||||||
//#define CONTROLLER_FAN_PIN -1 // Set a custom pin for the controller fan
|
//#define CONTROLLER_FAN_PIN -1 // Set a custom pin for the controller fan
|
||||||
//#define CONTROLLER_FAN_USE_Z_ONLY // With this option only the Z axis is considered
|
//#define CONTROLLER_FAN_USE_Z_ONLY // With this option only the Z axis is considered
|
||||||
//#define CONTROLLER_FAN_IGNORE_Z // Ignore Z stepper. Useful when stepper timeout is disabled.
|
//#define CONTROLLER_FAN_IGNORE_Z // Ignore Z stepper. Useful when stepper timeout is disabled.
|
||||||
#define CONTROLLERFAN_SPEED_MIN 0 // (0-255) Minimum speed. (If set below this value the fan is turned off.)
|
#define CONTROLLERFAN_SPEED_MIN 0 // (0-255) Minimum speed. (If set below this value the fan is turned off.)
|
||||||
#define CONTROLLERFAN_SPEED_ACTIVE 255 // (0-255) Active speed, used when any motor is enabled
|
#define CONTROLLERFAN_SPEED_ACTIVE 255 // (0-255) Active speed, used when any motor is enabled
|
||||||
#define CONTROLLERFAN_SPEED_IDLE 0 // (0-255) Idle speed, used when motors are disabled
|
#define CONTROLLERFAN_SPEED_IDLE 0 // (0-255) Idle speed, used when motors are disabled
|
||||||
#define CONTROLLERFAN_IDLE_TIME 60 // (seconds) Extra time to keep the fan running after disabling motors
|
#define CONTROLLERFAN_IDLE_TIME 60 // (seconds) Extra time to keep the fan running after disabling motors
|
||||||
//#define CONTROLLER_FAN_EDITABLE // Enable M710 configurable settings
|
|
||||||
|
// Use TEMP_SENSOR_BOARD as a trigger for enabling the controller fan
|
||||||
|
//#define CONTROLLER_FAN_MIN_BOARD_TEMP 40 // (°C) Turn on the fan if the board reaches this temperature
|
||||||
|
|
||||||
|
//#define CONTROLLER_FAN_EDITABLE // Enable M710 configurable settings
|
||||||
#if ENABLED(CONTROLLER_FAN_EDITABLE)
|
#if ENABLED(CONTROLLER_FAN_EDITABLE)
|
||||||
#define CONTROLLER_FAN_MENU // Enable the Controller Fan submenu
|
#define CONTROLLER_FAN_MENU // Enable the Controller Fan submenu
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -526,6 +565,11 @@
|
|||||||
//#define USE_OCR2A_AS_TOP
|
//#define USE_OCR2A_AS_TOP
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use one of the PWM fans as a redundant part-cooling fan
|
||||||
|
*/
|
||||||
|
//#define REDUNDANT_PART_COOLING_FAN 2 // Index of the fan to sync with FAN 0.
|
||||||
|
|
||||||
// @section extruder
|
// @section extruder
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -671,6 +715,12 @@
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// Drive the E axis with two synchronized steppers
|
||||||
|
//#define E_DUAL_STEPPER_DRIVERS
|
||||||
|
#if ENABLED(E_DUAL_STEPPER_DRIVERS)
|
||||||
|
//#define INVERT_E1_VS_E0_DIR // Enable if the E motors need opposite DIR states
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Dual X Carriage
|
* Dual X Carriage
|
||||||
*
|
*
|
||||||
@@ -734,7 +784,7 @@
|
|||||||
* the position of the toolhead relative to the workspace.
|
* the position of the toolhead relative to the workspace.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//#define SENSORLESS_BACKOFF_MM { 2, 2 } // (mm) Backoff from endstops before sensorless homing
|
//#define SENSORLESS_BACKOFF_MM { 2, 2, 0 } // (mm) Backoff from endstops before sensorless homing
|
||||||
|
|
||||||
#define HOMING_BUMP_MM { 5, 5, 2 } // (mm) Backoff from endstops after first bump
|
#define HOMING_BUMP_MM { 5, 5, 2 } // (mm) Backoff from endstops after first bump
|
||||||
#define HOMING_BUMP_DIVISOR { 2, 2, 4 } // Re-Bump Speed Divisor (Divides the Homing Feedrate)
|
#define HOMING_BUMP_DIVISOR { 2, 2, 4 } // Re-Bump Speed Divisor (Divides the Homing Feedrate)
|
||||||
@@ -918,6 +968,9 @@
|
|||||||
#define INVERT_X_STEP_PIN false
|
#define INVERT_X_STEP_PIN false
|
||||||
#define INVERT_Y_STEP_PIN false
|
#define INVERT_Y_STEP_PIN false
|
||||||
#define INVERT_Z_STEP_PIN false
|
#define INVERT_Z_STEP_PIN false
|
||||||
|
#define INVERT_I_STEP_PIN false
|
||||||
|
#define INVERT_J_STEP_PIN false
|
||||||
|
#define INVERT_K_STEP_PIN false
|
||||||
#define INVERT_E_STEP_PIN false
|
#define INVERT_E_STEP_PIN false
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -929,6 +982,9 @@
|
|||||||
#define DISABLE_INACTIVE_X true
|
#define DISABLE_INACTIVE_X true
|
||||||
#define DISABLE_INACTIVE_Y true
|
#define DISABLE_INACTIVE_Y true
|
||||||
#define DISABLE_INACTIVE_Z true // Set 'false' if the nozzle could fall onto your printed part!
|
#define DISABLE_INACTIVE_Z true // Set 'false' if the nozzle could fall onto your printed part!
|
||||||
|
#define DISABLE_INACTIVE_I true
|
||||||
|
#define DISABLE_INACTIVE_J true
|
||||||
|
#define DISABLE_INACTIVE_K true
|
||||||
#define DISABLE_INACTIVE_E true
|
#define DISABLE_INACTIVE_E true
|
||||||
|
|
||||||
// Default Minimum Feedrates for printing and travel moves
|
// Default Minimum Feedrates for printing and travel moves
|
||||||
@@ -969,7 +1025,7 @@
|
|||||||
#if ENABLED(BACKLASH_COMPENSATION)
|
#if ENABLED(BACKLASH_COMPENSATION)
|
||||||
// Define values for backlash distance and correction.
|
// Define values for backlash distance and correction.
|
||||||
// If BACKLASH_GCODE is enabled these values are the defaults.
|
// If BACKLASH_GCODE is enabled these values are the defaults.
|
||||||
#define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm)
|
#define BACKLASH_DISTANCE_MM { 0, 0, 0 } // (mm) One value for each linear axis
|
||||||
#define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
|
#define BACKLASH_CORRECTION 0.0 // 0.0 = no correction; 1.0 = full correction
|
||||||
|
|
||||||
// Add steps for motor direction changes on CORE kinematics
|
// Add steps for motor direction changes on CORE kinematics
|
||||||
@@ -1040,6 +1096,13 @@
|
|||||||
#define CALIBRATION_MEASURE_LEFT
|
#define CALIBRATION_MEASURE_LEFT
|
||||||
#define CALIBRATION_MEASURE_BACK
|
#define CALIBRATION_MEASURE_BACK
|
||||||
|
|
||||||
|
//#define CALIBRATION_MEASURE_IMIN
|
||||||
|
//#define CALIBRATION_MEASURE_IMAX
|
||||||
|
//#define CALIBRATION_MEASURE_JMIN
|
||||||
|
//#define CALIBRATION_MEASURE_JMAX
|
||||||
|
//#define CALIBRATION_MEASURE_KMIN
|
||||||
|
//#define CALIBRATION_MEASURE_KMAX
|
||||||
|
|
||||||
// Probing at the exact top center only works if the center is flat. If
|
// Probing at the exact top center only works if the center is flat. If
|
||||||
// probing on a screwhead or hollow washer, probe near the edges.
|
// probing on a screwhead or hollow washer, probe near the edges.
|
||||||
//#define CALIBRATION_MEASURE_AT_TOP_EDGES
|
//#define CALIBRATION_MEASURE_AT_TOP_EDGES
|
||||||
@@ -1133,7 +1196,7 @@
|
|||||||
|
|
||||||
// @section lcd
|
// @section lcd
|
||||||
|
|
||||||
#if EITHER(IS_ULTIPANEL, EXTENSIBLE_UI)
|
#if ANY(HAS_LCD_MENU, EXTENSIBLE_UI, HAS_DWIN_E3V2)
|
||||||
#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 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
|
#define FINE_MANUAL_MOVE 0.025 // (mm) Smallest manual move (< 0.1mm) applying to Z on most machines
|
||||||
#if IS_ULTIPANEL
|
#if IS_ULTIPANEL
|
||||||
@@ -1241,11 +1304,14 @@
|
|||||||
//#define LCD_SHOW_E_TOTAL
|
//#define LCD_SHOW_E_TOTAL
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if EITHER(SDSUPPORT, LCD_SET_PROGRESS_MANUALLY) && ANY(HAS_MARLINUI_U8GLIB, HAS_MARLINUI_HD44780, IS_TFTGLCD_PANEL, EXTENSIBLE_UI)
|
// LCD Print Progress options
|
||||||
//#define SHOW_REMAINING_TIME // Display estimated time to completion
|
#if EITHER(SDSUPPORT, LCD_SET_PROGRESS_MANUALLY)
|
||||||
#if ENABLED(SHOW_REMAINING_TIME)
|
#if ANY(HAS_MARLINUI_U8GLIB, EXTENSIBLE_UI, HAS_MARLINUI_HD44780, IS_TFTGLCD_PANEL, IS_DWIN_MARLINUI)
|
||||||
//#define USE_M73_REMAINING_TIME // Use remaining time from M73 command instead of estimation
|
//#define SHOW_REMAINING_TIME // Display estimated time to completion
|
||||||
//#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
|
#if ENABLED(SHOW_REMAINING_TIME)
|
||||||
|
//#define USE_M73_REMAINING_TIME // Use remaining time from M73 command instead of estimation
|
||||||
|
//#define ROTATE_PROGRESS_DISPLAY // Display (P)rogress, (E)lapsed, and (R)emaining time
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if EITHER(HAS_MARLINUI_U8GLIB, EXTENSIBLE_UI)
|
#if EITHER(HAS_MARLINUI_U8GLIB, EXTENSIBLE_UI)
|
||||||
@@ -1301,6 +1367,8 @@
|
|||||||
|
|
||||||
//#define BROWSE_MEDIA_ON_INSERT // Open the file browser when media is inserted
|
//#define BROWSE_MEDIA_ON_INSERT // Open the file browser when media is inserted
|
||||||
|
|
||||||
|
//#define MEDIA_MENU_AT_TOP // Force the media menu to be listed on the top of the main menu
|
||||||
|
|
||||||
#define EVENT_GCODE_SD_ABORT "G28XY" // G-code to run on SD Abort Print (e.g., "G28XY" or "G27")
|
#define EVENT_GCODE_SD_ABORT "G28XY" // G-code to run on SD Abort Print (e.g., "G28XY" or "G27")
|
||||||
|
|
||||||
#if ENABLED(PRINTER_EVENT_LEDS)
|
#if ENABLED(PRINTER_EVENT_LEDS)
|
||||||
@@ -1486,8 +1554,8 @@
|
|||||||
#if ENABLED(MULTI_VOLUME)
|
#if ENABLED(MULTI_VOLUME)
|
||||||
#define VOLUME_SD_ONBOARD
|
#define VOLUME_SD_ONBOARD
|
||||||
#define VOLUME_USB_FLASH_DRIVE
|
#define VOLUME_USB_FLASH_DRIVE
|
||||||
#define DEFAULT_VOLUME SD_ONBOARD
|
#define DEFAULT_VOLUME SV_SD_ONBOARD
|
||||||
#define DEFAULT_SHARED_VOLUME USB_FLASH_DRIVE
|
#define DEFAULT_SHARED_VOLUME SV_USB_FLASH_DRIVE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif // SDSUPPORT
|
#endif // SDSUPPORT
|
||||||
@@ -1511,16 +1579,10 @@
|
|||||||
* printing performance versus fast display updates.
|
* printing performance versus fast display updates.
|
||||||
*/
|
*/
|
||||||
#if HAS_MARLINUI_U8GLIB
|
#if HAS_MARLINUI_U8GLIB
|
||||||
// Show SD percentage next to the progress bar
|
|
||||||
//#define DOGM_SD_PERCENT
|
|
||||||
|
|
||||||
// Save many cycles by drawing a hollow frame or no frame on the Info Screen
|
// Save many cycles by drawing a hollow frame or no frame on the Info Screen
|
||||||
//#define XYZ_NO_FRAME
|
//#define XYZ_NO_FRAME
|
||||||
#define XYZ_HOLLOW_FRAME
|
#define XYZ_HOLLOW_FRAME
|
||||||
|
|
||||||
// Enable to save many cycles by drawing a hollow frame on Menu Screens
|
|
||||||
#define MENU_HOLLOW_FRAME
|
|
||||||
|
|
||||||
// A bigger font is available for edit items. Costs 3120 bytes of PROGMEM.
|
// A bigger font is available for edit items. Costs 3120 bytes of PROGMEM.
|
||||||
// Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
|
// Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
|
||||||
//#define USE_BIG_EDIT_FONT
|
//#define USE_BIG_EDIT_FONT
|
||||||
@@ -1529,9 +1591,6 @@
|
|||||||
// Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
|
// Western only. Not available for Cyrillic, Kana, Turkish, Greek, or Chinese.
|
||||||
//#define USE_SMALL_INFOFONT
|
//#define USE_SMALL_INFOFONT
|
||||||
|
|
||||||
// Swap the CW/CCW indicators in the graphics overlay
|
|
||||||
//#define OVERLAY_GFX_REVERSE
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ST7920-based LCDs can emulate a 16 x 4 character display using
|
* ST7920-based LCDs can emulate a 16 x 4 character display using
|
||||||
* the ST7920 character-generator for very fast screen updates.
|
* the ST7920 character-generator for very fast screen updates.
|
||||||
@@ -1562,7 +1621,7 @@
|
|||||||
*/
|
*/
|
||||||
//#define STATUS_COMBINE_HEATERS // Use combined heater images instead of separate ones
|
//#define STATUS_COMBINE_HEATERS // Use combined heater images instead of separate ones
|
||||||
//#define STATUS_HOTEND_NUMBERLESS // Use plain hotend icons instead of numbered ones (with 2+ hotends)
|
//#define STATUS_HOTEND_NUMBERLESS // Use plain hotend icons instead of numbered ones (with 2+ hotends)
|
||||||
#define STATUS_HOTEND_INVERTED // Show solid nozzle bitmaps when heating (Requires STATUS_HOTEND_ANIM)
|
#define STATUS_HOTEND_INVERTED // Show solid nozzle bitmaps when heating (Requires STATUS_HOTEND_ANIM for numbered hotends)
|
||||||
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
|
#define STATUS_HOTEND_ANIM // Use a second bitmap to indicate hotend heating
|
||||||
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
|
#define STATUS_BED_ANIM // Use a second bitmap to indicate bed heating
|
||||||
#define STATUS_CHAMBER_ANIM // Use a second bitmap to indicate chamber heating
|
#define STATUS_CHAMBER_ANIM // Use a second bitmap to indicate chamber heating
|
||||||
@@ -1583,6 +1642,17 @@
|
|||||||
|
|
||||||
#endif // HAS_MARLINUI_U8GLIB
|
#endif // HAS_MARLINUI_U8GLIB
|
||||||
|
|
||||||
|
#if HAS_MARLINUI_U8GLIB || IS_DWIN_MARLINUI
|
||||||
|
// Show SD percentage next to the progress bar
|
||||||
|
//#define SHOW_SD_PERCENT
|
||||||
|
|
||||||
|
// Enable to save many cycles by drawing a hollow frame on Menu Screens
|
||||||
|
#define MENU_HOLLOW_FRAME
|
||||||
|
|
||||||
|
// Swap the CW/CCW indicators in the graphics overlay
|
||||||
|
//#define OVERLAY_GFX_REVERSE
|
||||||
|
#endif
|
||||||
|
|
||||||
//
|
//
|
||||||
// Additional options for DGUS / DWIN displays
|
// Additional options for DGUS / DWIN displays
|
||||||
//
|
//
|
||||||
@@ -1648,7 +1718,7 @@
|
|||||||
//
|
//
|
||||||
// Specify additional languages for the UI. Default specified by LCD_LANGUAGE.
|
// Specify additional languages for the UI. Default specified by LCD_LANGUAGE.
|
||||||
//
|
//
|
||||||
#if ANY(DOGLCD, TFT_COLOR_UI, TOUCH_UI_FTDI_EVE)
|
#if ANY(DOGLCD, TFT_COLOR_UI, TOUCH_UI_FTDI_EVE, IS_DWIN_MARLINUI)
|
||||||
//#define LCD_LANGUAGE_2 fr
|
//#define LCD_LANGUAGE_2 fr
|
||||||
//#define LCD_LANGUAGE_3 de
|
//#define LCD_LANGUAGE_3 de
|
||||||
//#define LCD_LANGUAGE_4 es
|
//#define LCD_LANGUAGE_4 es
|
||||||
@@ -1667,7 +1737,7 @@
|
|||||||
//#define LCD_4DSYSTEMS_4DLCD_FT843 // 4D Systems 4.3" (480x272)
|
//#define LCD_4DSYSTEMS_4DLCD_FT843 // 4D Systems 4.3" (480x272)
|
||||||
//#define LCD_HAOYU_FT800CB // Haoyu with 4.3" or 5" (480x272)
|
//#define LCD_HAOYU_FT800CB // Haoyu with 4.3" or 5" (480x272)
|
||||||
//#define LCD_HAOYU_FT810CB // Haoyu with 5" (800x480)
|
//#define LCD_HAOYU_FT810CB // Haoyu with 5" (800x480)
|
||||||
//#define LCD_ALEPHOBJECTS_CLCD_UI // Aleph Objects Color LCD UI
|
//#define LCD_LULZBOT_CLCD_UI // LulzBot Color LCD UI
|
||||||
//#define LCD_FYSETC_TFT81050 // FYSETC with 5" (800x480)
|
//#define LCD_FYSETC_TFT81050 // FYSETC with 5" (800x480)
|
||||||
//#define LCD_EVE3_50G // Matrix Orbital 5.0", 800x480, BT815
|
//#define LCD_EVE3_50G // Matrix Orbital 5.0", 800x480, BT815
|
||||||
//#define LCD_EVE2_50G // Matrix Orbital 5.0", 800x480, FT813
|
//#define LCD_EVE2_50G // Matrix Orbital 5.0", 800x480, FT813
|
||||||
@@ -1678,8 +1748,8 @@
|
|||||||
//#define TOUCH_UI_800x480
|
//#define TOUCH_UI_800x480
|
||||||
|
|
||||||
// Mappings for boards with a standard RepRapDiscount Display connector
|
// Mappings for boards with a standard RepRapDiscount Display connector
|
||||||
//#define AO_EXP1_PINMAP // AlephObjects CLCD UI EXP1 mapping
|
//#define AO_EXP1_PINMAP // LulzBot CLCD UI EXP1 mapping
|
||||||
//#define AO_EXP2_PINMAP // AlephObjects CLCD UI EXP2 mapping
|
//#define AO_EXP2_PINMAP // LulzBot CLCD UI EXP2 mapping
|
||||||
//#define CR10_TFT_PINMAP // Rudolph Riedel's CR10 pin mapping
|
//#define CR10_TFT_PINMAP // Rudolph Riedel's CR10 pin mapping
|
||||||
//#define S6_TFT_PINMAP // FYSETC S6 pin mapping
|
//#define S6_TFT_PINMAP // FYSETC S6 pin mapping
|
||||||
//#define F6_TFT_PINMAP // FYSETC F6 pin mapping
|
//#define F6_TFT_PINMAP // FYSETC F6 pin mapping
|
||||||
@@ -1940,30 +2010,30 @@
|
|||||||
//#define USE_TEMP_EXT_COMPENSATION
|
//#define USE_TEMP_EXT_COMPENSATION
|
||||||
|
|
||||||
// Probe temperature calibration generates a table of values starting at PTC_SAMPLE_START
|
// Probe temperature calibration generates a table of values starting at PTC_SAMPLE_START
|
||||||
// (e.g. 30), in steps of PTC_SAMPLE_RES (e.g. 5) with PTC_SAMPLE_COUNT (e.g. 10) samples.
|
// (e.g., 30), in steps of PTC_SAMPLE_RES (e.g., 5) with PTC_SAMPLE_COUNT (e.g., 10) samples.
|
||||||
|
|
||||||
//#define PTC_SAMPLE_START 30.0f
|
//#define PTC_SAMPLE_START 30 // (°C)
|
||||||
//#define PTC_SAMPLE_RES 5.0f
|
//#define PTC_SAMPLE_RES 5 // (°C)
|
||||||
//#define PTC_SAMPLE_COUNT 10U
|
//#define PTC_SAMPLE_COUNT 10
|
||||||
|
|
||||||
// Bed temperature calibration builds a similar table.
|
// Bed temperature calibration builds a similar table.
|
||||||
|
|
||||||
//#define BTC_SAMPLE_START 60.0f
|
//#define BTC_SAMPLE_START 60 // (°C)
|
||||||
//#define BTC_SAMPLE_RES 5.0f
|
//#define BTC_SAMPLE_RES 5 // (°C)
|
||||||
//#define BTC_SAMPLE_COUNT 10U
|
//#define BTC_SAMPLE_COUNT 10
|
||||||
|
|
||||||
// The temperature the probe should be at while taking measurements during bed temperature
|
// The temperature the probe should be at while taking measurements during bed temperature
|
||||||
// calibration.
|
// calibration.
|
||||||
//#define BTC_PROBE_TEMP 30.0f
|
//#define BTC_PROBE_TEMP 30 // (°C)
|
||||||
|
|
||||||
// Height above Z=0.0f to raise the nozzle. Lowering this can help the probe to heat faster.
|
// Height above Z=0.0 to raise the nozzle. Lowering this can help the probe to heat faster.
|
||||||
// Note: the Z=0.0f offset is determined by the probe offset which can be set using M851.
|
// Note: the Z=0.0 offset is determined by the probe offset which can be set using M851.
|
||||||
//#define PTC_PROBE_HEATING_OFFSET 0.5f
|
//#define PTC_PROBE_HEATING_OFFSET 0.5
|
||||||
|
|
||||||
// Height to raise the Z-probe between heating and taking the next measurement. Some probes
|
// Height to raise the Z-probe between heating and taking the next measurement. Some probes
|
||||||
// may fail to untrigger if they have been triggered for a long time, which can be solved by
|
// may fail to untrigger if they have been triggered for a long time, which can be solved by
|
||||||
// increasing the height the probe is raised to.
|
// increasing the height the probe is raised to.
|
||||||
//#define PTC_PROBE_RAISE 15U
|
//#define PTC_PROBE_RAISE 15
|
||||||
|
|
||||||
// If the probe is outside of the defined range, use linear extrapolation using the closest
|
// If the probe is outside of the defined range, use linear extrapolation using the closest
|
||||||
// point and the PTC_LINEAR_EXTRAPOLATION'th next point. E.g. if set to 4 it will use data[0]
|
// point and the PTC_LINEAR_EXTRAPOLATION'th next point. E.g. if set to 4 it will use data[0]
|
||||||
@@ -1982,20 +2052,23 @@
|
|||||||
//
|
//
|
||||||
// G2/G3 Arc Support
|
// G2/G3 Arc Support
|
||||||
//
|
//
|
||||||
#define ARC_SUPPORT // Disable this feature to save ~3226 bytes
|
#define ARC_SUPPORT // Requires ~3226 bytes
|
||||||
#if ENABLED(ARC_SUPPORT)
|
#if ENABLED(ARC_SUPPORT)
|
||||||
#define MM_PER_ARC_SEGMENT 1 // (mm) Length (or minimum length) of each arc segment
|
#define MIN_ARC_SEGMENT_MM 0.1 // (mm) Minimum length of each arc segment
|
||||||
//#define ARC_SEGMENTS_PER_R 1 // Max segment length, MM_PER = Min
|
#define MAX_ARC_SEGMENT_MM 1.0 // (mm) Maximum length of each arc segment
|
||||||
#define MIN_ARC_SEGMENTS 24 // Minimum number of segments in a complete circle
|
#define MIN_CIRCLE_SEGMENTS 72 // Minimum number of segments in a complete circle
|
||||||
//#define ARC_SEGMENTS_PER_SEC 50 // Use feedrate to choose segment length (with MM_PER_ARC_SEGMENT as the minimum)
|
//#define ARC_SEGMENTS_PER_SEC 50 // Use the feedrate to choose the segment length
|
||||||
#define N_ARC_CORRECTION 25 // Number of interpolated segments between corrections
|
#define N_ARC_CORRECTION 25 // Number of interpolated segments between corrections
|
||||||
//#define ARC_P_CIRCLES // Enable the 'P' parameter to specify complete circles
|
//#define ARC_P_CIRCLES // Enable the 'P' parameter to specify complete circles
|
||||||
//#define CNC_WORKSPACE_PLANES // Allow G2/G3 to operate in XY, ZX, or YZ planes
|
//#define SF_ARC_FIX // Enable only if using SkeinForge with "Arc Point" fillet procedure
|
||||||
//#define SF_ARC_FIX // Enable only if using SkeinForge with "Arc Point" fillet procedure
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Support for G5 with XYZE destination and IJPQ offsets. Requires ~2666 bytes.
|
// G5 Bézier Curve Support with XYZE destination and IJPQ offsets
|
||||||
//#define BEZIER_CURVE_SUPPORT
|
//#define BEZIER_CURVE_SUPPORT // Requires ~2666 bytes
|
||||||
|
|
||||||
|
#if EITHER(ARC_SUPPORT, BEZIER_CURVE_SUPPORT)
|
||||||
|
//#define CNC_WORKSPACE_PLANES // Allow G2/G3/G5 to operate in XY, ZX, or YZ planes
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Direct Stepping
|
* Direct Stepping
|
||||||
@@ -2078,7 +2151,7 @@
|
|||||||
// @section motion
|
// @section motion
|
||||||
|
|
||||||
// The number of linear moves that can be in the planner at once.
|
// The number of linear moves that can be in the planner at once.
|
||||||
// The value of BLOCK_BUFFER_SIZE must be a power of 2 (e.g. 8, 16, 32)
|
// The value of BLOCK_BUFFER_SIZE must be a power of 2 (e.g., 8, 16, 32)
|
||||||
#if BOTH(SDSUPPORT, DIRECT_STEPPING)
|
#if BOTH(SDSUPPORT, DIRECT_STEPPING)
|
||||||
#define BLOCK_BUFFER_SIZE 8
|
#define BLOCK_BUFFER_SIZE 8
|
||||||
#elif ENABLED(SDSUPPORT)
|
#elif ENABLED(SDSUPPORT)
|
||||||
@@ -2114,9 +2187,6 @@
|
|||||||
//#define SERIAL_XON_XOFF
|
//#define SERIAL_XON_XOFF
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Add M575 G-code to change the baud rate
|
|
||||||
//#define BAUD_RATE_GCODE
|
|
||||||
|
|
||||||
#if ENABLED(SDSUPPORT)
|
#if ENABLED(SDSUPPORT)
|
||||||
// Enable this option to collect and display the maximum
|
// Enable this option to collect and display the maximum
|
||||||
// RX queue usage after transferring a file to SD.
|
// RX queue usage after transferring a file to SD.
|
||||||
@@ -2237,6 +2307,13 @@
|
|||||||
//#define EVENT_GCODE_AFTER_TOOLCHANGE "G12X" // Extra G-code to run after tool-change
|
//#define EVENT_GCODE_AFTER_TOOLCHANGE "G12X" // Extra G-code to run after tool-change
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extra G-code to run while executing tool-change commands. Can be used to use an additional
|
||||||
|
* stepper motor (I axis, see option LINEAR_AXES in Configuration.h) to drive the tool-changer.
|
||||||
|
*/
|
||||||
|
//#define EVENT_GCODE_TOOLCHANGE_T0 "G28 A\nG1 A0" // Extra G-code to run while executing tool-change command T0
|
||||||
|
//#define EVENT_GCODE_TOOLCHANGE_T1 "G1 A10" // Extra G-code to run while executing tool-change command T1
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tool Sensors detect when tools have been picked up or dropped.
|
* Tool Sensors detect when tools have been picked up or dropped.
|
||||||
* Requires the pins TOOL_SENSOR1_PIN, TOOL_SENSOR2_PIN, etc.
|
* Requires the pins TOOL_SENSOR1_PIN, TOOL_SENSOR2_PIN, etc.
|
||||||
@@ -2301,14 +2378,15 @@
|
|||||||
#endif // HAS_MULTI_EXTRUDER
|
#endif // HAS_MULTI_EXTRUDER
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Advanced Pause
|
* Advanced Pause for Filament Change
|
||||||
* Experimental feature for filament change support and for parking the nozzle when paused.
|
* - Adds the G-code M600 Filament Change to initiate a filament change.
|
||||||
* Adds the GCode M600 for initiating filament change.
|
* - This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
|
||||||
* If PARK_HEAD_ON_PAUSE enabled, adds the GCode M125 to pause printing and park the nozzle.
|
|
||||||
*
|
*
|
||||||
* Requires an LCD display.
|
* Requirements:
|
||||||
* Requires NOZZLE_PARK_FEATURE.
|
* - For Filament Change parking enable and configure NOZZLE_PARK_FEATURE.
|
||||||
* This feature is required for the default FILAMENT_RUNOUT_SCRIPT.
|
* - For user interaction enable an LCD display, HOST_PROMPT_SUPPORT, or EMERGENCY_PARSER.
|
||||||
|
*
|
||||||
|
* Enable PARK_HEAD_ON_PAUSE to add the G-code M125 Pause and Park.
|
||||||
*/
|
*/
|
||||||
//#define ADVANCED_PAUSE_FEATURE
|
//#define ADVANCED_PAUSE_FEATURE
|
||||||
#if ENABLED(ADVANCED_PAUSE_FEATURE)
|
#if ENABLED(ADVANCED_PAUSE_FEATURE)
|
||||||
@@ -2347,6 +2425,8 @@
|
|||||||
#define PAUSE_PARK_NOZZLE_TIMEOUT 45 // (seconds) Time limit before the nozzle is turned off for safety.
|
#define PAUSE_PARK_NOZZLE_TIMEOUT 45 // (seconds) Time limit before the nozzle is turned off for safety.
|
||||||
#define FILAMENT_CHANGE_ALERT_BEEPS 10 // Number of alert beeps to play when a response is needed.
|
#define FILAMENT_CHANGE_ALERT_BEEPS 10 // Number of alert beeps to play when a response is needed.
|
||||||
#define PAUSE_PARK_NO_STEPPER_TIMEOUT // Enable for XYZ steppers to stay powered on during filament change.
|
#define PAUSE_PARK_NO_STEPPER_TIMEOUT // Enable for XYZ steppers to stay powered on during filament change.
|
||||||
|
//#define FILAMENT_CHANGE_RESUME_ON_INSERT // Automatically continue / load filament when runout sensor is triggered again.
|
||||||
|
//#define PAUSE_REHEAT_FAST_RESUME // Reduce number of waits by not prompting again post-timeout before continuing.
|
||||||
|
|
||||||
//#define PARK_HEAD_ON_PAUSE // Park the nozzle during pause and filament change.
|
//#define PARK_HEAD_ON_PAUSE // Park the nozzle during pause and filament change.
|
||||||
//#define HOME_BEFORE_FILAMENT_CHANGE // If needed, home before parking for filament change
|
//#define HOME_BEFORE_FILAMENT_CHANGE // If needed, home before parking for filament change
|
||||||
@@ -2413,6 +2493,24 @@
|
|||||||
#define Z4_MICROSTEPS Z_MICROSTEPS
|
#define Z4_MICROSTEPS Z_MICROSTEPS
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if AXIS_DRIVER_TYPE_I(TMC26X)
|
||||||
|
#define I_MAX_CURRENT 1000
|
||||||
|
#define I_SENSE_RESISTOR 91
|
||||||
|
#define I_MICROSTEPS 16
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if AXIS_DRIVER_TYPE_J(TMC26X)
|
||||||
|
#define J_MAX_CURRENT 1000
|
||||||
|
#define J_SENSE_RESISTOR 91
|
||||||
|
#define J_MICROSTEPS 16
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if AXIS_DRIVER_TYPE_K(TMC26X)
|
||||||
|
#define K_MAX_CURRENT 1000
|
||||||
|
#define K_SENSE_RESISTOR 91
|
||||||
|
#define K_MICROSTEPS 16
|
||||||
|
#endif
|
||||||
|
|
||||||
#if AXIS_DRIVER_TYPE_E0(TMC26X)
|
#if AXIS_DRIVER_TYPE_E0(TMC26X)
|
||||||
#define E0_MAX_CURRENT 1000
|
#define E0_MAX_CURRENT 1000
|
||||||
#define E0_SENSE_RESISTOR 91
|
#define E0_SENSE_RESISTOR 91
|
||||||
@@ -2563,6 +2661,33 @@
|
|||||||
//#define Z4_INTERPOLATE true
|
//#define Z4_INTERPOLATE true
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if AXIS_IS_TMC(I)
|
||||||
|
#define I_CURRENT 800
|
||||||
|
#define I_CURRENT_HOME I_CURRENT
|
||||||
|
#define I_MICROSTEPS 16
|
||||||
|
#define I_RSENSE 0.11
|
||||||
|
#define I_CHAIN_POS -1
|
||||||
|
//#define I_INTERPOLATE true
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if AXIS_IS_TMC(J)
|
||||||
|
#define J_CURRENT 800
|
||||||
|
#define J_CURRENT_HOME J_CURRENT
|
||||||
|
#define J_MICROSTEPS 16
|
||||||
|
#define J_RSENSE 0.11
|
||||||
|
#define J_CHAIN_POS -1
|
||||||
|
//#define J_INTERPOLATE true
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if AXIS_IS_TMC(K)
|
||||||
|
#define K_CURRENT 800
|
||||||
|
#define K_CURRENT_HOME K_CURRENT
|
||||||
|
#define K_MICROSTEPS 16
|
||||||
|
#define K_RSENSE 0.11
|
||||||
|
#define K_CHAIN_POS -1
|
||||||
|
//#define K_INTERPOLATE true
|
||||||
|
#endif
|
||||||
|
|
||||||
#if AXIS_IS_TMC(E0)
|
#if AXIS_IS_TMC(E0)
|
||||||
#define E0_CURRENT 800
|
#define E0_CURRENT 800
|
||||||
#define E0_MICROSTEPS 16
|
#define E0_MICROSTEPS 16
|
||||||
@@ -2638,6 +2763,10 @@
|
|||||||
//#define Y2_CS_PIN -1
|
//#define Y2_CS_PIN -1
|
||||||
//#define Z2_CS_PIN -1
|
//#define Z2_CS_PIN -1
|
||||||
//#define Z3_CS_PIN -1
|
//#define Z3_CS_PIN -1
|
||||||
|
//#define Z4_CS_PIN -1
|
||||||
|
//#define I_CS_PIN -1
|
||||||
|
//#define J_CS_PIN -1
|
||||||
|
//#define K_CS_PIN -1
|
||||||
//#define E0_CS_PIN -1
|
//#define E0_CS_PIN -1
|
||||||
//#define E1_CS_PIN -1
|
//#define E1_CS_PIN -1
|
||||||
//#define E2_CS_PIN -1
|
//#define E2_CS_PIN -1
|
||||||
@@ -2677,6 +2806,9 @@
|
|||||||
//#define Z2_SLAVE_ADDRESS 0
|
//#define Z2_SLAVE_ADDRESS 0
|
||||||
//#define Z3_SLAVE_ADDRESS 0
|
//#define Z3_SLAVE_ADDRESS 0
|
||||||
//#define Z4_SLAVE_ADDRESS 0
|
//#define Z4_SLAVE_ADDRESS 0
|
||||||
|
//#define I_SLAVE_ADDRESS 0
|
||||||
|
//#define J_SLAVE_ADDRESS 0
|
||||||
|
//#define K_SLAVE_ADDRESS 0
|
||||||
//#define E0_SLAVE_ADDRESS 0
|
//#define E0_SLAVE_ADDRESS 0
|
||||||
//#define E1_SLAVE_ADDRESS 0
|
//#define E1_SLAVE_ADDRESS 0
|
||||||
//#define E2_SLAVE_ADDRESS 0
|
//#define E2_SLAVE_ADDRESS 0
|
||||||
@@ -2701,6 +2833,9 @@
|
|||||||
*/
|
*/
|
||||||
#define STEALTHCHOP_XY
|
#define STEALTHCHOP_XY
|
||||||
#define STEALTHCHOP_Z
|
#define STEALTHCHOP_Z
|
||||||
|
#define STEALTHCHOP_I
|
||||||
|
#define STEALTHCHOP_J
|
||||||
|
#define STEALTHCHOP_K
|
||||||
#define STEALTHCHOP_E
|
#define STEALTHCHOP_E
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -2772,6 +2907,9 @@
|
|||||||
#define Z2_HYBRID_THRESHOLD 3
|
#define Z2_HYBRID_THRESHOLD 3
|
||||||
#define Z3_HYBRID_THRESHOLD 3
|
#define Z3_HYBRID_THRESHOLD 3
|
||||||
#define Z4_HYBRID_THRESHOLD 3
|
#define Z4_HYBRID_THRESHOLD 3
|
||||||
|
#define I_HYBRID_THRESHOLD 3
|
||||||
|
#define J_HYBRID_THRESHOLD 3
|
||||||
|
#define K_HYBRID_THRESHOLD 3
|
||||||
#define E0_HYBRID_THRESHOLD 30
|
#define E0_HYBRID_THRESHOLD 30
|
||||||
#define E1_HYBRID_THRESHOLD 30
|
#define E1_HYBRID_THRESHOLD 30
|
||||||
#define E2_HYBRID_THRESHOLD 30
|
#define E2_HYBRID_THRESHOLD 30
|
||||||
@@ -2797,7 +2935,7 @@
|
|||||||
*
|
*
|
||||||
* It is recommended to set HOMING_BUMP_MM to { 0, 0, 0 }.
|
* It is recommended to set HOMING_BUMP_MM to { 0, 0, 0 }.
|
||||||
*
|
*
|
||||||
* SPI_ENDSTOPS *** Beta feature! *** TMC2130 Only ***
|
* SPI_ENDSTOPS *** Beta feature! *** TMC2130/TMC5160 Only ***
|
||||||
* Poll the driver through SPI to determine load when homing.
|
* Poll the driver through SPI to determine load when homing.
|
||||||
* Removes the need for a wire from DIAG1 to an endstop pin.
|
* Removes the need for a wire from DIAG1 to an endstop pin.
|
||||||
*
|
*
|
||||||
@@ -2818,6 +2956,9 @@
|
|||||||
//#define Z2_STALL_SENSITIVITY Z_STALL_SENSITIVITY
|
//#define Z2_STALL_SENSITIVITY Z_STALL_SENSITIVITY
|
||||||
//#define Z3_STALL_SENSITIVITY Z_STALL_SENSITIVITY
|
//#define Z3_STALL_SENSITIVITY Z_STALL_SENSITIVITY
|
||||||
//#define Z4_STALL_SENSITIVITY Z_STALL_SENSITIVITY
|
//#define Z4_STALL_SENSITIVITY Z_STALL_SENSITIVITY
|
||||||
|
//#define I_STALL_SENSITIVITY 8
|
||||||
|
//#define J_STALL_SENSITIVITY 8
|
||||||
|
//#define K_STALL_SENSITIVITY 8
|
||||||
//#define SPI_ENDSTOPS // TMC2130 only
|
//#define SPI_ENDSTOPS // TMC2130 only
|
||||||
//#define IMPROVE_HOMING_RELIABILITY
|
//#define IMPROVE_HOMING_RELIABILITY
|
||||||
#endif
|
#endif
|
||||||
@@ -2958,6 +3099,33 @@
|
|||||||
#define Z4_SLEW_RATE 1
|
#define Z4_SLEW_RATE 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if AXIS_DRIVER_TYPE_I(L6470)
|
||||||
|
#define I_MICROSTEPS 128
|
||||||
|
#define I_OVERCURRENT 2000
|
||||||
|
#define I_STALLCURRENT 1500
|
||||||
|
#define I_MAX_VOLTAGE 127
|
||||||
|
#define I_CHAIN_POS -1
|
||||||
|
#define I_SLEW_RATE 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if AXIS_DRIVER_TYPE_J(L6470)
|
||||||
|
#define J_MICROSTEPS 128
|
||||||
|
#define J_OVERCURRENT 2000
|
||||||
|
#define J_STALLCURRENT 1500
|
||||||
|
#define J_MAX_VOLTAGE 127
|
||||||
|
#define J_CHAIN_POS -1
|
||||||
|
#define J_SLEW_RATE 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if AXIS_DRIVER_TYPE_K(L6470)
|
||||||
|
#define K_MICROSTEPS 128
|
||||||
|
#define K_OVERCURRENT 2000
|
||||||
|
#define K_STALLCURRENT 1500
|
||||||
|
#define K_MAX_VOLTAGE 127
|
||||||
|
#define K_CHAIN_POS -1
|
||||||
|
#define K_SLEW_RATE 1
|
||||||
|
#endif
|
||||||
|
|
||||||
#if AXIS_IS_L64XX(E0)
|
#if AXIS_IS_L64XX(E0)
|
||||||
#define E0_MICROSTEPS 128
|
#define E0_MICROSTEPS 128
|
||||||
#define E0_OVERCURRENT 2000
|
#define E0_OVERCURRENT 2000
|
||||||
@@ -3157,22 +3325,30 @@
|
|||||||
//#define SPINDLE_FEATURE
|
//#define SPINDLE_FEATURE
|
||||||
//#define LASER_FEATURE
|
//#define LASER_FEATURE
|
||||||
#if EITHER(SPINDLE_FEATURE, LASER_FEATURE)
|
#if EITHER(SPINDLE_FEATURE, LASER_FEATURE)
|
||||||
#define SPINDLE_LASER_ACTIVE_STATE LOW // Set to "HIGH" if the on/off function is active HIGH
|
#define SPINDLE_LASER_ACTIVE_STATE LOW // Set to "HIGH" if SPINDLE_LASER_ENA_PIN is active HIGH
|
||||||
#define SPINDLE_LASER_PWM true // Set to "true" if your controller supports setting the speed/power
|
|
||||||
#define SPINDLE_LASER_PWM_INVERT false // Set to "true" if the speed/power goes up when you want it to go slower
|
|
||||||
|
|
||||||
#define SPINDLE_LASER_FREQUENCY 2500 // (Hz) Spindle/laser frequency (only on supported HALs: AVR and LPC)
|
#define SPINDLE_LASER_USE_PWM // Enable if your controller supports setting the speed/power
|
||||||
|
#if ENABLED(SPINDLE_LASER_USE_PWM)
|
||||||
|
#define SPINDLE_LASER_PWM_INVERT false // Set to "true" if the speed/power goes up when you want it to go slower
|
||||||
|
#define SPINDLE_LASER_FREQUENCY 2500 // (Hz) Spindle/laser frequency (only on supported HALs: AVR and LPC)
|
||||||
|
#endif
|
||||||
|
|
||||||
//#define AIR_EVACUATION // Cutter Vacuum / Laser Blower motor control with G-codes M10-M11
|
//#define AIR_EVACUATION // Cutter Vacuum / Laser Blower motor control with G-codes M10-M11
|
||||||
#if ENABLED(AIR_EVACUATION)
|
#if ENABLED(AIR_EVACUATION)
|
||||||
#define AIR_EVACUATION_ACTIVE LOW // Set to "HIGH" if the on/off function is active HIGH
|
#define AIR_EVACUATION_ACTIVE LOW // Set to "HIGH" if the on/off function is active HIGH
|
||||||
#define AIR_EVACUATION_PIN 42 // Override the default Cutter Vacuum or Laser Blower pin
|
//#define AIR_EVACUATION_PIN 42 // Override the default Cutter Vacuum or Laser Blower pin
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//#define SPINDLE_SERVO // A servo converting an angle to spindle power
|
//#define AIR_ASSIST // Air Assist control with G-codes M8-M9
|
||||||
|
#if ENABLED(AIR_ASSIST)
|
||||||
|
#define AIR_ASSIST_ACTIVE LOW // Active state on air assist pin
|
||||||
|
//#define AIR_ASSIST_PIN 44 // Override the default Air Assist pin
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//#define SPINDLE_SERVO // A servo converting an angle to spindle power
|
||||||
#ifdef SPINDLE_SERVO
|
#ifdef SPINDLE_SERVO
|
||||||
#define SPINDLE_SERVO_NR 0 // Index of servo used for spindle control
|
#define SPINDLE_SERVO_NR 0 // Index of servo used for spindle control
|
||||||
#define SPINDLE_SERVO_MIN 10 // Minimum angle for servo spindle
|
#define SPINDLE_SERVO_MIN 10 // Minimum angle for servo spindle
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -3211,17 +3387,21 @@
|
|||||||
* Speed/Power = (PWMDC / 255 * 100 - SPEED_POWER_INTERCEPT) / SPEED_POWER_SLOPE
|
* Speed/Power = (PWMDC / 255 * 100 - SPEED_POWER_INTERCEPT) / SPEED_POWER_SLOPE
|
||||||
* PWMDC = (spdpwr - SPEED_POWER_MIN) / (SPEED_POWER_MAX - SPEED_POWER_MIN) / SPEED_POWER_SLOPE
|
* PWMDC = (spdpwr - SPEED_POWER_MIN) / (SPEED_POWER_MAX - SPEED_POWER_MIN) / SPEED_POWER_SLOPE
|
||||||
*/
|
*/
|
||||||
#define SPEED_POWER_INTERCEPT 0 // (%) 0-100 i.e., Minimum power percentage
|
#if ENABLED(SPINDLE_LASER_USE_PWM)
|
||||||
#define SPEED_POWER_MIN 5000 // (RPM)
|
#define SPEED_POWER_INTERCEPT 0 // (%) 0-100 i.e., Minimum power percentage
|
||||||
#define SPEED_POWER_MAX 30000 // (RPM) SuperPID router controller 0 - 30,000 RPM
|
#define SPEED_POWER_MIN 5000 // (RPM)
|
||||||
#define SPEED_POWER_STARTUP 25000 // (RPM) M3/M4 speed/power default (with no arguments)
|
#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)
|
||||||
|
#endif
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#define SPEED_POWER_INTERCEPT 0 // (%) 0-100 i.e., Minimum power percentage
|
#if ENABLED(SPINDLE_LASER_USE_PWM)
|
||||||
#define SPEED_POWER_MIN 0 // (%) 0-100
|
#define SPEED_POWER_INTERCEPT 0 // (%) 0-100 i.e., Minimum power percentage
|
||||||
#define SPEED_POWER_MAX 100 // (%) 0-100
|
#define SPEED_POWER_MIN 0 // (%) 0-100
|
||||||
#define SPEED_POWER_STARTUP 80 // (%) M3/M4 speed/power default (with no arguments)
|
#define SPEED_POWER_MAX 100 // (%) 0-100
|
||||||
|
#define SPEED_POWER_STARTUP 80 // (%) M3/M4 speed/power default (with no arguments)
|
||||||
|
#endif
|
||||||
|
|
||||||
// Define the minimum and maximum test pulse time values for a laser test fire function
|
// Define the minimum and maximum test pulse time values for a laser test fire function
|
||||||
#define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
|
#define LASER_TEST_PULSE_MIN 1 // Used with Laser Control Menu
|
||||||
@@ -3301,8 +3481,18 @@
|
|||||||
#define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
|
#define SPINDLE_LASER_POWERDOWN_DELAY 50 // (ms) Delay to allow the spindle to stop
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
//
|
||||||
|
// Laser I2C Ammeter (High precision INA226 low/high side module)
|
||||||
|
//
|
||||||
|
//#define I2C_AMMETER
|
||||||
|
#if ENABLED(I2C_AMMETER)
|
||||||
|
#define I2C_AMMETER_IMAX 0.1 // (Amps) Calibration value for the expected current range
|
||||||
|
#define I2C_AMMETER_SHUNT_RESISTOR 0.1 // (Ohms) Calibration shunt resistor value
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif // SPINDLE_FEATURE || LASER_FEATURE
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Synchronous Laser Control with M106/M107
|
* Synchronous Laser Control with M106/M107
|
||||||
@@ -3409,6 +3599,11 @@
|
|||||||
*/
|
*/
|
||||||
#define AUTO_REPORT_TEMPERATURES
|
#define AUTO_REPORT_TEMPERATURES
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Auto-report position with M154 S<seconds>
|
||||||
|
*/
|
||||||
|
//#define AUTO_REPORT_POSITION
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Include capabilities in M115 output
|
* Include capabilities in M115 output
|
||||||
*/
|
*/
|
||||||
@@ -3478,7 +3673,7 @@
|
|||||||
#define PROPORTIONAL_FONT_RATIO 1.0
|
#define PROPORTIONAL_FONT_RATIO 1.0
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Spend 28 bytes of SRAM to optimize the GCode parser
|
* Spend 28 bytes of SRAM to optimize the G-code parser
|
||||||
*/
|
*/
|
||||||
#define FASTER_GCODE_PARSER
|
#define FASTER_GCODE_PARSER
|
||||||
|
|
||||||
@@ -3640,6 +3835,7 @@
|
|||||||
*/
|
*/
|
||||||
//#define HOST_ACTION_COMMANDS
|
//#define HOST_ACTION_COMMANDS
|
||||||
#if ENABLED(HOST_ACTION_COMMANDS)
|
#if ENABLED(HOST_ACTION_COMMANDS)
|
||||||
|
//#define HOST_PAUSE_M76
|
||||||
//#define HOST_PROMPT_SUPPORT
|
//#define HOST_PROMPT_SUPPORT
|
||||||
//#define HOST_START_MENU_ITEM // Add a menu item that tells the host to start
|
//#define HOST_START_MENU_ITEM // Add a menu item that tells the host to start
|
||||||
#endif
|
#endif
|
||||||
@@ -3729,7 +3925,7 @@
|
|||||||
*/
|
*/
|
||||||
#define I2CPE_MIN_UPD_TIME_MS 4 // (ms) Minimum time between encoder checks.
|
#define I2CPE_MIN_UPD_TIME_MS 4 // (ms) Minimum time between encoder checks.
|
||||||
|
|
||||||
// Use a rolling average to identify persistant errors that indicate skips, as opposed to vibration and noise.
|
// Use a rolling average to identify persistent errors that indicate skips, as opposed to vibration and noise.
|
||||||
#define I2CPE_ERR_ROLLING_AVERAGE
|
#define I2CPE_ERR_ROLLING_AVERAGE
|
||||||
|
|
||||||
#endif // I2C_POSITION_ENCODERS
|
#endif // I2C_POSITION_ENCODERS
|
||||||
@@ -3774,6 +3970,16 @@
|
|||||||
#define GANTRY_CALIBRATION_COMMANDS_POST "G28" // G28 highly recommended to ensure an accurate position
|
#define GANTRY_CALIBRATION_COMMANDS_POST "G28" // G28 highly recommended to ensure an accurate position
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instant freeze / unfreeze functionality
|
||||||
|
* Specified pin has pullup and connecting to ground will instantly pause motion.
|
||||||
|
* Potentially useful for emergency stop that allows being resumed.
|
||||||
|
*/
|
||||||
|
//#define FREEZE_FEATURE
|
||||||
|
#if ENABLED(FREEZE_FEATURE)
|
||||||
|
//#define FREEZE_PIN 41 // Override the default (KILL) pin here
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* MAX7219 Debug Matrix
|
* MAX7219 Debug Matrix
|
||||||
*
|
*
|
||||||
@@ -3985,6 +4191,14 @@
|
|||||||
// Enable Marlin dev mode which adds some special commands
|
// Enable Marlin dev mode which adds some special commands
|
||||||
//#define MARLIN_DEV_MODE
|
//#define MARLIN_DEV_MODE
|
||||||
|
|
||||||
|
#if ENABLED(MARLIN_DEV_MODE)
|
||||||
|
/**
|
||||||
|
* D576 - Buffer Monitoring
|
||||||
|
* To help diagnose print quality issues stemming from empty command buffers.
|
||||||
|
*/
|
||||||
|
//#define BUFFER_MONITORING
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Postmortem Debugging captures misbehavior and outputs the CPU status and backtrace to serial.
|
* Postmortem Debugging captures misbehavior and outputs the CPU status and backtrace to serial.
|
||||||
* When running in the debugger it will break for debugging. This is useful to help understand
|
* When running in the debugger it will break for debugging. This is useful to help understand
|
||||||
|
@@ -110,7 +110,7 @@ LIQUID_TWI2 ?= 0
|
|||||||
WIRE ?= 0
|
WIRE ?= 0
|
||||||
|
|
||||||
# This defines if Tone is needed (i.e SPEAKER is defined in Configuration.h)
|
# This defines if Tone is needed (i.e SPEAKER is defined in Configuration.h)
|
||||||
# Disabling this (and SPEAKER) saves approximatively 350 bytes of memory.
|
# Disabling this (and SPEAKER) saves approximately 350 bytes of memory.
|
||||||
TONE ?= 1
|
TONE ?= 1
|
||||||
|
|
||||||
# This defines if U8GLIB is needed (may require RELOC_WORKAROUND)
|
# This defines if U8GLIB is needed (may require RELOC_WORKAROUND)
|
||||||
|
@@ -28,7 +28,7 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin release version identifier
|
* Marlin release version identifier
|
||||||
*/
|
*/
|
||||||
//#define SHORT_BUILD_VERSION "bugfix-2.0.x"
|
//#define SHORT_BUILD_VERSION "2.0.9.2"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Verbose version identifier which should contain a reference to the location
|
* Verbose version identifier which should contain a reference to the location
|
||||||
@@ -41,7 +41,7 @@
|
|||||||
* here we define this default string as the date where the latest release
|
* here we define this default string as the date where the latest release
|
||||||
* version was tagged.
|
* version was tagged.
|
||||||
*/
|
*/
|
||||||
//#define STRING_DISTRIBUTION_DATE "2019-07-10"
|
//#define STRING_DISTRIBUTION_DATE "2021-09-03"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Defines a generic printer name to be output to the LCD after booting Marlin.
|
* Defines a generic printer name to be output to the LCD after booting Marlin.
|
||||||
|
@@ -39,6 +39,19 @@
|
|||||||
#include <avr/interrupt.h>
|
#include <avr/interrupt.h>
|
||||||
#include <avr/io.h>
|
#include <avr/io.h>
|
||||||
|
|
||||||
|
//
|
||||||
|
// Default graphical display delays
|
||||||
|
//
|
||||||
|
#if F_CPU >= 20000000
|
||||||
|
#define CPU_ST7920_DELAY_1 150
|
||||||
|
#define CPU_ST7920_DELAY_2 0
|
||||||
|
#define CPU_ST7920_DELAY_3 150
|
||||||
|
#elif F_CPU == 16000000
|
||||||
|
#define CPU_ST7920_DELAY_1 125
|
||||||
|
#define CPU_ST7920_DELAY_2 0
|
||||||
|
#define CPU_ST7920_DELAY_3 188
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef pgm_read_ptr
|
#ifndef pgm_read_ptr
|
||||||
// Compatibility for avr-libc 1.8.0-4.1 included with Ubuntu for
|
// Compatibility for avr-libc 1.8.0-4.1 included with Ubuntu for
|
||||||
// Windows Subsystem for Linux on Windows 10 as of 10/18/2019
|
// Windows Subsystem for Linux on Windows 10 as of 10/18/2019
|
||||||
@@ -93,28 +106,35 @@ typedef int8_t pin_t;
|
|||||||
#define MYSERIAL1 TERN(BLUETOOTH, btSerial, MSerial0)
|
#define MYSERIAL1 TERN(BLUETOOTH, btSerial, MSerial0)
|
||||||
#else
|
#else
|
||||||
#if !WITHIN(SERIAL_PORT, -1, 3)
|
#if !WITHIN(SERIAL_PORT, -1, 3)
|
||||||
#error "SERIAL_PORT must be from 0 to 3. You can also use -1 if the board supports Native USB."
|
#error "SERIAL_PORT must be from 0 to 3, or -1 for USB Serial."
|
||||||
#endif
|
#endif
|
||||||
#define MYSERIAL1 customizedSerial1
|
#define MYSERIAL1 customizedSerial1
|
||||||
|
|
||||||
#ifdef SERIAL_PORT_2
|
#ifdef SERIAL_PORT_2
|
||||||
#if !WITHIN(SERIAL_PORT_2, -1, 3)
|
#if !WITHIN(SERIAL_PORT_2, -1, 3)
|
||||||
#error "SERIAL_PORT_2 must be from 0 to 3. You can also use -1 if the board supports Native USB."
|
#error "SERIAL_PORT_2 must be from 0 to 3, or -1 for USB Serial."
|
||||||
#endif
|
#endif
|
||||||
#define MYSERIAL2 customizedSerial2
|
#define MYSERIAL2 customizedSerial2
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef SERIAL_PORT_3
|
||||||
|
#if !WITHIN(SERIAL_PORT_3, -1, 3)
|
||||||
|
#error "SERIAL_PORT_3 must be from 0 to 3, or -1 for USB Serial."
|
||||||
|
#endif
|
||||||
|
#define MYSERIAL3 customizedSerial3
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef MMU2_SERIAL_PORT
|
#ifdef MMU2_SERIAL_PORT
|
||||||
#if !WITHIN(MMU2_SERIAL_PORT, -1, 3)
|
#if !WITHIN(MMU2_SERIAL_PORT, -1, 3)
|
||||||
#error "MMU2_SERIAL_PORT must be from 0 to 3. You can also use -1 if the board supports Native USB."
|
#error "MMU2_SERIAL_PORT must be from 0 to 3, or -1 for USB Serial."
|
||||||
#endif
|
#endif
|
||||||
#define MMU2_SERIAL mmuSerial
|
#define MMU2_SERIAL mmuSerial
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef LCD_SERIAL_PORT
|
#ifdef LCD_SERIAL_PORT
|
||||||
#if !WITHIN(LCD_SERIAL_PORT, -1, 3)
|
#if !WITHIN(LCD_SERIAL_PORT, -1, 3)
|
||||||
#error "LCD_SERIAL_PORT must be from 0 to 3. You can also use -1 if the board supports Native USB."
|
#error "LCD_SERIAL_PORT must be from 0 to 3, or -1 for USB Serial."
|
||||||
#endif
|
#endif
|
||||||
#define LCD_SERIAL lcdSerial
|
#define LCD_SERIAL lcdSerial
|
||||||
#if HAS_DGUS_LCD
|
#if HAS_DGUS_LCD
|
||||||
@@ -179,7 +199,7 @@ inline void HAL_adc_init() {
|
|||||||
#define GET_PIN_MAP_INDEX(pin) pin
|
#define GET_PIN_MAP_INDEX(pin) pin
|
||||||
#define PARSED_PIN_INDEX(code, dval) parser.intval(code, dval)
|
#define PARSED_PIN_INDEX(code, dval) parser.intval(code, dval)
|
||||||
|
|
||||||
#define HAL_SENSITIVE_PINS 0, 1
|
#define HAL_SENSITIVE_PINS 0, 1,
|
||||||
|
|
||||||
#ifdef __AVR_AT90USB1286__
|
#ifdef __AVR_AT90USB1286__
|
||||||
#define JTAG_DISABLE() do{ MCUCR = 0x80; MCUCR = 0x80; }while(0)
|
#define JTAG_DISABLE() do{ MCUCR = 0x80; MCUCR = 0x80; }while(0)
|
||||||
|
@@ -74,7 +74,8 @@ void spiBegin() {
|
|||||||
#elif defined(PRR0)
|
#elif defined(PRR0)
|
||||||
PRR0
|
PRR0
|
||||||
#endif
|
#endif
|
||||||
, PRSPI);
|
, PRSPI
|
||||||
|
);
|
||||||
|
|
||||||
SPCR = _BV(SPE) | _BV(MSTR) | (spiRate >> 1);
|
SPCR = _BV(SPE) | _BV(MSTR) | (spiRate >> 1);
|
||||||
SPSR = spiRate & 1 || spiRate == 6 ? 0 : _BV(SPI2X);
|
SPSR = spiRate & 1 || spiRate == 6 ? 0 : _BV(SPI2X);
|
||||||
|
26
Marlin/src/HAL/AVR/MarlinSPI.h
Normal file
26
Marlin/src/HAL/AVR/MarlinSPI.h
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
/**
|
||||||
|
* Marlin 3D Printer Firmware
|
||||||
|
* Copyright (c) 2021 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 <SPI.h>
|
||||||
|
|
||||||
|
using MarlinSPI = SPIClass;
|
@@ -567,7 +567,7 @@ ISR(SERIAL_REGNAME(USART, SERIAL_PORT, _UDRE_vect)) {
|
|||||||
|
|
||||||
// Because of the template definition above, it's required to instantiate the template to have all methods generated
|
// Because of the template definition above, it's required to instantiate the template to have all methods generated
|
||||||
template class MarlinSerial< MarlinSerialCfg<SERIAL_PORT> >;
|
template class MarlinSerial< MarlinSerialCfg<SERIAL_PORT> >;
|
||||||
MSerialT customizedSerial1(MSerialT::HasEmergencyParser);
|
MSerialT1 customizedSerial1(MSerialT1::HasEmergencyParser);
|
||||||
|
|
||||||
#ifdef SERIAL_PORT_2
|
#ifdef SERIAL_PORT_2
|
||||||
|
|
||||||
@@ -582,7 +582,24 @@ MSerialT customizedSerial1(MSerialT::HasEmergencyParser);
|
|||||||
|
|
||||||
template class MarlinSerial< MarlinSerialCfg<SERIAL_PORT_2> >;
|
template class MarlinSerial< MarlinSerialCfg<SERIAL_PORT_2> >;
|
||||||
MSerialT2 customizedSerial2(MSerialT2::HasEmergencyParser);
|
MSerialT2 customizedSerial2(MSerialT2::HasEmergencyParser);
|
||||||
#endif
|
|
||||||
|
#endif // SERIAL_PORT_2
|
||||||
|
|
||||||
|
#ifdef SERIAL_PORT_3
|
||||||
|
|
||||||
|
// Hookup ISR handlers
|
||||||
|
ISR(SERIAL_REGNAME(USART, SERIAL_PORT_3, _RX_vect)) {
|
||||||
|
MarlinSerial<MarlinSerialCfg<SERIAL_PORT_3>>::store_rxd_char();
|
||||||
|
}
|
||||||
|
|
||||||
|
ISR(SERIAL_REGNAME(USART, SERIAL_PORT_3, _UDRE_vect)) {
|
||||||
|
MarlinSerial<MarlinSerialCfg<SERIAL_PORT_3>>::_tx_udr_empty_irq();
|
||||||
|
}
|
||||||
|
|
||||||
|
template class MarlinSerial< MarlinSerialCfg<SERIAL_PORT_3> >;
|
||||||
|
MSerialT3 customizedSerial3(MSerialT3::HasEmergencyParser);
|
||||||
|
|
||||||
|
#endif // SERIAL_PORT_3
|
||||||
|
|
||||||
#ifdef MMU2_SERIAL_PORT
|
#ifdef MMU2_SERIAL_PORT
|
||||||
|
|
||||||
@@ -595,8 +612,9 @@ MSerialT customizedSerial1(MSerialT::HasEmergencyParser);
|
|||||||
}
|
}
|
||||||
|
|
||||||
template class MarlinSerial< MMU2SerialCfg<MMU2_SERIAL_PORT> >;
|
template class MarlinSerial< MMU2SerialCfg<MMU2_SERIAL_PORT> >;
|
||||||
MSerialT3 mmuSerial(MSerialT3::HasEmergencyParser);
|
MSerialMMU2 mmuSerial(MSerialMMU2::HasEmergencyParser);
|
||||||
#endif
|
|
||||||
|
#endif // MMU2_SERIAL_PORT
|
||||||
|
|
||||||
#ifdef LCD_SERIAL_PORT
|
#ifdef LCD_SERIAL_PORT
|
||||||
|
|
||||||
@@ -609,7 +627,7 @@ MSerialT customizedSerial1(MSerialT::HasEmergencyParser);
|
|||||||
}
|
}
|
||||||
|
|
||||||
template class MarlinSerial< LCDSerialCfg<LCD_SERIAL_PORT> >;
|
template class MarlinSerial< LCDSerialCfg<LCD_SERIAL_PORT> >;
|
||||||
MSerialT4 lcdSerial(MSerialT4::HasEmergencyParser);
|
MSerialLCD lcdSerial(MSerialLCD::HasEmergencyParser);
|
||||||
|
|
||||||
#if HAS_DGUS_LCD
|
#if HAS_DGUS_LCD
|
||||||
template<typename Cfg>
|
template<typename Cfg>
|
||||||
@@ -622,13 +640,13 @@ MSerialT customizedSerial1(MSerialT::HasEmergencyParser);
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif // LCD_SERIAL_PORT
|
||||||
|
|
||||||
#endif // !USBCON && (UBRRH || UBRR0H || UBRR1H || UBRR2H || UBRR3H)
|
#endif // !USBCON && (UBRRH || UBRR0H || UBRR1H || UBRR2H || UBRR3H)
|
||||||
|
|
||||||
// For AT90USB targets use the UART for BT interfacing
|
// For AT90USB targets use the UART for BT interfacing
|
||||||
#if defined(USBCON) && ENABLED(BLUETOOTH)
|
#if defined(USBCON) && ENABLED(BLUETOOTH)
|
||||||
MSerialT5 bluetoothSerial(false);
|
MSerialBT bluetoothSerial(false);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif // __AVR__
|
#endif // __AVR__
|
||||||
|
@@ -238,14 +238,19 @@
|
|||||||
static constexpr bool MAX_RX_QUEUED = ENABLED(SERIAL_STATS_MAX_RX_QUEUED);
|
static constexpr bool MAX_RX_QUEUED = ENABLED(SERIAL_STATS_MAX_RX_QUEUED);
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef Serial1Class< MarlinSerial< MarlinSerialCfg<SERIAL_PORT> > > MSerialT;
|
typedef Serial1Class< MarlinSerial< MarlinSerialCfg<SERIAL_PORT> > > MSerialT1;
|
||||||
extern MSerialT customizedSerial1;
|
extern MSerialT1 customizedSerial1;
|
||||||
|
|
||||||
#ifdef SERIAL_PORT_2
|
#ifdef SERIAL_PORT_2
|
||||||
typedef Serial1Class< MarlinSerial< MarlinSerialCfg<SERIAL_PORT_2> > > MSerialT2;
|
typedef Serial1Class< MarlinSerial< MarlinSerialCfg<SERIAL_PORT_2> > > MSerialT2;
|
||||||
extern MSerialT2 customizedSerial2;
|
extern MSerialT2 customizedSerial2;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef SERIAL_PORT_3
|
||||||
|
typedef Serial1Class< MarlinSerial< MarlinSerialCfg<SERIAL_PORT_3> > > MSerialT3;
|
||||||
|
extern MSerialT3 customizedSerial3;
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif // !USBCON
|
#endif // !USBCON
|
||||||
|
|
||||||
#ifdef MMU2_SERIAL_PORT
|
#ifdef MMU2_SERIAL_PORT
|
||||||
@@ -262,8 +267,8 @@
|
|||||||
static constexpr bool RX_OVERRUNS = false;
|
static constexpr bool RX_OVERRUNS = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef Serial1Class< MarlinSerial< MMU2SerialCfg<MMU2_SERIAL_PORT> > > MSerialT3;
|
typedef Serial1Class< MarlinSerial< MMU2SerialCfg<MMU2_SERIAL_PORT> > > MSerialMMU2;
|
||||||
extern MSerialT3 mmuSerial;
|
extern MSerialMMU2 mmuSerial;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef LCD_SERIAL_PORT
|
#ifdef LCD_SERIAL_PORT
|
||||||
@@ -281,12 +286,12 @@
|
|||||||
static constexpr bool RX_OVERRUNS = BOTH(HAS_DGUS_LCD, SERIAL_STATS_RX_BUFFER_OVERRUNS);
|
static constexpr bool RX_OVERRUNS = BOTH(HAS_DGUS_LCD, SERIAL_STATS_RX_BUFFER_OVERRUNS);
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef Serial1Class< MarlinSerial< LCDSerialCfg<LCD_SERIAL_PORT> > > MSerialT4;
|
typedef Serial1Class< MarlinSerial< LCDSerialCfg<LCD_SERIAL_PORT> > > MSerialLCD;
|
||||||
extern MSerialT4 lcdSerial;
|
extern MSerialLCD lcdSerial;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Use the UART for Bluetooth in AT90USB configurations
|
// Use the UART for Bluetooth in AT90USB configurations
|
||||||
#if defined(USBCON) && ENABLED(BLUETOOTH)
|
#if defined(USBCON) && ENABLED(BLUETOOTH)
|
||||||
typedef Serial1Class<HardwareSerial> MSerialT5;
|
typedef Serial1Class<HardwareSerial> MSerialBT;
|
||||||
extern MSerialT5 bluetoothSerial;
|
extern MSerialBT bluetoothSerial;
|
||||||
#endif
|
#endif
|
||||||
|
@@ -168,6 +168,51 @@ void setup_endstop_interrupts() {
|
|||||||
pciSetup(Z_MIN_PIN);
|
pciSetup(Z_MIN_PIN);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
#if HAS_I_MAX
|
||||||
|
#if (digitalPinToInterrupt(I_MAX_PIN) != NOT_AN_INTERRUPT)
|
||||||
|
_ATTACH(I_MAX_PIN);
|
||||||
|
#else
|
||||||
|
static_assert(digitalPinHasPCICR(I_MAX_PIN), "I_MAX_PIN is not interrupt-capable");
|
||||||
|
pciSetup(I_MAX_PIN);
|
||||||
|
#endif
|
||||||
|
#elif HAS_I_MIN
|
||||||
|
#if (digitalPinToInterrupt(I_MIN_PIN) != NOT_AN_INTERRUPT)
|
||||||
|
_ATTACH(I_MIN_PIN);
|
||||||
|
#else
|
||||||
|
static_assert(digitalPinHasPCICR(I_MIN_PIN), "I_MIN_PIN is not interrupt-capable");
|
||||||
|
pciSetup(I_MIN_PIN);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#if HAS_J_MAX
|
||||||
|
#if (digitalPinToInterrupt(J_MAX_PIN) != NOT_AN_INTERRUPT)
|
||||||
|
_ATTACH(J_MAX_PIN);
|
||||||
|
#else
|
||||||
|
static_assert(digitalPinHasPCICR(J_MAX_PIN), "J_MAX_PIN is not interrupt-capable");
|
||||||
|
pciSetup(J_MAX_PIN);
|
||||||
|
#endif
|
||||||
|
#elif HAS_J_MIN
|
||||||
|
#if (digitalPinToInterrupt(J_MIN_PIN) != NOT_AN_INTERRUPT)
|
||||||
|
_ATTACH(J_MIN_PIN);
|
||||||
|
#else
|
||||||
|
static_assert(digitalPinHasPCICR(J_MIN_PIN), "J_MIN_PIN is not interrupt-capable");
|
||||||
|
pciSetup(J_MIN_PIN);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#if HAS_K_MAX
|
||||||
|
#if (digitalPinToInterrupt(K_MAX_PIN) != NOT_AN_INTERRUPT)
|
||||||
|
_ATTACH(K_MAX_PIN);
|
||||||
|
#else
|
||||||
|
static_assert(digitalPinHasPCICR(K_MAX_PIN), "K_MAX_PIN is not interrupt-capable");
|
||||||
|
pciSetup(K_MAX_PIN);
|
||||||
|
#endif
|
||||||
|
#elif HAS_K_MIN
|
||||||
|
#if (digitalPinToInterrupt(K_MIN_PIN) != NOT_AN_INTERRUPT)
|
||||||
|
_ATTACH(K_MIN_PIN);
|
||||||
|
#else
|
||||||
|
static_assert(digitalPinHasPCICR(K_MIN_PIN), "K_MIN_PIN is not interrupt-capable");
|
||||||
|
pciSetup(K_MIN_PIN);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
#if HAS_X2_MAX
|
#if HAS_X2_MAX
|
||||||
#if (digitalPinToInterrupt(X2_MAX_PIN) != NOT_AN_INTERRUPT)
|
#if (digitalPinToInterrupt(X2_MAX_PIN) != NOT_AN_INTERRUPT)
|
||||||
_ATTACH(X2_MAX_PIN);
|
_ATTACH(X2_MAX_PIN);
|
||||||
@@ -256,6 +301,5 @@ void setup_endstop_interrupts() {
|
|||||||
pciSetup(Z_MIN_PROBE_PIN);
|
pciSetup(Z_MIN_PROBE_PIN);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// If we arrive here without raising an assertion, each pin has either an EXT-interrupt or a PCI.
|
// If we arrive here without raising an assertion, each pin has either an EXT-interrupt or a PCI.
|
||||||
}
|
}
|
||||||
|
@@ -267,11 +267,11 @@ uint16_t set_pwm_frequency_hz(const_float_t hz, const float dca, const float dcb
|
|||||||
SET_WGM(5, FAST_PWM_ICRn); // Fast PWM with ICR5 as TOP
|
SET_WGM(5, FAST_PWM_ICRn); // Fast PWM with ICR5 as TOP
|
||||||
|
|
||||||
//SERIAL_ECHOLNPGM("Timer 5 Settings:");
|
//SERIAL_ECHOLNPGM("Timer 5 Settings:");
|
||||||
//SERIAL_ECHOLNPAIR(" Prescaler=", prescaler);
|
//SERIAL_ECHOLNPGM(" Prescaler=", prescaler);
|
||||||
//SERIAL_ECHOLNPAIR(" TOP=", ICR5);
|
//SERIAL_ECHOLNPGM(" TOP=", ICR5);
|
||||||
//SERIAL_ECHOLNPAIR(" OCR5A=", OCR5A);
|
//SERIAL_ECHOLNPGM(" OCR5A=", OCR5A);
|
||||||
//SERIAL_ECHOLNPAIR(" OCR5B=", OCR5B);
|
//SERIAL_ECHOLNPGM(" OCR5B=", OCR5B);
|
||||||
//SERIAL_ECHOLNPAIR(" OCR5C=", OCR5C);
|
//SERIAL_ECHOLNPGM(" OCR5C=", OCR5C);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// Restore the default for Timer 5
|
// Restore the default for Timer 5
|
||||||
|
@@ -284,7 +284,7 @@ enum ClockSource2 : char {
|
|||||||
* PWM availability macros
|
* PWM availability macros
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Determine which harware PWMs are already in use
|
// Determine which hardware PWMs are already in use
|
||||||
#define _PWM_CHK_FAN_B(P) (P == E0_AUTO_FAN_PIN || P == E1_AUTO_FAN_PIN || P == E2_AUTO_FAN_PIN || P == E3_AUTO_FAN_PIN || P == E4_AUTO_FAN_PIN || P == E5_AUTO_FAN_PIN || P == E6_AUTO_FAN_PIN || P == E7_AUTO_FAN_PIN || P == CHAMBER_AUTO_FAN_PIN || P == COOLER_AUTO_FAN_PIN)
|
#define _PWM_CHK_FAN_B(P) (P == E0_AUTO_FAN_PIN || P == E1_AUTO_FAN_PIN || P == E2_AUTO_FAN_PIN || P == E3_AUTO_FAN_PIN || P == E4_AUTO_FAN_PIN || P == E5_AUTO_FAN_PIN || P == E6_AUTO_FAN_PIN || P == E7_AUTO_FAN_PIN || P == CHAMBER_AUTO_FAN_PIN || P == COOLER_AUTO_FAN_PIN)
|
||||||
#if PIN_EXISTS(CONTROLLER_FAN)
|
#if PIN_EXISTS(CONTROLLER_FAN)
|
||||||
#define PWM_CHK_FAN_B(P) (_PWM_CHK_FAN_B(P) || P == CONTROLLER_FAN_PIN)
|
#define PWM_CHK_FAN_B(P) (_PWM_CHK_FAN_B(P) || P == CONTROLLER_FAN_PIN)
|
||||||
|
@@ -35,7 +35,7 @@
|
|||||||
/**
|
/**
|
||||||
* Sanity checks for Spindle / Laser PWM
|
* Sanity checks for Spindle / Laser PWM
|
||||||
*/
|
*/
|
||||||
#if ENABLED(SPINDLE_LASER_PWM)
|
#if ENABLED(SPINDLE_LASER_USE_PWM)
|
||||||
#include "../ServoTimers.h" // Needed to check timer availability (_useTimer3)
|
#include "../ServoTimers.h" // Needed to check timer availability (_useTimer3)
|
||||||
#if SPINDLE_LASER_PWM_PIN == 4 || WITHIN(SPINDLE_LASER_PWM_PIN, 11, 13)
|
#if SPINDLE_LASER_PWM_PIN == 4 || WITHIN(SPINDLE_LASER_PWM_PIN, 11, 13)
|
||||||
#error "Counter/Timer for SPINDLE_LASER_PWM_PIN is used by a system interrupt."
|
#error "Counter/Timer for SPINDLE_LASER_PWM_PIN is used by a system interrupt."
|
||||||
@@ -43,7 +43,7 @@
|
|||||||
#error "Counter/Timer for SPINDLE_LASER_PWM_PIN is used by the servo system."
|
#error "Counter/Timer for SPINDLE_LASER_PWM_PIN is used by the servo system."
|
||||||
#endif
|
#endif
|
||||||
#elif defined(SPINDLE_LASER_FREQUENCY)
|
#elif defined(SPINDLE_LASER_FREQUENCY)
|
||||||
#error "SPINDLE_LASER_FREQUENCY requires SPINDLE_LASER_PWM."
|
#error "SPINDLE_LASER_FREQUENCY requires SPINDLE_LASER_USE_PWM."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -2,6 +2,9 @@
|
|||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2020 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
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
@@ -38,7 +41,7 @@
|
|||||||
// portModeRegister takes a different argument
|
// portModeRegister takes a different argument
|
||||||
#define digitalPinToTimer_DEBUG(p) digitalPinToTimer(p)
|
#define digitalPinToTimer_DEBUG(p) digitalPinToTimer(p)
|
||||||
#define digitalPinToBitMask_DEBUG(p) digitalPinToBitMask(p)
|
#define digitalPinToBitMask_DEBUG(p) digitalPinToBitMask(p)
|
||||||
#define digitalPinToPort_DEBUG(p) digitalPinToPort_Teensy(p)
|
#define digitalPinToPort_DEBUG(p) digitalPinToPort(p)
|
||||||
#define GET_PINMODE(pin) (*portModeRegister(pin) & digitalPinToBitMask_DEBUG(pin))
|
#define GET_PINMODE(pin) (*portModeRegister(pin) & digitalPinToBitMask_DEBUG(pin))
|
||||||
|
|
||||||
#elif AVR_ATmega2560_FAMILY_PLUS_70 // So we can access/display all the pins on boards using more than 70
|
#elif AVR_ATmega2560_FAMILY_PLUS_70 // So we can access/display all the pins on boards using more than 70
|
||||||
@@ -235,9 +238,9 @@ static void print_is_also_tied() { SERIAL_ECHOPGM(" is also tied to this pin");
|
|||||||
|
|
||||||
inline void com_print(const uint8_t N, const uint8_t Z) {
|
inline void com_print(const uint8_t N, const uint8_t Z) {
|
||||||
const uint8_t *TCCRA = (uint8_t*)TCCR_A(N);
|
const uint8_t *TCCRA = (uint8_t*)TCCR_A(N);
|
||||||
SERIAL_ECHOPAIR(" COM", AS_CHAR('0' + N));
|
SERIAL_ECHOPGM(" COM", AS_DIGIT(N));
|
||||||
SERIAL_CHAR(Z);
|
SERIAL_CHAR(Z);
|
||||||
SERIAL_ECHOPAIR(": ", int((*TCCRA >> (6 - Z * 2)) & 0x03));
|
SERIAL_ECHOPGM(": ", int((*TCCRA >> (6 - Z * 2)) & 0x03));
|
||||||
}
|
}
|
||||||
|
|
||||||
void timer_prefix(uint8_t T, char L, uint8_t N) { // T - timer L - pwm N - WGM bit layout
|
void timer_prefix(uint8_t T, char L, uint8_t N) { // T - timer L - pwm N - WGM bit layout
|
||||||
@@ -247,7 +250,7 @@ void timer_prefix(uint8_t T, char L, uint8_t N) { // T - timer L - pwm N -
|
|||||||
uint8_t WGM = (((*TCCRB & _BV(WGM_2)) >> 1) | (*TCCRA & (_BV(WGM_0) | _BV(WGM_1))));
|
uint8_t WGM = (((*TCCRB & _BV(WGM_2)) >> 1) | (*TCCRA & (_BV(WGM_0) | _BV(WGM_1))));
|
||||||
if (N == 4) WGM |= ((*TCCRB & _BV(WGM_3)) >> 1);
|
if (N == 4) WGM |= ((*TCCRB & _BV(WGM_3)) >> 1);
|
||||||
|
|
||||||
SERIAL_ECHOPAIR(" TIMER", AS_CHAR(T + '0'));
|
SERIAL_ECHOPGM(" TIMER", AS_DIGIT(T));
|
||||||
SERIAL_CHAR(L);
|
SERIAL_CHAR(L);
|
||||||
SERIAL_ECHO_SP(3);
|
SERIAL_ECHO_SP(3);
|
||||||
|
|
||||||
@@ -259,14 +262,14 @@ void timer_prefix(uint8_t T, char L, uint8_t N) { // T - timer L - pwm N -
|
|||||||
const uint16_t *OCRVAL16 = (uint16_t*)OCR_VAL(T, L - 'A');
|
const uint16_t *OCRVAL16 = (uint16_t*)OCR_VAL(T, L - 'A');
|
||||||
PWM_PRINT(*OCRVAL16);
|
PWM_PRINT(*OCRVAL16);
|
||||||
}
|
}
|
||||||
SERIAL_ECHOPAIR(" WGM: ", WGM);
|
SERIAL_ECHOPGM(" WGM: ", WGM);
|
||||||
com_print(T,L);
|
com_print(T,L);
|
||||||
SERIAL_ECHOPAIR(" CS: ", (*TCCRB & (_BV(CS_0) | _BV(CS_1) | _BV(CS_2)) ));
|
SERIAL_ECHOPGM(" CS: ", (*TCCRB & (_BV(CS_0) | _BV(CS_1) | _BV(CS_2)) ));
|
||||||
SERIAL_ECHOPAIR(" TCCR", AS_CHAR(T + '0'), "A: ", *TCCRA);
|
SERIAL_ECHOPGM(" TCCR", AS_DIGIT(T), "A: ", *TCCRA);
|
||||||
SERIAL_ECHOPAIR(" TCCR", AS_CHAR(T + '0'), "B: ", *TCCRB);
|
SERIAL_ECHOPGM(" TCCR", AS_DIGIT(T), "B: ", *TCCRB);
|
||||||
|
|
||||||
const uint8_t *TMSK = (uint8_t*)TIMSK(T);
|
const uint8_t *TMSK = (uint8_t*)TIMSK(T);
|
||||||
SERIAL_ECHOPAIR(" TIMSK", AS_CHAR(T + '0'), ": ", *TMSK);
|
SERIAL_ECHOPGM(" TIMSK", AS_DIGIT(T), ": ", *TMSK);
|
||||||
|
|
||||||
const uint8_t OCIE = L - 'A' + 1;
|
const uint8_t OCIE = L - 'A' + 1;
|
||||||
if (N == 3) { if (WGM == 0 || WGM == 2 || WGM == 4 || WGM == 6) err_is_counter(); }
|
if (N == 3) { if (WGM == 0 || WGM == 2 || WGM == 4 || WGM == 6) err_is_counter(); }
|
||||||
@@ -393,3 +396,4 @@ static void pwm_details(uint8_t pin) {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define PRINT_PIN(p) do{ sprintf_P(buffer, PSTR("%3d "), p); SERIAL_ECHO(buffer); }while(0)
|
#define PRINT_PIN(p) do{ sprintf_P(buffer, PSTR("%3d "), p); SERIAL_ECHO(buffer); }while(0)
|
||||||
|
#define PRINT_PIN_ANALOG(p) do{ sprintf_P(buffer, PSTR(" (A%2d) "), DIGITAL_PIN_TO_ANALOG_PIN(pin)); SERIAL_ECHO(buffer); }while(0)
|
||||||
|
@@ -2,6 +2,9 @@
|
|||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2020 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
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
@@ -2,6 +2,9 @@
|
|||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2020 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
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
@@ -62,10 +62,10 @@
|
|||||||
#include "../shared/Marduino.h"
|
#include "../shared/Marduino.h"
|
||||||
#include "../shared/Delay.h"
|
#include "../shared/Delay.h"
|
||||||
|
|
||||||
#include <U8glib.h>
|
#include <U8glib-HAL.h>
|
||||||
|
|
||||||
uint8_t u8g_bitData, u8g_bitNotData, u8g_bitClock, u8g_bitNotClock;
|
static uint8_t u8g_bitData, u8g_bitNotData, u8g_bitClock, u8g_bitNotClock;
|
||||||
volatile uint8_t *u8g_outData, *u8g_outClock;
|
static volatile uint8_t *u8g_outData, *u8g_outClock;
|
||||||
|
|
||||||
static void u8g_com_arduino_init_shift_out(uint8_t dataPin, uint8_t clockPin) {
|
static void u8g_com_arduino_init_shift_out(uint8_t dataPin, uint8_t clockPin) {
|
||||||
u8g_outData = portOutputRegister(digitalPinToPort(dataPin));
|
u8g_outData = portOutputRegister(digitalPinToPort(dataPin));
|
||||||
|
@@ -50,13 +50,12 @@ extern DefaultSerial4 MSerial3;
|
|||||||
#define _MSERIAL(X) MSerial##X
|
#define _MSERIAL(X) MSerial##X
|
||||||
#define MSERIAL(X) _MSERIAL(X)
|
#define MSERIAL(X) _MSERIAL(X)
|
||||||
|
|
||||||
// Define MYSERIAL1/2 before MarlinSerial includes!
|
|
||||||
#if SERIAL_PORT == -1 || ENABLED(EMERGENCY_PARSER)
|
#if SERIAL_PORT == -1 || ENABLED(EMERGENCY_PARSER)
|
||||||
#define MYSERIAL1 customizedSerial1
|
#define MYSERIAL1 customizedSerial1
|
||||||
#elif WITHIN(SERIAL_PORT, 0, 3)
|
#elif WITHIN(SERIAL_PORT, 0, 3)
|
||||||
#define MYSERIAL1 MSERIAL(SERIAL_PORT)
|
#define MYSERIAL1 MSERIAL(SERIAL_PORT)
|
||||||
#else
|
#else
|
||||||
#error "The required SERIAL_PORT must be from 0 to 3. You can also use -1 if the board supports Native USB."
|
#error "The required SERIAL_PORT must be from 0 to 3, or -1 for USB Serial."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef SERIAL_PORT_2
|
#ifdef SERIAL_PORT_2
|
||||||
@@ -65,7 +64,17 @@ extern DefaultSerial4 MSerial3;
|
|||||||
#elif WITHIN(SERIAL_PORT_2, 0, 3)
|
#elif WITHIN(SERIAL_PORT_2, 0, 3)
|
||||||
#define MYSERIAL2 MSERIAL(SERIAL_PORT_2)
|
#define MYSERIAL2 MSERIAL(SERIAL_PORT_2)
|
||||||
#else
|
#else
|
||||||
#error "SERIAL_PORT_2 must be from 0 to 3. You can also use -1 if the board supports Native USB."
|
#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
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -78,12 +87,10 @@ extern DefaultSerial4 MSerial3;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef LCD_SERIAL_PORT
|
#ifdef LCD_SERIAL_PORT
|
||||||
#if LCD_SERIAL_PORT == -1
|
#if WITHIN(LCD_SERIAL_PORT, 0, 3)
|
||||||
#define LCD_SERIAL lcdSerial
|
|
||||||
#elif WITHIN(LCD_SERIAL_PORT, 0, 3)
|
|
||||||
#define LCD_SERIAL MSERIAL(LCD_SERIAL_PORT)
|
#define LCD_SERIAL MSERIAL(LCD_SERIAL_PORT)
|
||||||
#else
|
#else
|
||||||
#error "LCD_SERIAL_PORT must be from 0 to 3. You can also use -1 if the board supports Native USB."
|
#error "LCD_SERIAL_PORT must be from 0 to 3."
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@@ -240,7 +240,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
// all the others
|
// all the others
|
||||||
static uint32_t spiDelayCyclesX4 = 4 * (F_CPU) / 1000000; // 4µs => 125khz
|
static uint16_t spiDelayNS = 4000; // 4000ns => 125khz
|
||||||
|
|
||||||
static uint8_t spiTransferX(uint8_t b) { // using Mode 0
|
static uint8_t spiTransferX(uint8_t b) { // using Mode 0
|
||||||
int bits = 8;
|
int bits = 8;
|
||||||
@@ -249,12 +249,12 @@
|
|||||||
b <<= 1; // little setup time
|
b <<= 1; // little setup time
|
||||||
|
|
||||||
WRITE(SD_SCK_PIN, HIGH);
|
WRITE(SD_SCK_PIN, HIGH);
|
||||||
DELAY_CYCLES(spiDelayCyclesX4);
|
DELAY_NS(spiDelayNS);
|
||||||
|
|
||||||
b |= (READ(SD_MISO_PIN) != 0);
|
b |= (READ(SD_MISO_PIN) != 0);
|
||||||
|
|
||||||
WRITE(SD_SCK_PIN, LOW);
|
WRITE(SD_SCK_PIN, LOW);
|
||||||
DELAY_CYCLES(spiDelayCyclesX4);
|
DELAY_NS(spiDelayNS);
|
||||||
} while (--bits);
|
} while (--bits);
|
||||||
return b;
|
return b;
|
||||||
}
|
}
|
||||||
@@ -437,7 +437,7 @@
|
|||||||
} while (--todo);
|
} while (--todo);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pointers to generic functions for block tranfers
|
// Pointers to generic functions for block transfers
|
||||||
static pfnSpiTxBlock spiTxBlock = (pfnSpiTxBlock)spiTxBlockX;
|
static pfnSpiTxBlock spiTxBlock = (pfnSpiTxBlock)spiTxBlockX;
|
||||||
static pfnSpiRxBlock spiRxBlock = (pfnSpiRxBlock)spiRxBlockX;
|
static pfnSpiRxBlock spiRxBlock = (pfnSpiRxBlock)spiRxBlockX;
|
||||||
|
|
||||||
@@ -510,7 +510,7 @@
|
|||||||
spiRxBlock = (pfnSpiRxBlock)spiRxBlockX;
|
spiRxBlock = (pfnSpiRxBlock)spiRxBlockX;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
spiDelayCyclesX4 = ((F_CPU) / 1000000) >> (6 - spiRate) << 2; // spiRate of 2 gives the maximum error with current CPU
|
spiDelayNS = 4000 >> (6 - spiRate); // spiRate of 2 gives the maximum error with current CPU
|
||||||
spiTransferTx = (pfnSpiTransfer)spiTransferX;
|
spiTransferTx = (pfnSpiTransfer)spiTransferX;
|
||||||
spiTransferRx = (pfnSpiTransfer)spiTransferX;
|
spiTransferRx = (pfnSpiTransfer)spiTransferX;
|
||||||
spiTxBlock = (pfnSpiTxBlock)spiTxBlockX;
|
spiTxBlock = (pfnSpiTxBlock)spiTxBlockX;
|
||||||
@@ -594,18 +594,14 @@
|
|||||||
SPI_Configure(SPI0, ID_SPI0, SPI_MR_MSTR | SPI_MR_MODFDIS | SPI_MR_PS);
|
SPI_Configure(SPI0, ID_SPI0, SPI_MR_MSTR | SPI_MR_MODFDIS | SPI_MR_PS);
|
||||||
SPI_Enable(SPI0);
|
SPI_Enable(SPI0);
|
||||||
|
|
||||||
SET_OUTPUT(DAC0_SYNC);
|
SET_OUTPUT(DAC0_SYNC_PIN);
|
||||||
#if HAS_MULTI_EXTRUDER
|
#if HAS_MULTI_EXTRUDER
|
||||||
SET_OUTPUT(DAC1_SYNC);
|
OUT_WRITE(DAC1_SYNC_PIN, HIGH);
|
||||||
WRITE(DAC1_SYNC, HIGH);
|
|
||||||
#endif
|
#endif
|
||||||
SET_OUTPUT(SPI_EEPROM1_CS);
|
WRITE(DAC0_SYNC_PIN, HIGH);
|
||||||
SET_OUTPUT(SPI_EEPROM2_CS);
|
OUT_WRITE(SPI_EEPROM1_CS_PIN, HIGH);
|
||||||
SET_OUTPUT(SPI_FLASH_CS);
|
OUT_WRITE(SPI_EEPROM2_CS_PIN, HIGH);
|
||||||
WRITE(DAC0_SYNC, HIGH);
|
OUT_WRITE(SPI_FLASH_CS_PIN, HIGH);
|
||||||
WRITE(SPI_EEPROM1_CS, HIGH);
|
|
||||||
WRITE(SPI_EEPROM2_CS, HIGH);
|
|
||||||
WRITE(SPI_FLASH_CS, HIGH);
|
|
||||||
WRITE(SD_SS_PIN, HIGH);
|
WRITE(SD_SS_PIN, HIGH);
|
||||||
|
|
||||||
OUT_WRITE(SDSS, LOW);
|
OUT_WRITE(SDSS, LOW);
|
||||||
|
26
Marlin/src/HAL/DUE/MarlinSPI.h
Normal file
26
Marlin/src/HAL/DUE/MarlinSPI.h
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
/**
|
||||||
|
* Marlin 3D Printer Firmware
|
||||||
|
* Copyright (c) 2021 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 <SPI.h>
|
||||||
|
|
||||||
|
using MarlinSPI = SPIClass;
|
@@ -478,7 +478,7 @@ void MarlinSerial<Cfg>::flushTX() {
|
|||||||
// If not using the USB port as serial port
|
// If not using the USB port as serial port
|
||||||
#if defined(SERIAL_PORT) && SERIAL_PORT >= 0
|
#if defined(SERIAL_PORT) && SERIAL_PORT >= 0
|
||||||
template class MarlinSerial< MarlinSerialCfg<SERIAL_PORT> >;
|
template class MarlinSerial< MarlinSerialCfg<SERIAL_PORT> >;
|
||||||
MSerialT customizedSerial1(MarlinSerialCfg<SERIAL_PORT>::EMERGENCYPARSER);
|
MSerialT1 customizedSerial1(MarlinSerialCfg<SERIAL_PORT>::EMERGENCYPARSER);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(SERIAL_PORT_2) && SERIAL_PORT_2 >= 0
|
#if defined(SERIAL_PORT_2) && SERIAL_PORT_2 >= 0
|
||||||
@@ -486,4 +486,9 @@ void MarlinSerial<Cfg>::flushTX() {
|
|||||||
MSerialT2 customizedSerial2(MarlinSerialCfg<SERIAL_PORT_2>::EMERGENCYPARSER);
|
MSerialT2 customizedSerial2(MarlinSerialCfg<SERIAL_PORT_2>::EMERGENCYPARSER);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(SERIAL_PORT_3) && SERIAL_PORT_3 >= 0
|
||||||
|
template class MarlinSerial< MarlinSerialCfg<SERIAL_PORT_3> >;
|
||||||
|
MSerialT3 customizedSerial3(MarlinSerialCfg<SERIAL_PORT_3>::EMERGENCYPARSER);
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif // ARDUINO_ARCH_SAM
|
#endif // ARDUINO_ARCH_SAM
|
||||||
|
@@ -141,11 +141,16 @@ struct MarlinSerialCfg {
|
|||||||
};
|
};
|
||||||
|
|
||||||
#if defined(SERIAL_PORT) && SERIAL_PORT >= 0
|
#if defined(SERIAL_PORT) && SERIAL_PORT >= 0
|
||||||
typedef Serial1Class< MarlinSerial< MarlinSerialCfg<SERIAL_PORT> > > MSerialT;
|
typedef Serial1Class< MarlinSerial< MarlinSerialCfg<SERIAL_PORT> > > MSerialT1;
|
||||||
extern MSerialT customizedSerial1;
|
extern MSerialT1 customizedSerial1;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(SERIAL_PORT_2) && SERIAL_PORT_2 >= 0
|
#if defined(SERIAL_PORT_2) && SERIAL_PORT_2 >= 0
|
||||||
typedef Serial1Class< MarlinSerial< MarlinSerialCfg<SERIAL_PORT_2> > > MSerialT2;
|
typedef Serial1Class< MarlinSerial< MarlinSerialCfg<SERIAL_PORT_2> > > MSerialT2;
|
||||||
extern MSerialT2 customizedSerial2;
|
extern MSerialT2 customizedSerial2;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(SERIAL_PORT_3) && SERIAL_PORT_3 >= 0
|
||||||
|
typedef Serial1Class< MarlinSerial< MarlinSerialCfg<SERIAL_PORT_3> > > MSerialT3;
|
||||||
|
extern MSerialT3 customizedSerial3;
|
||||||
|
#endif
|
||||||
|
@@ -19,13 +19,13 @@
|
|||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
#ifdef ARDUINO_ARCH_SAM
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* MarlinSerial_Due.cpp - Hardware serial library for Arduino DUE
|
* MarlinSerial_Due.cpp - Hardware serial library for Arduino DUE
|
||||||
* Copyright (c) 2017 Eduardo José Tagle. All right reserved
|
* Copyright (c) 2017 Eduardo José Tagle. All right reserved
|
||||||
* Based on MarlinSerial for AVR, copyright (c) 2006 Nicholas Zambetti. All right reserved.
|
* Based on MarlinSerial for AVR, copyright (c) 2006 Nicholas Zambetti. All right reserved.
|
||||||
*/
|
*/
|
||||||
#ifdef ARDUINO_ARCH_SAM
|
|
||||||
|
|
||||||
#include "../../inc/MarlinConfig.h"
|
#include "../../inc/MarlinConfig.h"
|
||||||
|
|
||||||
@@ -65,7 +65,7 @@ int MarlinSerialUSB::peek() {
|
|||||||
|
|
||||||
pending_char = udi_cdc_getc();
|
pending_char = udi_cdc_getc();
|
||||||
|
|
||||||
TERN_(EMERGENCY_PARSER, emergency_parser.update(static_cast<MSerialT*>(this)->emergency_state, (char)pending_char));
|
TERN_(EMERGENCY_PARSER, emergency_parser.update(static_cast<MSerialT1*>(this)->emergency_state, (char)pending_char));
|
||||||
|
|
||||||
return pending_char;
|
return pending_char;
|
||||||
}
|
}
|
||||||
@@ -87,7 +87,7 @@ int MarlinSerialUSB::read() {
|
|||||||
|
|
||||||
int c = udi_cdc_getc();
|
int c = udi_cdc_getc();
|
||||||
|
|
||||||
TERN_(EMERGENCY_PARSER, emergency_parser.update(static_cast<MSerialT*>(this)->emergency_state, (char)c));
|
TERN_(EMERGENCY_PARSER, emergency_parser.update(static_cast<MSerialT1*>(this)->emergency_state, (char)c));
|
||||||
|
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
@@ -129,10 +129,13 @@ size_t MarlinSerialUSB::write(const uint8_t c) {
|
|||||||
|
|
||||||
// Preinstantiate
|
// Preinstantiate
|
||||||
#if SERIAL_PORT == -1
|
#if SERIAL_PORT == -1
|
||||||
MSerialT customizedSerial1(TERN0(EMERGENCY_PARSER, true));
|
MSerialT1 customizedSerial1(TERN0(EMERGENCY_PARSER, true));
|
||||||
#endif
|
#endif
|
||||||
#if SERIAL_PORT_2 == -1
|
#if SERIAL_PORT_2 == -1
|
||||||
MSerialT customizedSerial2(TERN0(EMERGENCY_PARSER, true));
|
MSerialT2 customizedSerial2(TERN0(EMERGENCY_PARSER, true));
|
||||||
|
#endif
|
||||||
|
#if SERIAL_PORT_3 == -1
|
||||||
|
MSerialT3 customizedSerial3(TERN0(EMERGENCY_PARSER, true));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif // HAS_USB_SERIAL
|
#endif // HAS_USB_SERIAL
|
||||||
|
@@ -27,11 +27,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "../../inc/MarlinConfig.h"
|
#include "../../inc/MarlinConfig.h"
|
||||||
#if HAS_USB_SERIAL
|
|
||||||
|
|
||||||
#include <WString.h>
|
|
||||||
#include "../../core/serial_hook.h"
|
#include "../../core/serial_hook.h"
|
||||||
|
|
||||||
|
#include <WString.h>
|
||||||
|
|
||||||
struct MarlinSerialUSB {
|
struct MarlinSerialUSB {
|
||||||
void begin(const long);
|
void begin(const long);
|
||||||
@@ -50,14 +48,18 @@ struct MarlinSerialUSB {
|
|||||||
FORCE_INLINE int rxMaxEnqueued() { return 0; }
|
FORCE_INLINE int rxMaxEnqueued() { return 0; }
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
typedef Serial1Class<MarlinSerialUSB> MSerialT;
|
|
||||||
|
|
||||||
#if SERIAL_PORT == -1
|
#if SERIAL_PORT == -1
|
||||||
extern MSerialT customizedSerial1;
|
typedef Serial1Class<MarlinSerialUSB> MSerialT1;
|
||||||
|
extern MSerialT1 customizedSerial1;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if SERIAL_PORT_2 == -1
|
#if SERIAL_PORT_2 == -1
|
||||||
extern MSerialT customizedSerial2;
|
typedef Serial1Class<MarlinSerialUSB> MSerialT2;
|
||||||
|
extern MSerialT2 customizedSerial2;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif // HAS_USB_SERIAL
|
#if SERIAL_PORT_3 == -1
|
||||||
|
typedef Serial1Class<MarlinSerialUSB> MSerialT3;
|
||||||
|
extern MSerialT3 customizedSerial3;
|
||||||
|
#endif
|
||||||
|
@@ -20,7 +20,6 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Based on u8g_com_msp430_hw_spi.c
|
* Based on u8g_com_msp430_hw_spi.c
|
||||||
*
|
*
|
||||||
@@ -60,7 +59,7 @@
|
|||||||
|
|
||||||
#if HAS_MARLINUI_U8GLIB
|
#if HAS_MARLINUI_U8GLIB
|
||||||
|
|
||||||
#include <U8glib.h>
|
#include <U8glib-HAL.h>
|
||||||
|
|
||||||
#include "../../../MarlinCore.h"
|
#include "../../../MarlinCore.h"
|
||||||
|
|
||||||
|
@@ -62,7 +62,7 @@
|
|||||||
#include "../../../inc/MarlinConfig.h"
|
#include "../../../inc/MarlinConfig.h"
|
||||||
#include "../../shared/Delay.h"
|
#include "../../shared/Delay.h"
|
||||||
|
|
||||||
#include <U8glib.h>
|
#include <U8glib-HAL.h>
|
||||||
|
|
||||||
#include "u8g_com_HAL_DUE_sw_spi_shared.h"
|
#include "u8g_com_HAL_DUE_sw_spi_shared.h"
|
||||||
|
|
||||||
|
@@ -64,7 +64,7 @@
|
|||||||
#include "../../shared/Marduino.h"
|
#include "../../shared/Marduino.h"
|
||||||
#include "../../shared/Delay.h"
|
#include "../../shared/Delay.h"
|
||||||
|
|
||||||
#include <U8glib.h>
|
#include <U8glib-HAL.h>
|
||||||
|
|
||||||
#if ENABLED(FYSETC_MINI_12864)
|
#if ENABLED(FYSETC_MINI_12864)
|
||||||
#define SPISEND_SW_DUE u8g_spiSend_sw_DUE_mode_3
|
#define SPISEND_SW_DUE u8g_spiSend_sw_DUE_mode_3
|
||||||
|
@@ -62,7 +62,7 @@
|
|||||||
#include "../../../inc/MarlinConfig.h"
|
#include "../../../inc/MarlinConfig.h"
|
||||||
#include "../../shared/Delay.h"
|
#include "../../shared/Delay.h"
|
||||||
|
|
||||||
#include <U8glib.h>
|
#include <U8glib-HAL.h>
|
||||||
|
|
||||||
#include "u8g_com_HAL_DUE_sw_spi_shared.h"
|
#include "u8g_com_HAL_DUE_sw_spi_shared.h"
|
||||||
|
|
||||||
|
@@ -23,7 +23,7 @@
|
|||||||
|
|
||||||
#include "../../../inc/MarlinConfigPre.h"
|
#include "../../../inc/MarlinConfigPre.h"
|
||||||
#include "../../shared/Marduino.h"
|
#include "../../shared/Marduino.h"
|
||||||
#include <U8glib.h>
|
#include <U8glib-HAL.h>
|
||||||
|
|
||||||
void u8g_SetPIOutput_DUE(u8g_t *u8g, uint8_t pin_index);
|
void u8g_SetPIOutput_DUE(u8g_t *u8g, uint8_t pin_index);
|
||||||
void u8g_SetPILevel_DUE(u8g_t *u8g, uint8_t pin_index, uint8_t level);
|
void u8g_SetPILevel_DUE(u8g_t *u8g, uint8_t pin_index, uint8_t level);
|
||||||
|
@@ -200,9 +200,9 @@ static bool ee_PageWrite(uint16_t page, const void *data) {
|
|||||||
pageContents[i] = (((uint32_t*)data)[i]) | (~(pageContents[i] ^ ((uint32_t*)data)[i]));
|
pageContents[i] = (((uint32_t*)data)[i]) | (~(pageContents[i] ^ ((uint32_t*)data)[i]));
|
||||||
|
|
||||||
DEBUG_ECHO_START();
|
DEBUG_ECHO_START();
|
||||||
DEBUG_ECHOLNPAIR("EEPROM PageWrite ", page);
|
DEBUG_ECHOLNPGM("EEPROM PageWrite ", page);
|
||||||
DEBUG_ECHOLNPAIR(" in FLASH address ", (uint32_t)addrflash);
|
DEBUG_ECHOLNPGM(" in FLASH address ", (uint32_t)addrflash);
|
||||||
DEBUG_ECHOLNPAIR(" base address ", (uint32_t)getFlashStorage(0));
|
DEBUG_ECHOLNPGM(" base address ", (uint32_t)getFlashStorage(0));
|
||||||
DEBUG_FLUSH();
|
DEBUG_FLUSH();
|
||||||
|
|
||||||
// Get the page relative to the start of the EFC controller, and the EFC controller to use
|
// Get the page relative to the start of the EFC controller, and the EFC controller to use
|
||||||
@@ -246,7 +246,7 @@ static bool ee_PageWrite(uint16_t page, const void *data) {
|
|||||||
__enable_irq();
|
__enable_irq();
|
||||||
|
|
||||||
DEBUG_ECHO_START();
|
DEBUG_ECHO_START();
|
||||||
DEBUG_ECHOLNPAIR("EEPROM Unlock failure for page ", page);
|
DEBUG_ECHOLNPGM("EEPROM Unlock failure for page ", page);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -271,7 +271,7 @@ static bool ee_PageWrite(uint16_t page, const void *data) {
|
|||||||
__enable_irq();
|
__enable_irq();
|
||||||
|
|
||||||
DEBUG_ECHO_START();
|
DEBUG_ECHO_START();
|
||||||
DEBUG_ECHOLNPAIR("EEPROM Write failure for page ", page);
|
DEBUG_ECHOLNPGM("EEPROM Write failure for page ", page);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -287,7 +287,7 @@ static bool ee_PageWrite(uint16_t page, const void *data) {
|
|||||||
|
|
||||||
#ifdef EE_EMU_DEBUG
|
#ifdef EE_EMU_DEBUG
|
||||||
DEBUG_ECHO_START();
|
DEBUG_ECHO_START();
|
||||||
DEBUG_ECHOLNPAIR("EEPROM Verify Write failure for page ", page);
|
DEBUG_ECHOLNPGM("EEPROM Verify Write failure for page ", page);
|
||||||
|
|
||||||
ee_Dump( page, (uint32_t *)addrflash);
|
ee_Dump( page, (uint32_t *)addrflash);
|
||||||
ee_Dump(-page, data);
|
ee_Dump(-page, data);
|
||||||
@@ -306,7 +306,7 @@ static bool ee_PageWrite(uint16_t page, const void *data) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DEBUG_ECHOLNPAIR("--> Differing bits: ", count);
|
DEBUG_ECHOLNPGM("--> Differing bits: ", count);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@@ -326,9 +326,9 @@ static bool ee_PageErase(uint16_t page) {
|
|||||||
uint32_t addrflash = uint32_t(getFlashStorage(page));
|
uint32_t addrflash = uint32_t(getFlashStorage(page));
|
||||||
|
|
||||||
DEBUG_ECHO_START();
|
DEBUG_ECHO_START();
|
||||||
DEBUG_ECHOLNPAIR("EEPROM PageErase ", page);
|
DEBUG_ECHOLNPGM("EEPROM PageErase ", page);
|
||||||
DEBUG_ECHOLNPAIR(" in FLASH address ", (uint32_t)addrflash);
|
DEBUG_ECHOLNPGM(" in FLASH address ", (uint32_t)addrflash);
|
||||||
DEBUG_ECHOLNPAIR(" base address ", (uint32_t)getFlashStorage(0));
|
DEBUG_ECHOLNPGM(" base address ", (uint32_t)getFlashStorage(0));
|
||||||
DEBUG_FLUSH();
|
DEBUG_FLUSH();
|
||||||
|
|
||||||
// Get the page relative to the start of the EFC controller, and the EFC controller to use
|
// Get the page relative to the start of the EFC controller, and the EFC controller to use
|
||||||
@@ -371,7 +371,7 @@ static bool ee_PageErase(uint16_t page) {
|
|||||||
__enable_irq();
|
__enable_irq();
|
||||||
|
|
||||||
DEBUG_ECHO_START();
|
DEBUG_ECHO_START();
|
||||||
DEBUG_ECHOLNPAIR("EEPROM Unlock failure for page ",page);
|
DEBUG_ECHOLNPGM("EEPROM Unlock failure for page ",page);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -395,7 +395,7 @@ static bool ee_PageErase(uint16_t page) {
|
|||||||
__enable_irq();
|
__enable_irq();
|
||||||
|
|
||||||
DEBUG_ECHO_START();
|
DEBUG_ECHO_START();
|
||||||
DEBUG_ECHOLNPAIR("EEPROM Erase failure for page ",page);
|
DEBUG_ECHOLNPGM("EEPROM Erase failure for page ",page);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -411,7 +411,7 @@ static bool ee_PageErase(uint16_t page) {
|
|||||||
for (i = 0; i < PageSize >> 2; i++) {
|
for (i = 0; i < PageSize >> 2; i++) {
|
||||||
if (*aligned_src++ != 0xFFFFFFFF) {
|
if (*aligned_src++ != 0xFFFFFFFF) {
|
||||||
DEBUG_ECHO_START();
|
DEBUG_ECHO_START();
|
||||||
DEBUG_ECHOLNPAIR("EEPROM Verify Erase failure for page ",page);
|
DEBUG_ECHOLNPGM("EEPROM Verify Erase failure for page ",page);
|
||||||
ee_Dump(page, (uint32_t *)addrflash);
|
ee_Dump(page, (uint32_t *)addrflash);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -922,7 +922,7 @@ static void ee_Init() {
|
|||||||
if (curGroup >= GroupCount) curGroup = 0;
|
if (curGroup >= GroupCount) curGroup = 0;
|
||||||
|
|
||||||
DEBUG_ECHO_START();
|
DEBUG_ECHO_START();
|
||||||
DEBUG_ECHOLNPAIR("EEPROM Current Group: ",curGroup);
|
DEBUG_ECHOLNPGM("EEPROM Current Group: ",curGroup);
|
||||||
DEBUG_FLUSH();
|
DEBUG_FLUSH();
|
||||||
|
|
||||||
// Now, validate that all the other group pages are empty
|
// Now, validate that all the other group pages are empty
|
||||||
@@ -932,7 +932,7 @@ static void ee_Init() {
|
|||||||
for (int page = 0; page < PagesPerGroup; page++) {
|
for (int page = 0; page < PagesPerGroup; page++) {
|
||||||
if (!ee_IsPageClean(grp * PagesPerGroup + page)) {
|
if (!ee_IsPageClean(grp * PagesPerGroup + page)) {
|
||||||
DEBUG_ECHO_START();
|
DEBUG_ECHO_START();
|
||||||
DEBUG_ECHOLNPAIR("EEPROM Page ", page, " not clean on group ", grp);
|
DEBUG_ECHOLNPGM("EEPROM Page ", page, " not clean on group ", grp);
|
||||||
DEBUG_FLUSH();
|
DEBUG_FLUSH();
|
||||||
ee_PageErase(grp * PagesPerGroup + page);
|
ee_PageErase(grp * PagesPerGroup + page);
|
||||||
}
|
}
|
||||||
@@ -949,14 +949,14 @@ static void ee_Init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
DEBUG_ECHO_START();
|
DEBUG_ECHO_START();
|
||||||
DEBUG_ECHOLNPAIR("EEPROM Active page: ", curPage);
|
DEBUG_ECHOLNPGM("EEPROM Active page: ", curPage);
|
||||||
DEBUG_FLUSH();
|
DEBUG_FLUSH();
|
||||||
|
|
||||||
// Make sure the pages following the first clean one are also clean
|
// Make sure the pages following the first clean one are also clean
|
||||||
for (int page = curPage + 1; page < PagesPerGroup; page++) {
|
for (int page = curPage + 1; page < PagesPerGroup; page++) {
|
||||||
if (!ee_IsPageClean(curGroup * PagesPerGroup + page)) {
|
if (!ee_IsPageClean(curGroup * PagesPerGroup + page)) {
|
||||||
DEBUG_ECHO_START();
|
DEBUG_ECHO_START();
|
||||||
DEBUG_ECHOLNPAIR("EEPROM Page ", page, " not clean on active group ", curGroup);
|
DEBUG_ECHOLNPGM("EEPROM Page ", page, " not clean on active group ", curGroup);
|
||||||
DEBUG_FLUSH();
|
DEBUG_FLUSH();
|
||||||
ee_Dump(curGroup * PagesPerGroup + page, getFlashStorage(curGroup * PagesPerGroup + page));
|
ee_Dump(curGroup * PagesPerGroup + page, getFlashStorage(curGroup * PagesPerGroup + page));
|
||||||
ee_PageErase(curGroup * PagesPerGroup + page);
|
ee_PageErase(curGroup * PagesPerGroup + page);
|
||||||
|
@@ -64,4 +64,10 @@ void setup_endstop_interrupts() {
|
|||||||
TERN_(HAS_Z4_MAX, _ATTACH(Z4_MAX_PIN));
|
TERN_(HAS_Z4_MAX, _ATTACH(Z4_MAX_PIN));
|
||||||
TERN_(HAS_Z4_MIN, _ATTACH(Z4_MIN_PIN));
|
TERN_(HAS_Z4_MIN, _ATTACH(Z4_MIN_PIN));
|
||||||
TERN_(HAS_Z_MIN_PROBE_PIN, _ATTACH(Z_MIN_PROBE_PIN));
|
TERN_(HAS_Z_MIN_PROBE_PIN, _ATTACH(Z_MIN_PROBE_PIN));
|
||||||
|
TERN_(HAS_I_MAX, _ATTACH(I_MAX_PIN));
|
||||||
|
TERN_(HAS_I_MIN, _ATTACH(I_MIN_PIN));
|
||||||
|
TERN_(HAS_J_MAX, _ATTACH(J_MAX_PIN));
|
||||||
|
TERN_(HAS_J_MIN, _ATTACH(J_MIN_PIN));
|
||||||
|
TERN_(HAS_K_MAX, _ATTACH(K_MAX_PIN));
|
||||||
|
TERN_(HAS_K_MIN, _ATTACH(K_MIN_PIN));
|
||||||
}
|
}
|
||||||
|
@@ -33,7 +33,7 @@
|
|||||||
* For ARDUINO_ARCH_SAM
|
* For ARDUINO_ARCH_SAM
|
||||||
* Note the code here was specifically crafted by disassembling what GCC produces
|
* Note the code here was specifically crafted by disassembling what GCC produces
|
||||||
* out of it, so GCC is able to optimize it out as much as possible to the least
|
* out of it, so GCC is able to optimize it out as much as possible to the least
|
||||||
* amount of instructions. Be very carefull if you modify them, as "clean code"
|
* amount of instructions. Be very careful if you modify them, as "clean code"
|
||||||
* leads to less efficient compiled code!!
|
* leads to less efficient compiled code!!
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@@ -2,6 +2,9 @@
|
|||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2020 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
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
@@ -64,6 +67,7 @@
|
|||||||
#define PRINT_PORT(p)
|
#define PRINT_PORT(p)
|
||||||
#define PRINT_ARRAY_NAME(x) do{ sprintf_P(buffer, PSTR("%-" STRINGIFY(MAX_NAME_LENGTH) "s"), pin_array[x].name); SERIAL_ECHO(buffer); }while(0)
|
#define PRINT_ARRAY_NAME(x) do{ sprintf_P(buffer, PSTR("%-" STRINGIFY(MAX_NAME_LENGTH) "s"), pin_array[x].name); SERIAL_ECHO(buffer); }while(0)
|
||||||
#define PRINT_PIN(p) do{ sprintf_P(buffer, PSTR("%02d"), p); SERIAL_ECHO(buffer); }while(0)
|
#define PRINT_PIN(p) do{ sprintf_P(buffer, PSTR("%02d"), p); SERIAL_ECHO(buffer); }while(0)
|
||||||
|
#define PRINT_PIN_ANALOG(p) do{ sprintf_P(buffer, PSTR(" (A%2d) "), DIGITAL_PIN_TO_ANALOG_PIN(pin)); SERIAL_ECHO(buffer); }while(0)
|
||||||
#define GET_ARRAY_PIN(p) pin_array[p].pin
|
#define GET_ARRAY_PIN(p) pin_array[p].pin
|
||||||
#define GET_ARRAY_IS_DIGITAL(p) pin_array[p].is_digital
|
#define GET_ARRAY_IS_DIGITAL(p) pin_array[p].is_digital
|
||||||
#define VALID_PIN(pin) (pin >= 0 && pin < (int8_t)NUMBER_PINS_TOTAL ? 1 : 0)
|
#define VALID_PIN(pin) (pin >= 0 && pin < (int8_t)NUMBER_PINS_TOTAL ? 1 : 0)
|
||||||
@@ -86,7 +90,7 @@ bool GET_PINMODE(int8_t pin) { // 1: output, 0: input
|
|||||||
void pwm_details(int32_t pin) {
|
void pwm_details(int32_t pin) {
|
||||||
if (pwm_status(pin)) {
|
if (pwm_status(pin)) {
|
||||||
uint32_t chan = g_APinDescription[pin].ulPWMChannel;
|
uint32_t chan = g_APinDescription[pin].ulPWMChannel;
|
||||||
SERIAL_ECHOPAIR("PWM = ", PWM_INTERFACE->PWM_CH_NUM[chan].PWM_CDTY);
|
SERIAL_ECHOPGM("PWM = ", PWM_INTERFACE->PWM_CH_NUM[chan].PWM_CDTY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -71,7 +71,7 @@
|
|||||||
/* ------------------------------------------------------------------------ */
|
/* ------------------------------------------------------------------------ */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \page arduino_due_x_board_info "Arduino Due/X - Board informations"
|
* \page arduino_due_x_board_info "Arduino Due/X - Board information"
|
||||||
* This page lists several definition related to the board description.
|
* This page lists several definition related to the board description.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@@ -74,7 +74,7 @@
|
|||||||
#define SD_MMC_REMOVING 2
|
#define SD_MMC_REMOVING 2
|
||||||
|
|
||||||
|
|
||||||
//---- CONTROL FONCTIONS ----
|
//---- CONTROL FUNCTIONS ----
|
||||||
//!
|
//!
|
||||||
//! @brief This function initializes the hw/sw resources required to drive the SD_MMC_SPI.
|
//! @brief This function initializes the hw/sw resources required to drive the SD_MMC_SPI.
|
||||||
//!/
|
//!/
|
||||||
@@ -134,7 +134,7 @@ extern bool sd_mmc_spi_wr_protect(void);
|
|||||||
extern bool sd_mmc_spi_removal(void);
|
extern bool sd_mmc_spi_removal(void);
|
||||||
|
|
||||||
|
|
||||||
//---- ACCESS DATA FONCTIONS ----
|
//---- ACCESS DATA FUNCTIONS ----
|
||||||
|
|
||||||
#if ACCESS_USB == true
|
#if ACCESS_USB == true
|
||||||
// Standard functions for open in read/write mode the device
|
// Standard functions for open in read/write mode the device
|
||||||
|
@@ -90,7 +90,7 @@ typedef struct {
|
|||||||
//! This buffer must be word align for DATA IN phase (use prefix COMPILER_WORD_ALIGNED for buffer)
|
//! This buffer must be word align for DATA IN phase (use prefix COMPILER_WORD_ALIGNED for buffer)
|
||||||
uint8_t *payload;
|
uint8_t *payload;
|
||||||
|
|
||||||
//! Size of buffer to send or fill, and content the number of byte transfered
|
//! Size of buffer to send or fill, and content the number of byte transferred
|
||||||
uint16_t payload_size;
|
uint16_t payload_size;
|
||||||
|
|
||||||
//! Callback called after reception of ZLP from setup request
|
//! Callback called after reception of ZLP from setup request
|
||||||
@@ -132,10 +132,10 @@ typedef void (*udd_callback_halt_cleared_t)(void);
|
|||||||
*
|
*
|
||||||
* \param status UDD_EP_TRANSFER_OK, if transfer is complete
|
* \param status UDD_EP_TRANSFER_OK, if transfer is complete
|
||||||
* \param status UDD_EP_TRANSFER_ABORT, if transfer is aborted
|
* \param status UDD_EP_TRANSFER_ABORT, if transfer is aborted
|
||||||
* \param n number of data transfered
|
* \param n number of data transferred
|
||||||
*/
|
*/
|
||||||
typedef void (*udd_callback_trans_t) (udd_ep_status_t status,
|
typedef void (*udd_callback_trans_t) (udd_ep_status_t status,
|
||||||
iram_size_t nb_transfered, udd_ep_id_t ep);
|
iram_size_t nb_transferred, udd_ep_id_t ep);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Authorizes the VBUS event
|
* \brief Authorizes the VBUS event
|
||||||
@@ -303,7 +303,7 @@ bool udd_ep_wait_stall_clear(udd_ep_id_t ep,
|
|||||||
* The driver uses a specific DMA USB to transfer data
|
* The driver uses a specific DMA USB to transfer data
|
||||||
* from internal RAM to endpoint, if this one is available.
|
* from internal RAM to endpoint, if this one is available.
|
||||||
* When the transfer is finished or aborted (stall, reset, ...), the \a callback is called.
|
* When the transfer is finished or aborted (stall, reset, ...), the \a callback is called.
|
||||||
* The \a callback returns the transfer status and eventually the number of byte transfered.
|
* The \a callback returns the transfer status and eventually the number of byte transferred.
|
||||||
* Note: The control endpoint is not authorized.
|
* Note: The control endpoint is not authorized.
|
||||||
*
|
*
|
||||||
* \param ep The ID of the endpoint to use
|
* \param ep The ID of the endpoint to use
|
||||||
|
@@ -162,7 +162,7 @@ static void udi_cdc_ctrl_state_notify(uint8_t port, udd_ep_id_t ep);
|
|||||||
*
|
*
|
||||||
* \param status UDD_EP_TRANSFER_OK, if transfer finished
|
* \param status UDD_EP_TRANSFER_OK, if transfer finished
|
||||||
* \param status UDD_EP_TRANSFER_ABORT, if transfer aborted
|
* \param status UDD_EP_TRANSFER_ABORT, if transfer aborted
|
||||||
* \param n number of data transfered
|
* \param n number of data transferred
|
||||||
*/
|
*/
|
||||||
static void udi_cdc_serial_state_msg_sent(udd_ep_status_t status, iram_size_t n, udd_ep_id_t ep);
|
static void udi_cdc_serial_state_msg_sent(udd_ep_status_t status, iram_size_t n, udd_ep_id_t ep);
|
||||||
|
|
||||||
@@ -200,7 +200,7 @@ static void udi_cdc_data_received(udd_ep_status_t status, iram_size_t n, udd_ep_
|
|||||||
*
|
*
|
||||||
* \param status UDD_EP_TRANSFER_OK, if transfer finished
|
* \param status UDD_EP_TRANSFER_OK, if transfer finished
|
||||||
* \param status UDD_EP_TRANSFER_ABORT, if transfer aborted
|
* \param status UDD_EP_TRANSFER_ABORT, if transfer aborted
|
||||||
* \param n number of data transfered
|
* \param n number of data transferred
|
||||||
*/
|
*/
|
||||||
static void udi_cdc_data_sent(udd_ep_status_t status, iram_size_t n, udd_ep_id_t ep);
|
static void udi_cdc_data_sent(udd_ep_status_t status, iram_size_t n, udd_ep_id_t ep);
|
||||||
|
|
||||||
|
@@ -106,7 +106,7 @@ extern "C" {
|
|||||||
*/
|
*/
|
||||||
//@{
|
//@{
|
||||||
# if UDI_CDC_PORT_NB > 2
|
# if UDI_CDC_PORT_NB > 2
|
||||||
# error USBB, UDP, UDPHS and UOTGHS interfaces have not enought endpoints.
|
# error USBB, UDP, UDPHS and UOTGHS interfaces have not enough endpoints.
|
||||||
# endif
|
# endif
|
||||||
#define UDI_CDC_DATA_EP_IN_0 (1 | USB_EP_DIR_IN) // TX
|
#define UDI_CDC_DATA_EP_IN_0 (1 | USB_EP_DIR_IN) // TX
|
||||||
#define UDI_CDC_DATA_EP_OUT_0 (2 | USB_EP_DIR_OUT) // RX
|
#define UDI_CDC_DATA_EP_OUT_0 (2 | USB_EP_DIR_OUT) // RX
|
||||||
|
@@ -173,7 +173,7 @@ static void udi_msc_cbw_wait(void);
|
|||||||
*
|
*
|
||||||
* \param status UDD_EP_TRANSFER_OK, if transfer is finished
|
* \param status UDD_EP_TRANSFER_OK, if transfer is finished
|
||||||
* \param status UDD_EP_TRANSFER_ABORT, if transfer is aborted
|
* \param status UDD_EP_TRANSFER_ABORT, if transfer is aborted
|
||||||
* \param nb_received number of data transfered
|
* \param nb_received number of data transferred
|
||||||
*/
|
*/
|
||||||
static void udi_msc_cbw_received(udd_ep_status_t status,
|
static void udi_msc_cbw_received(udd_ep_status_t status,
|
||||||
iram_size_t nb_received, udd_ep_id_t ep);
|
iram_size_t nb_received, udd_ep_id_t ep);
|
||||||
@@ -211,7 +211,7 @@ static void udi_msc_data_send(uint8_t * buffer, uint8_t buf_size);
|
|||||||
*
|
*
|
||||||
* \param status UDD_EP_TRANSFER_OK, if transfer finish
|
* \param status UDD_EP_TRANSFER_OK, if transfer finish
|
||||||
* \param status UDD_EP_TRANSFER_ABORT, if transfer aborted
|
* \param status UDD_EP_TRANSFER_ABORT, if transfer aborted
|
||||||
* \param nb_sent number of data transfered
|
* \param nb_sent number of data transferred
|
||||||
*/
|
*/
|
||||||
static void udi_msc_data_sent(udd_ep_status_t status, iram_size_t nb_sent,
|
static void udi_msc_data_sent(udd_ep_status_t status, iram_size_t nb_sent,
|
||||||
udd_ep_id_t ep);
|
udd_ep_id_t ep);
|
||||||
@@ -244,7 +244,7 @@ void udi_msc_csw_send(void);
|
|||||||
*
|
*
|
||||||
* \param status UDD_EP_TRANSFER_OK, if transfer is finished
|
* \param status UDD_EP_TRANSFER_OK, if transfer is finished
|
||||||
* \param status UDD_EP_TRANSFER_ABORT, if transfer is aborted
|
* \param status UDD_EP_TRANSFER_ABORT, if transfer is aborted
|
||||||
* \param nb_sent number of data transfered
|
* \param nb_sent number of data transferred
|
||||||
*/
|
*/
|
||||||
static void udi_msc_csw_sent(udd_ep_status_t status, iram_size_t nb_sent,
|
static void udi_msc_csw_sent(udd_ep_status_t status, iram_size_t nb_sent,
|
||||||
udd_ep_id_t ep);
|
udd_ep_id_t ep);
|
||||||
@@ -463,7 +463,7 @@ uint8_t udi_msc_getsetting(void)
|
|||||||
static void udi_msc_cbw_invalid(void)
|
static void udi_msc_cbw_invalid(void)
|
||||||
{
|
{
|
||||||
if (!udi_msc_b_cbw_invalid)
|
if (!udi_msc_b_cbw_invalid)
|
||||||
return; // Don't re-stall endpoint if error reseted by setup
|
return; // Don't re-stall endpoint if error reset by setup
|
||||||
udd_ep_set_halt(UDI_MSC_EP_OUT);
|
udd_ep_set_halt(UDI_MSC_EP_OUT);
|
||||||
// If stall cleared then re-stall it. Only Setup MSC Reset can clear it
|
// If stall cleared then re-stall it. Only Setup MSC Reset can clear it
|
||||||
udd_ep_wait_stall_clear(UDI_MSC_EP_OUT, udi_msc_cbw_invalid);
|
udd_ep_wait_stall_clear(UDI_MSC_EP_OUT, udi_msc_cbw_invalid);
|
||||||
@@ -472,7 +472,7 @@ static void udi_msc_cbw_invalid(void)
|
|||||||
static void udi_msc_csw_invalid(void)
|
static void udi_msc_csw_invalid(void)
|
||||||
{
|
{
|
||||||
if (!udi_msc_b_cbw_invalid)
|
if (!udi_msc_b_cbw_invalid)
|
||||||
return; // Don't re-stall endpoint if error reseted by setup
|
return; // Don't re-stall endpoint if error reset by setup
|
||||||
udd_ep_set_halt(UDI_MSC_EP_IN);
|
udd_ep_set_halt(UDI_MSC_EP_IN);
|
||||||
// If stall cleared then re-stall it. Only Setup MSC Reset can clear it
|
// If stall cleared then re-stall it. Only Setup MSC Reset can clear it
|
||||||
udd_ep_wait_stall_clear(UDI_MSC_EP_IN, udi_msc_csw_invalid);
|
udd_ep_wait_stall_clear(UDI_MSC_EP_IN, udi_msc_csw_invalid);
|
||||||
|
@@ -325,7 +325,7 @@ static void udd_sleep_mode(bool b_idle)
|
|||||||
/**
|
/**
|
||||||
* \name Control endpoint low level management routine.
|
* \name Control endpoint low level management routine.
|
||||||
*
|
*
|
||||||
* This function performs control endpoint mangement.
|
* This function performs control endpoint management.
|
||||||
* It handle the SETUP/DATA/HANDSHAKE phases of a control transaction.
|
* It handle the SETUP/DATA/HANDSHAKE phases of a control transaction.
|
||||||
*/
|
*/
|
||||||
//@{
|
//@{
|
||||||
@@ -397,9 +397,9 @@ static void udd_ctrl_endofrequest(void);
|
|||||||
/**
|
/**
|
||||||
* \brief Main interrupt routine for control endpoint
|
* \brief Main interrupt routine for control endpoint
|
||||||
*
|
*
|
||||||
* This switchs control endpoint events to correct sub function.
|
* This switches control endpoint events to correct sub function.
|
||||||
*
|
*
|
||||||
* \return \c 1 if an event about control endpoint is occured, otherwise \c 0.
|
* \return \c 1 if an event about control endpoint is occurred, otherwise \c 0.
|
||||||
*/
|
*/
|
||||||
static bool udd_ctrl_interrupt(void);
|
static bool udd_ctrl_interrupt(void);
|
||||||
|
|
||||||
@@ -410,7 +410,7 @@ static bool udd_ctrl_interrupt(void);
|
|||||||
* \name Management of bulk/interrupt/isochronous endpoints
|
* \name Management of bulk/interrupt/isochronous endpoints
|
||||||
*
|
*
|
||||||
* The UDD manages the data transfer on endpoints:
|
* The UDD manages the data transfer on endpoints:
|
||||||
* - Start data tranfer on endpoint with USB Device DMA
|
* - Start data transfer on endpoint with USB Device DMA
|
||||||
* - Send a ZLP packet if requested
|
* - Send a ZLP packet if requested
|
||||||
* - Call callback registered to signal end of transfer
|
* - Call callback registered to signal end of transfer
|
||||||
* The transfer abort and stall feature are supported.
|
* The transfer abort and stall feature are supported.
|
||||||
@@ -431,7 +431,7 @@ typedef struct {
|
|||||||
uint8_t *buf;
|
uint8_t *buf;
|
||||||
//! Size of buffer to send or fill
|
//! Size of buffer to send or fill
|
||||||
iram_size_t buf_size;
|
iram_size_t buf_size;
|
||||||
//!< Size of data transfered
|
//!< Size of data transferred
|
||||||
iram_size_t buf_cnt;
|
iram_size_t buf_cnt;
|
||||||
//!< Size of data loaded (or prepared for DMA) last time
|
//!< Size of data loaded (or prepared for DMA) last time
|
||||||
iram_size_t buf_load;
|
iram_size_t buf_load;
|
||||||
@@ -486,7 +486,7 @@ static void udd_ep_finish_job(udd_ep_job_t * ptr_job, bool b_abort, uint8_t ep_n
|
|||||||
|
|
||||||
#ifdef UDD_EP_DMA_SUPPORTED
|
#ifdef UDD_EP_DMA_SUPPORTED
|
||||||
/**
|
/**
|
||||||
* \brief Start the next transfer if necessary or complet the job associated.
|
* \brief Start the next transfer if necessary or complete the job associated.
|
||||||
*
|
*
|
||||||
* \param ep endpoint number without direction flag
|
* \param ep endpoint number without direction flag
|
||||||
*/
|
*/
|
||||||
@@ -496,9 +496,9 @@ static void udd_ep_finish_job(udd_ep_job_t * ptr_job, bool b_abort, uint8_t ep_n
|
|||||||
/**
|
/**
|
||||||
* \brief Main interrupt routine for bulk/interrupt/isochronous endpoints
|
* \brief Main interrupt routine for bulk/interrupt/isochronous endpoints
|
||||||
*
|
*
|
||||||
* This switchs endpoint events to correct sub function.
|
* This switches endpoint events to correct sub function.
|
||||||
*
|
*
|
||||||
* \return \c 1 if an event about bulk/interrupt/isochronous endpoints has occured, otherwise \c 0.
|
* \return \c 1 if an event about bulk/interrupt/isochronous endpoints has occurred, otherwise \c 0.
|
||||||
*/
|
*/
|
||||||
static bool udd_ep_interrupt(void);
|
static bool udd_ep_interrupt(void);
|
||||||
|
|
||||||
@@ -520,7 +520,7 @@ static bool udd_ep_interrupt(void);
|
|||||||
*
|
*
|
||||||
* Note:
|
* Note:
|
||||||
* Here, the global interrupt mask is not clear when an USB interrupt is enabled
|
* Here, the global interrupt mask is not clear when an USB interrupt is enabled
|
||||||
* because this one can not be occured during the USB ISR (=during INTX is masked).
|
* because this one can not be occurred during the USB ISR (=during INTX is masked).
|
||||||
* See Technical reference $3.8.3 Masking interrupt requests in peripheral modules.
|
* See Technical reference $3.8.3 Masking interrupt requests in peripheral modules.
|
||||||
*/
|
*/
|
||||||
#ifdef UHD_ENABLE
|
#ifdef UHD_ENABLE
|
||||||
@@ -787,7 +787,7 @@ void udd_attach(void)
|
|||||||
udd_sleep_mode(true);
|
udd_sleep_mode(true);
|
||||||
otg_unfreeze_clock();
|
otg_unfreeze_clock();
|
||||||
|
|
||||||
// This section of clock check can be improved with a chek of
|
// This section of clock check can be improved with a check of
|
||||||
// USB clock source via sysclk()
|
// USB clock source via sysclk()
|
||||||
// Check USB clock because the source can be a PLL
|
// Check USB clock because the source can be a PLL
|
||||||
while (!Is_otg_clock_usable());
|
while (!Is_otg_clock_usable());
|
||||||
@@ -803,7 +803,7 @@ void udd_attach(void)
|
|||||||
#ifdef USB_DEVICE_HS_SUPPORT
|
#ifdef USB_DEVICE_HS_SUPPORT
|
||||||
udd_enable_msof_interrupt();
|
udd_enable_msof_interrupt();
|
||||||
#endif
|
#endif
|
||||||
// Reset following interupts flag
|
// Reset following interrupts flag
|
||||||
udd_ack_reset();
|
udd_ack_reset();
|
||||||
udd_ack_sof();
|
udd_ack_sof();
|
||||||
udd_ack_msof();
|
udd_ack_msof();
|
||||||
@@ -902,7 +902,7 @@ bool udd_ep_alloc(udd_ep_id_t ep, uint8_t bmAttributes,
|
|||||||
}
|
}
|
||||||
dbg_print("alloc(%x, %d) ", ep, MaxEndpointSize);
|
dbg_print("alloc(%x, %d) ", ep, MaxEndpointSize);
|
||||||
|
|
||||||
// Bank choise
|
// Bank choice
|
||||||
switch (bmAttributes & USB_EP_TYPE_MASK) {
|
switch (bmAttributes & USB_EP_TYPE_MASK) {
|
||||||
case USB_EP_TYPE_ISOCHRONOUS:
|
case USB_EP_TYPE_ISOCHRONOUS:
|
||||||
nb_bank = UDD_ISOCHRONOUS_NB_BANK(ep);
|
nb_bank = UDD_ISOCHRONOUS_NB_BANK(ep);
|
||||||
@@ -1228,7 +1228,7 @@ bool udd_ep_wait_stall_clear(udd_ep_id_t ep,
|
|||||||
|
|
||||||
if (Is_udd_endpoint_stall_requested(ep)
|
if (Is_udd_endpoint_stall_requested(ep)
|
||||||
|| ptr_job->stall_requested) {
|
|| ptr_job->stall_requested) {
|
||||||
// Endpoint halted then registes the callback
|
// Endpoint halted then registers the callback
|
||||||
ptr_job->busy = true;
|
ptr_job->busy = true;
|
||||||
ptr_job->call_nohalt = callback;
|
ptr_job->call_nohalt = callback;
|
||||||
} else {
|
} else {
|
||||||
@@ -1386,7 +1386,7 @@ static void udd_ctrl_setup_received(void)
|
|||||||
|
|
||||||
// Decode setup request
|
// Decode setup request
|
||||||
if (udc_process_setup() == false) {
|
if (udc_process_setup() == false) {
|
||||||
// Setup request unknow then stall it
|
// Setup request unknown then stall it
|
||||||
udd_ctrl_stall_data();
|
udd_ctrl_stall_data();
|
||||||
udd_ack_setup_received(0);
|
udd_ack_setup_received(0);
|
||||||
return;
|
return;
|
||||||
@@ -1447,7 +1447,7 @@ static void udd_ctrl_in_sent(void)
|
|||||||
udd_ctrl_prev_payload_buf_cnt += udd_ctrl_payload_buf_cnt;
|
udd_ctrl_prev_payload_buf_cnt += udd_ctrl_payload_buf_cnt;
|
||||||
if ((udd_g_ctrlreq.req.wLength == udd_ctrl_prev_payload_buf_cnt)
|
if ((udd_g_ctrlreq.req.wLength == udd_ctrl_prev_payload_buf_cnt)
|
||||||
|| b_shortpacket) {
|
|| b_shortpacket) {
|
||||||
// All data requested are transfered or a short packet has been sent
|
// All data requested are transferred or a short packet has been sent
|
||||||
// then it is the end of data phase.
|
// then it is the end of data phase.
|
||||||
// Generate an OUT ZLP for handshake phase.
|
// Generate an OUT ZLP for handshake phase.
|
||||||
udd_ctrl_send_zlp_out();
|
udd_ctrl_send_zlp_out();
|
||||||
@@ -1516,7 +1516,7 @@ static void udd_ctrl_out_received(void)
|
|||||||
// End of SETUP request:
|
// End of SETUP request:
|
||||||
// - Data IN Phase aborted,
|
// - Data IN Phase aborted,
|
||||||
// - or last Data IN Phase hidden by ZLP OUT sending quiclky,
|
// - or last Data IN Phase hidden by ZLP OUT sending quiclky,
|
||||||
// - or ZLP OUT received normaly.
|
// - or ZLP OUT received normally.
|
||||||
udd_ctrl_endofrequest();
|
udd_ctrl_endofrequest();
|
||||||
} else {
|
} else {
|
||||||
// Protocol error during SETUP request
|
// Protocol error during SETUP request
|
||||||
@@ -1544,7 +1544,7 @@ static void udd_ctrl_out_received(void)
|
|||||||
(udd_ctrl_prev_payload_buf_cnt +
|
(udd_ctrl_prev_payload_buf_cnt +
|
||||||
udd_ctrl_payload_buf_cnt))) {
|
udd_ctrl_payload_buf_cnt))) {
|
||||||
// End of reception because it is a short packet
|
// End of reception because it is a short packet
|
||||||
// Before send ZLP, call intermediat calback
|
// Before send ZLP, call intermediate callback
|
||||||
// in case of data receiv generate a stall
|
// in case of data receiv generate a stall
|
||||||
udd_g_ctrlreq.payload_size = udd_ctrl_payload_buf_cnt;
|
udd_g_ctrlreq.payload_size = udd_ctrl_payload_buf_cnt;
|
||||||
if (NULL != udd_g_ctrlreq.over_under_run) {
|
if (NULL != udd_g_ctrlreq.over_under_run) {
|
||||||
@@ -1565,7 +1565,7 @@ static void udd_ctrl_out_received(void)
|
|||||||
if (udd_g_ctrlreq.payload_size == udd_ctrl_payload_buf_cnt) {
|
if (udd_g_ctrlreq.payload_size == udd_ctrl_payload_buf_cnt) {
|
||||||
// Overrun then request a new payload buffer
|
// Overrun then request a new payload buffer
|
||||||
if (!udd_g_ctrlreq.over_under_run) {
|
if (!udd_g_ctrlreq.over_under_run) {
|
||||||
// No callback availabled to request a new payload buffer
|
// No callback available to request a new payload buffer
|
||||||
udd_ctrl_stall_data();
|
udd_ctrl_stall_data();
|
||||||
// Ack reception of OUT to replace NAK by a STALL
|
// Ack reception of OUT to replace NAK by a STALL
|
||||||
udd_ack_out_received(0);
|
udd_ack_out_received(0);
|
||||||
@@ -1805,7 +1805,7 @@ static void udd_ep_trans_done(udd_ep_id_t ep)
|
|||||||
// transfer size of UDD_ENDPOINT_MAX_TRANS Bytes
|
// transfer size of UDD_ENDPOINT_MAX_TRANS Bytes
|
||||||
next_trans = UDD_ENDPOINT_MAX_TRANS;
|
next_trans = UDD_ENDPOINT_MAX_TRANS;
|
||||||
|
|
||||||
// Set 0 to tranfer the maximum
|
// Set 0 to transfer the maximum
|
||||||
udd_dma_ctrl = UOTGHS_DEVDMACONTROL_BUFF_LENGTH(0);
|
udd_dma_ctrl = UOTGHS_DEVDMACONTROL_BUFF_LENGTH(0);
|
||||||
} else {
|
} else {
|
||||||
udd_dma_ctrl = UOTGHS_DEVDMACONTROL_BUFF_LENGTH(next_trans);
|
udd_dma_ctrl = UOTGHS_DEVDMACONTROL_BUFF_LENGTH(next_trans);
|
||||||
@@ -1850,7 +1850,7 @@ static void udd_ep_trans_done(udd_ep_id_t ep)
|
|||||||
}
|
}
|
||||||
cpu_irq_restore(flags);
|
cpu_irq_restore(flags);
|
||||||
|
|
||||||
// Here a ZLP has been recieved
|
// Here a ZLP has been received
|
||||||
// and the DMA transfer must be not started.
|
// and the DMA transfer must be not started.
|
||||||
// It is the end of transfer
|
// It is the end of transfer
|
||||||
ptr_job->buf_size = ptr_job->buf_cnt;
|
ptr_job->buf_size = ptr_job->buf_cnt;
|
||||||
@@ -1991,13 +1991,13 @@ static bool udd_ep_interrupt(void)
|
|||||||
}
|
}
|
||||||
dbg_print("dma%x: ", ep);
|
dbg_print("dma%x: ", ep);
|
||||||
udd_disable_endpoint_dma_interrupt(ep);
|
udd_disable_endpoint_dma_interrupt(ep);
|
||||||
// Save number of data no transfered
|
// Save number of data no transferred
|
||||||
nb_remaining = (udd_endpoint_dma_get_status(ep) &
|
nb_remaining = (udd_endpoint_dma_get_status(ep) &
|
||||||
UOTGHS_DEVDMASTATUS_BUFF_COUNT_Msk)
|
UOTGHS_DEVDMASTATUS_BUFF_COUNT_Msk)
|
||||||
>> UOTGHS_DEVDMASTATUS_BUFF_COUNT_Pos;
|
>> UOTGHS_DEVDMASTATUS_BUFF_COUNT_Pos;
|
||||||
if (nb_remaining) {
|
if (nb_remaining) {
|
||||||
// Transfer no complete (short packet or ZLP) then:
|
// Transfer no complete (short packet or ZLP) then:
|
||||||
// Update number of data transfered
|
// Update number of data transferred
|
||||||
ptr_job->buf_cnt -= nb_remaining;
|
ptr_job->buf_cnt -= nb_remaining;
|
||||||
// Set transfer complete to stop the transfer
|
// Set transfer complete to stop the transfer
|
||||||
ptr_job->buf_size = ptr_job->buf_cnt;
|
ptr_job->buf_size = ptr_job->buf_cnt;
|
||||||
@@ -2056,7 +2056,7 @@ static bool udd_ep_interrupt(void)
|
|||||||
udd_disable_endpoint_interrupt(ep);
|
udd_disable_endpoint_interrupt(ep);
|
||||||
|
|
||||||
Assert(ptr_job->stall_requested);
|
Assert(ptr_job->stall_requested);
|
||||||
// A stall has been requested during backgound transfer
|
// A stall has been requested during background transfer
|
||||||
ptr_job->stall_requested = false;
|
ptr_job->stall_requested = false;
|
||||||
udd_disable_endpoint_bank_autoswitch(ep);
|
udd_disable_endpoint_bank_autoswitch(ep);
|
||||||
udd_enable_stall_handshake(ep);
|
udd_enable_stall_handshake(ep);
|
||||||
|
@@ -130,7 +130,7 @@ struct usb_msc_cbw {
|
|||||||
struct usb_msc_csw {
|
struct usb_msc_csw {
|
||||||
le32_t dCSWSignature; //!< Must contain 'USBS'
|
le32_t dCSWSignature; //!< Must contain 'USBS'
|
||||||
le32_t dCSWTag; //!< Same as dCBWTag
|
le32_t dCSWTag; //!< Same as dCBWTag
|
||||||
le32_t dCSWDataResidue; //!< Number of bytes not transfered
|
le32_t dCSWDataResidue; //!< Number of bytes not transferred
|
||||||
uint8_t bCSWStatus; //!< Status code
|
uint8_t bCSWStatus; //!< Status code
|
||||||
};
|
};
|
||||||
|
|
||||||
|
26
Marlin/src/HAL/ESP32/MarlinSPI.h
Normal file
26
Marlin/src/HAL/ESP32/MarlinSPI.h
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
/**
|
||||||
|
* Marlin 3D Printer Firmware
|
||||||
|
* Copyright (c) 2021 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 <SPI.h>
|
||||||
|
|
||||||
|
using MarlinSPI = SPIClass;
|
@@ -29,7 +29,7 @@
|
|||||||
#include "wifi.h"
|
#include "wifi.h"
|
||||||
#include <ESPAsyncWebServer.h>
|
#include <ESPAsyncWebServer.h>
|
||||||
|
|
||||||
MSerialT webSocketSerial(false);
|
MSerialWebSocketT webSocketSerial(false);
|
||||||
AsyncWebSocket ws("/ws"); // TODO Move inside the class.
|
AsyncWebSocket ws("/ws"); // TODO Move inside the class.
|
||||||
|
|
||||||
// RingBuffer impl
|
// RingBuffer impl
|
||||||
|
@@ -81,5 +81,5 @@ public:
|
|||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef Serial1Class<WebSocketSerial> MSerialT;
|
typedef Serial1Class<WebSocketSerial> MSerialWebSocketT;
|
||||||
extern MSerialT webSocketSerial;
|
extern MSerialWebSocketT webSocketSerial;
|
||||||
|
@@ -59,4 +59,10 @@ void setup_endstop_interrupts() {
|
|||||||
TERN_(HAS_Z4_MAX, _ATTACH(Z4_MAX_PIN));
|
TERN_(HAS_Z4_MAX, _ATTACH(Z4_MAX_PIN));
|
||||||
TERN_(HAS_Z4_MIN, _ATTACH(Z4_MIN_PIN));
|
TERN_(HAS_Z4_MIN, _ATTACH(Z4_MIN_PIN));
|
||||||
TERN_(HAS_Z_MIN_PROBE_PIN, _ATTACH(Z_MIN_PROBE_PIN));
|
TERN_(HAS_Z_MIN_PROBE_PIN, _ATTACH(Z_MIN_PROBE_PIN));
|
||||||
|
TERN_(HAS_I_MAX, _ATTACH(I_MAX_PIN));
|
||||||
|
TERN_(HAS_I_MIN, _ATTACH(I_MIN_PIN));
|
||||||
|
TERN_(HAS_J_MAX, _ATTACH(J_MAX_PIN));
|
||||||
|
TERN_(HAS_J_MIN, _ATTACH(J_MIN_PIN));
|
||||||
|
TERN_(HAS_K_MAX, _ATTACH(K_MAX_PIN));
|
||||||
|
TERN_(HAS_K_MIN, _ATTACH(K_MIN_PIN));
|
||||||
}
|
}
|
||||||
|
@@ -2,6 +2,9 @@
|
|||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2020 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
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
@@ -59,7 +59,7 @@ void wifi_init() {
|
|||||||
|
|
||||||
MDNS.addService("http", "tcp", 80);
|
MDNS.addService("http", "tcp", 80);
|
||||||
|
|
||||||
SERIAL_ECHOLNPAIR("Successfully connected to WiFi with SSID '" WIFI_SSID "', hostname: '" WIFI_HOSTNAME "', IP address: ", WiFi.localIP().toString().c_str());
|
SERIAL_ECHOLNPGM("Successfully connected to WiFi with SSID '" WIFI_SSID "', hostname: '" WIFI_HOSTNAME "', IP address: ", WiFi.localIP().toString().c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // WIFISUPPORT
|
#endif // WIFISUPPORT
|
||||||
|
@@ -63,9 +63,9 @@ uint8_t _getc();
|
|||||||
extern MSerialT usb_serial;
|
extern MSerialT usb_serial;
|
||||||
#define MYSERIAL1 usb_serial
|
#define MYSERIAL1 usb_serial
|
||||||
|
|
||||||
#define ST7920_DELAY_1 DELAY_NS(600)
|
#define CPU_ST7920_DELAY_1 600
|
||||||
#define ST7920_DELAY_2 DELAY_NS(750)
|
#define CPU_ST7920_DELAY_2 750
|
||||||
#define ST7920_DELAY_3 DELAY_NS(750)
|
#define CPU_ST7920_DELAY_3 750
|
||||||
|
|
||||||
//
|
//
|
||||||
// Interrupts
|
// Interrupts
|
||||||
|
26
Marlin/src/HAL/LINUX/MarlinSPI.h
Normal file
26
Marlin/src/HAL/LINUX/MarlinSPI.h
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
/**
|
||||||
|
* Marlin 3D Printer Firmware
|
||||||
|
* Copyright (c) 2021 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 <SPI.h>
|
||||||
|
|
||||||
|
using MarlinSPI = SPIClass;
|
@@ -40,7 +40,7 @@ struct GpioEvent {
|
|||||||
pin_type pin_id;
|
pin_type pin_id;
|
||||||
GpioEvent::Type event;
|
GpioEvent::Type event;
|
||||||
|
|
||||||
GpioEvent(uint64_t timestamp, pin_type pin_id, GpioEvent::Type event){
|
GpioEvent(uint64_t timestamp, pin_type pin_id, GpioEvent::Type event) {
|
||||||
this->timestamp = timestamp;
|
this->timestamp = timestamp;
|
||||||
this->pin_id = pin_id;
|
this->pin_id = pin_id;
|
||||||
this->event = event;
|
this->event = event;
|
||||||
|
@@ -54,7 +54,7 @@ void Heater::update() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Heater::interrupt(GpioEvent ev) {
|
void Heater::interrupt(GpioEvent ev) {
|
||||||
// ununsed
|
// unused
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // __PLAT_LINUX__
|
#endif // __PLAT_LINUX__
|
||||||
|
@@ -51,7 +51,7 @@ void LinearAxis::update() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void LinearAxis::interrupt(GpioEvent ev) {
|
void LinearAxis::interrupt(GpioEvent ev) {
|
||||||
if (ev.pin_id == step_pin && !Gpio::pin_map[enable_pin].value){
|
if (ev.pin_id == step_pin && !Gpio::pin_map[enable_pin].value) {
|
||||||
if (ev.event == GpioEvent::RISE) {
|
if (ev.event == GpioEvent::RISE) {
|
||||||
last_update = ev.timestamp;
|
last_update = ev.timestamp;
|
||||||
position += -1 + 2 * Gpio::pin_map[dir_pin].value;
|
position += -1 + 2 * Gpio::pin_map[dir_pin].value;
|
||||||
|
@@ -52,7 +52,7 @@ public:
|
|||||||
return (*(intptr_t*)timerid);
|
return (*(intptr_t*)timerid);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handler(int sig, siginfo_t *si, void *uc){
|
static void handler(int sig, siginfo_t *si, void *uc) {
|
||||||
Timer* _this = (Timer*)si->si_value.sival_ptr;
|
Timer* _this = (Timer*)si->si_value.sival_ptr;
|
||||||
_this->avg_error += (Clock::nanos() - _this->start_time) - _this->period; //high_resolution_clock is also limited in precision, but best we have
|
_this->avg_error += (Clock::nanos() - _this->start_time) - _this->period; //high_resolution_clock is also limited in precision, but best we have
|
||||||
_this->avg_error /= 2; //very crude precision analysis (actually within +-500ns usually)
|
_this->avg_error /= 2; //very crude precision analysis (actually within +-500ns usually)
|
||||||
|
@@ -26,7 +26,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
// Emulating RAMPS
|
// Emulating RAMPS
|
||||||
#if ENABLED(SPINDLE_LASER_PWM) && !(SPINDLE_LASER_PWM_PIN == 4 || SPINDLE_LASER_PWM_PIN == 6 || SPINDLE_LASER_PWM_PIN == 11)
|
#if ENABLED(SPINDLE_LASER_USE_PWM) && !(SPINDLE_LASER_PWM_PIN == 4 || SPINDLE_LASER_PWM_PIN == 6 || SPINDLE_LASER_PWM_PIN == 11)
|
||||||
#error "SPINDLE_LASER_PWM_PIN must use SERVO0, SERVO1 or SERVO3 connector"
|
#error "SPINDLE_LASER_PWM_PIN must use SERVO0, SERVO1 or SERVO3 connector"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@@ -25,43 +25,6 @@
|
|||||||
|
|
||||||
#include "../../../gcode/parser.h"
|
#include "../../../gcode/parser.h"
|
||||||
|
|
||||||
uint8_t analog_offset = NUM_DIGITAL_PINS - NUM_ANALOG_INPUTS;
|
|
||||||
|
|
||||||
// Get the digital pin for an analog index
|
|
||||||
pin_t analogInputToDigitalPin(const int8_t p) {
|
|
||||||
return (WITHIN(p, 0, NUM_ANALOG_INPUTS) ? analog_offset + p : P_NC);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return the index of a pin number
|
|
||||||
int16_t GET_PIN_MAP_INDEX(const pin_t pin) {
|
|
||||||
return pin;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Test whether the pin is valid
|
|
||||||
bool VALID_PIN(const pin_t p) {
|
|
||||||
return WITHIN(p, 0, NUM_DIGITAL_PINS);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get the analog index for a digital pin
|
|
||||||
int8_t DIGITAL_PIN_TO_ANALOG_PIN(const pin_t p) {
|
|
||||||
return (WITHIN(p, analog_offset, NUM_DIGITAL_PINS) ? p - analog_offset : P_NC);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Test whether the pin is PWM
|
|
||||||
bool PWM_PIN(const pin_t p) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Test whether the pin is interruptable
|
|
||||||
bool INTERRUPT_PIN(const pin_t p) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get the pin number at the given index
|
|
||||||
pin_t GET_PIN_MAP_PIN(const int16_t ind) {
|
|
||||||
return ind;
|
|
||||||
}
|
|
||||||
|
|
||||||
int16_t PARSED_PIN_INDEX(const char code, const int16_t dval) {
|
int16_t PARSED_PIN_INDEX(const char code, const int16_t dval) {
|
||||||
return parser.intval(code, dval);
|
return parser.intval(code, dval);
|
||||||
}
|
}
|
||||||
|
@@ -34,26 +34,32 @@ constexpr uint8_t NUM_ANALOG_INPUTS = 16;
|
|||||||
|
|
||||||
#define HAL_SENSITIVE_PINS
|
#define HAL_SENSITIVE_PINS
|
||||||
|
|
||||||
|
constexpr uint8_t analog_offset = NUM_DIGITAL_PINS - NUM_ANALOG_INPUTS;
|
||||||
|
|
||||||
// Get the digital pin for an analog index
|
// Get the digital pin for an analog index
|
||||||
pin_t analogInputToDigitalPin(const int8_t p);
|
constexpr pin_t analogInputToDigitalPin(const int8_t p) {
|
||||||
|
return (WITHIN(p, 0, NUM_ANALOG_INPUTS) ? analog_offset + p : P_NC);
|
||||||
// Return the index of a pin number
|
}
|
||||||
int16_t GET_PIN_MAP_INDEX(const pin_t pin);
|
|
||||||
|
|
||||||
// Test whether the pin is valid
|
|
||||||
bool VALID_PIN(const pin_t p);
|
|
||||||
|
|
||||||
// Get the analog index for a digital pin
|
// Get the analog index for a digital pin
|
||||||
int8_t DIGITAL_PIN_TO_ANALOG_PIN(const pin_t p);
|
constexpr int8_t DIGITAL_PIN_TO_ANALOG_PIN(const pin_t p) {
|
||||||
|
return (WITHIN(p, analog_offset, NUM_DIGITAL_PINS) ? p - analog_offset : P_NC);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return the index of a pin number
|
||||||
|
constexpr int16_t GET_PIN_MAP_INDEX(const pin_t pin) { return pin; }
|
||||||
|
|
||||||
|
// Test whether the pin is valid
|
||||||
|
constexpr bool VALID_PIN(const pin_t p) { return WITHIN(p, 0, NUM_DIGITAL_PINS); }
|
||||||
|
|
||||||
// Test whether the pin is PWM
|
// Test whether the pin is PWM
|
||||||
bool PWM_PIN(const pin_t p);
|
constexpr bool PWM_PIN(const pin_t p) { return false; }
|
||||||
|
|
||||||
// Test whether the pin is interruptable
|
// Test whether the pin is interruptible
|
||||||
bool INTERRUPT_PIN(const pin_t p);
|
constexpr bool INTERRUPT_PIN(const pin_t p) { return false; }
|
||||||
|
|
||||||
// Get the pin number at the given index
|
// Get the pin number at the given index
|
||||||
pin_t GET_PIN_MAP_PIN(const int16_t ind);
|
constexpr pin_t GET_PIN_MAP_PIN(const int16_t ind) { return ind; }
|
||||||
|
|
||||||
// Parse a G-code word into a pin index
|
// Parse a G-code word into a pin index
|
||||||
int16_t PARSED_PIN_INDEX(const char code, const int16_t dval);
|
int16_t PARSED_PIN_INDEX(const char code, const int16_t dval);
|
||||||
|
@@ -2,6 +2,9 @@
|
|||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2020 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
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
@@ -16,6 +19,7 @@
|
|||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef __PLAT_LINUX__
|
#ifdef __PLAT_LINUX__
|
||||||
|
|
||||||
//#define GPIO_LOGGING // Full GPIO and Positional Logging
|
//#define GPIO_LOGGING // Full GPIO and Positional Logging
|
||||||
|
@@ -2,6 +2,9 @@
|
|||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2020 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
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
@@ -34,6 +37,7 @@
|
|||||||
#define GET_ARRAY_PIN(p) pin_array[p].pin
|
#define GET_ARRAY_PIN(p) pin_array[p].pin
|
||||||
#define PRINT_ARRAY_NAME(x) do{ sprintf_P(buffer, PSTR("%-" STRINGIFY(MAX_NAME_LENGTH) "s"), pin_array[x].name); SERIAL_ECHO(buffer); }while(0)
|
#define PRINT_ARRAY_NAME(x) do{ sprintf_P(buffer, PSTR("%-" STRINGIFY(MAX_NAME_LENGTH) "s"), pin_array[x].name); SERIAL_ECHO(buffer); }while(0)
|
||||||
#define PRINT_PIN(p) do{ sprintf_P(buffer, PSTR("%3d "), p); SERIAL_ECHO(buffer); }while(0)
|
#define PRINT_PIN(p) do{ sprintf_P(buffer, PSTR("%3d "), p); SERIAL_ECHO(buffer); }while(0)
|
||||||
|
#define PRINT_PIN_ANALOG(p) do{ sprintf_P(buffer, PSTR(" (A%2d) "), DIGITAL_PIN_TO_ANALOG_PIN(pin)); SERIAL_ECHO(buffer); }while(0)
|
||||||
#define MULTI_NAME_PAD 16 // space needed to be pretty if not first name assigned to a pin
|
#define MULTI_NAME_PAD 16 // space needed to be pretty if not first name assigned to a pin
|
||||||
|
|
||||||
// active ADC function/mode/code values for PINSEL registers
|
// active ADC function/mode/code values for PINSEL registers
|
||||||
|
@@ -50,15 +50,9 @@ extern "C" volatile uint32_t _millis;
|
|||||||
//
|
//
|
||||||
// Default graphical display delays
|
// Default graphical display delays
|
||||||
//
|
//
|
||||||
#ifndef ST7920_DELAY_1
|
#define CPU_ST7920_DELAY_1 600
|
||||||
#define ST7920_DELAY_1 DELAY_NS(600)
|
#define CPU_ST7920_DELAY_2 750
|
||||||
#endif
|
#define CPU_ST7920_DELAY_3 750
|
||||||
#ifndef ST7920_DELAY_2
|
|
||||||
#define ST7920_DELAY_2 DELAY_NS(750)
|
|
||||||
#endif
|
|
||||||
#ifndef ST7920_DELAY_3
|
|
||||||
#define ST7920_DELAY_3 DELAY_NS(750)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
typedef ForwardSerial1Class< decltype(UsbSerial) > DefaultSerial1;
|
typedef ForwardSerial1Class< decltype(UsbSerial) > DefaultSerial1;
|
||||||
extern DefaultSerial1 USBSerial;
|
extern DefaultSerial1 USBSerial;
|
||||||
@@ -84,6 +78,16 @@ extern DefaultSerial1 USBSerial;
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef SERIAL_PORT_3
|
||||||
|
#if SERIAL_PORT_3 == -1
|
||||||
|
#define MYSERIAL3 USBSerial
|
||||||
|
#elif WITHIN(SERIAL_PORT_3, 0, 3)
|
||||||
|
#define MYSERIAL3 MSERIAL(SERIAL_PORT_3)
|
||||||
|
#else
|
||||||
|
#error "SERIAL_PORT_3 must be from 0 to 3. You can also use -1 if the board supports Native USB."
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef MMU2_SERIAL_PORT
|
#ifdef MMU2_SERIAL_PORT
|
||||||
#if MMU2_SERIAL_PORT == -1
|
#if MMU2_SERIAL_PORT == -1
|
||||||
#define MMU2_SERIAL USBSerial
|
#define MMU2_SERIAL USBSerial
|
||||||
@@ -103,7 +107,7 @@ extern DefaultSerial1 USBSerial;
|
|||||||
#error "LCD_SERIAL_PORT must be from 0 to 3. You can also use -1 if the board supports Native USB."
|
#error "LCD_SERIAL_PORT must be from 0 to 3. You can also use -1 if the board supports Native USB."
|
||||||
#endif
|
#endif
|
||||||
#if HAS_DGUS_LCD
|
#if HAS_DGUS_LCD
|
||||||
#define SERIAL_GET_TX_BUFFER_FREE() MSerial0.available()
|
#define SERIAL_GET_TX_BUFFER_FREE() LCD_SERIAL.available()
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -152,17 +156,17 @@ int freeMemory();
|
|||||||
|
|
||||||
using FilteredADC = LPC176x::ADC<ADC_LOWPASS_K_VALUE, ADC_MEDIAN_FILTER_SIZE>;
|
using FilteredADC = LPC176x::ADC<ADC_LOWPASS_K_VALUE, ADC_MEDIAN_FILTER_SIZE>;
|
||||||
extern uint32_t HAL_adc_reading;
|
extern uint32_t HAL_adc_reading;
|
||||||
[[gnu::always_inline]] inline void HAL_start_adc(const pin_t pin) {
|
[[gnu::always_inline]] inline void HAL_adc_start_conversion(const pin_t pin) {
|
||||||
HAL_adc_reading = FilteredADC::read(pin) >> (16 - HAL_ADC_RESOLUTION); // returns 16bit value, reduce to required bits
|
HAL_adc_reading = FilteredADC::read(pin) >> (16 - HAL_ADC_RESOLUTION); // returns 16bit value, reduce to required bits
|
||||||
}
|
}
|
||||||
[[gnu::always_inline]] inline uint16_t HAL_read_adc() {
|
[[gnu::always_inline]] inline uint16_t HAL_adc_get_result() {
|
||||||
return HAL_adc_reading;
|
return HAL_adc_reading;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define HAL_adc_init()
|
#define HAL_adc_init()
|
||||||
#define HAL_ANALOG_SELECT(pin) FilteredADC::enable_channel(pin)
|
#define HAL_ANALOG_SELECT(pin) FilteredADC::enable_channel(pin)
|
||||||
#define HAL_START_ADC(pin) HAL_start_adc(pin)
|
#define HAL_START_ADC(pin) HAL_adc_start_conversion(pin)
|
||||||
#define HAL_READ_ADC() HAL_read_adc()
|
#define HAL_READ_ADC() HAL_adc_get_result()
|
||||||
#define HAL_ADC_READY() (true)
|
#define HAL_ADC_READY() (true)
|
||||||
|
|
||||||
// Test whether the pin is valid
|
// Test whether the pin is valid
|
||||||
@@ -188,7 +192,7 @@ constexpr pin_t GET_PIN_MAP_PIN(const int16_t index) {
|
|||||||
// Parse a G-code word into a pin index
|
// Parse a G-code word into a pin index
|
||||||
int16_t PARSED_PIN_INDEX(const char code, const int16_t dval);
|
int16_t PARSED_PIN_INDEX(const char code, const int16_t dval);
|
||||||
// P0.6 thru P0.9 are for the onboard SD card
|
// P0.6 thru P0.9 are for the onboard SD card
|
||||||
#define HAL_SENSITIVE_PINS P0_06, P0_07, P0_08, P0_09
|
#define HAL_SENSITIVE_PINS P0_06, P0_07, P0_08, P0_09,
|
||||||
|
|
||||||
#define HAL_IDLETASK 1
|
#define HAL_IDLETASK 1
|
||||||
void HAL_idletask();
|
void HAL_idletask();
|
||||||
|
@@ -21,6 +21,7 @@
|
|||||||
*/
|
*/
|
||||||
#ifdef TARGET_LPC1768
|
#ifdef TARGET_LPC1768
|
||||||
|
|
||||||
|
#include "../../inc/MarlinConfig.h"
|
||||||
#include "HAL.h"
|
#include "HAL.h"
|
||||||
|
|
||||||
#if ENABLED(POSTMORTEM_DEBUGGING)
|
#if ENABLED(POSTMORTEM_DEBUGGING)
|
||||||
|
@@ -66,11 +66,7 @@
|
|||||||
|
|
||||||
#include <SoftwareSPI.h>
|
#include <SoftwareSPI.h>
|
||||||
|
|
||||||
#ifndef HAL_SPI_SPEED
|
static uint8_t SPI_speed = SPI_FULL_SPEED;
|
||||||
#define HAL_SPI_SPEED SPI_FULL_SPEED
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static uint8_t SPI_speed = HAL_SPI_SPEED;
|
|
||||||
|
|
||||||
static uint8_t spiTransfer(uint8_t b) {
|
static uint8_t spiTransfer(uint8_t b) {
|
||||||
return swSpiTransfer(b, SPI_speed, SD_SCK_PIN, SD_MISO_PIN, SD_MOSI_PIN);
|
return swSpiTransfer(b, SPI_speed, SD_SCK_PIN, SD_MISO_PIN, SD_MOSI_PIN);
|
||||||
@@ -106,15 +102,13 @@
|
|||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#ifndef HAL_SPI_SPEED
|
#ifdef SD_SPI_SPEED
|
||||||
#ifdef SD_SPI_SPEED
|
#define INIT_SPI_SPEED SD_SPI_SPEED
|
||||||
#define HAL_SPI_SPEED SD_SPI_SPEED
|
#else
|
||||||
#else
|
#define INIT_SPI_SPEED SPI_FULL_SPEED
|
||||||
#define HAL_SPI_SPEED SPI_FULL_SPEED
|
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void spiBegin() { spiInit(HAL_SPI_SPEED); } // Set up SCK, MOSI & MISO pins for SSP0
|
void spiBegin() { spiInit(INIT_SPI_SPEED); } // Set up SCK, MOSI & MISO pins for SSP0
|
||||||
|
|
||||||
void spiInit(uint8_t spiRate) {
|
void spiInit(uint8_t spiRate) {
|
||||||
#if SD_MISO_PIN == BOARD_SPI1_MISO_PIN
|
#if SD_MISO_PIN == BOARD_SPI1_MISO_PIN
|
||||||
|
@@ -26,9 +26,9 @@
|
|||||||
#include "../../inc/MarlinConfig.h"
|
#include "../../inc/MarlinConfig.h"
|
||||||
|
|
||||||
#if USING_HW_SERIAL0
|
#if USING_HW_SERIAL0
|
||||||
MarlinSerial _MSerial(LPC_UART0);
|
MarlinSerial _MSerial0(LPC_UART0);
|
||||||
MSerialT MSerial0(true, _MSerial);
|
MSerialT MSerial0(true, _MSerial0);
|
||||||
extern "C" void UART0_IRQHandler() { _MSerial.IRQHandler(); }
|
extern "C" void UART0_IRQHandler() { _MSerial0.IRQHandler(); }
|
||||||
#endif
|
#endif
|
||||||
#if USING_HW_SERIAL1
|
#if USING_HW_SERIAL1
|
||||||
MarlinSerial _MSerial1((LPC_UART_TypeDef *) LPC_UART1);
|
MarlinSerial _MSerial1((LPC_UART_TypeDef *) LPC_UART1);
|
||||||
@@ -52,7 +52,7 @@
|
|||||||
// Need to figure out which serial port we are and react in consequence (Marlin does not have CONTAINER_OF macro)
|
// Need to figure out which serial port we are and react in consequence (Marlin does not have CONTAINER_OF macro)
|
||||||
if (false) {}
|
if (false) {}
|
||||||
#if USING_HW_SERIAL0
|
#if USING_HW_SERIAL0
|
||||||
else if (this == &_MSerial) emergency_parser.update(MSerial0.emergency_state, c);
|
else if (this == &_MSerial0) emergency_parser.update(MSerial0.emergency_state, c);
|
||||||
#endif
|
#endif
|
||||||
#if USING_HW_SERIAL1
|
#if USING_HW_SERIAL1
|
||||||
else if (this == &_MSerial1) emergency_parser.update(MSerial1.emergency_state, c);
|
else if (this == &_MSerial1) emergency_parser.update(MSerial1.emergency_state, c);
|
||||||
|
@@ -46,6 +46,8 @@ public:
|
|||||||
|
|
||||||
void end() {}
|
void end() {}
|
||||||
|
|
||||||
|
uint8_t availableForWrite(void) { /* flushTX(); */ return TX_BUFFER_SIZE; }
|
||||||
|
|
||||||
#if ENABLED(EMERGENCY_PARSER)
|
#if ENABLED(EMERGENCY_PARSER)
|
||||||
bool recv_callback(const char c) override;
|
bool recv_callback(const char c) override;
|
||||||
#endif
|
#endif
|
||||||
@@ -60,8 +62,8 @@ extern MSerialT MSerial1;
|
|||||||
extern MSerialT MSerial2;
|
extern MSerialT MSerial2;
|
||||||
extern MSerialT MSerial3;
|
extern MSerialT MSerial3;
|
||||||
|
|
||||||
// Consequently, we can't use a RuntimeSerial either. The workaround would be to use a RuntimeSerial<ForwardSerial<MarlinSerial>> type here
|
// Consequently, we can't use a RuntimeSerial either. The workaround would be to use
|
||||||
// Right now, let's ignore this until it's actually required.
|
// a RuntimeSerial<ForwardSerial<MarlinSerial>> type here. Ignore for now until it's actually required.
|
||||||
#if ENABLED(SERIAL_RUNTIME_HOOK)
|
#if ENABLED(SERIAL_RUNTIME_HOOK)
|
||||||
#error "SERIAL_RUNTIME_HOOK is not yet supported for LPC176x."
|
#error "SERIAL_RUNTIME_HOOK is not yet supported for LPC176x."
|
||||||
#endif
|
#endif
|
||||||
|
@@ -1,10 +1,9 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
*
|
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
* Copyright (c) 2016 Bob Cousins bobcousins42@googlemail.com
|
*
|
||||||
* Copyright (c) 2015-2016 Nico Tonnhofer wurstnase.reprap@gmail.com
|
* Based on Sprinter and grbl.
|
||||||
* Copyright (c) 2016 Victor Perez victor_pv@hotmail.com
|
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
@@ -20,12 +19,19 @@
|
|||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implementation of EEPROM settings in SD Card
|
||||||
|
*/
|
||||||
|
|
||||||
#ifdef TARGET_LPC1768
|
#ifdef TARGET_LPC1768
|
||||||
|
|
||||||
#include "../../inc/MarlinConfig.h"
|
#include "../../inc/MarlinConfig.h"
|
||||||
|
|
||||||
#if ENABLED(SDCARD_EEPROM_EMULATION)
|
#if ENABLED(SDCARD_EEPROM_EMULATION)
|
||||||
|
|
||||||
|
//#define DEBUG_SD_EEPROM_EMULATION
|
||||||
|
|
||||||
#include "../shared/eeprom_api.h"
|
#include "../shared/eeprom_api.h"
|
||||||
|
|
||||||
#include <chanfs/diskio.h>
|
#include <chanfs/diskio.h>
|
||||||
@@ -38,9 +44,11 @@ FATFS fat_fs;
|
|||||||
FIL eeprom_file;
|
FIL eeprom_file;
|
||||||
bool eeprom_file_open = false;
|
bool eeprom_file_open = false;
|
||||||
|
|
||||||
|
#define EEPROM_FILENAME "eeprom.dat"
|
||||||
#ifndef MARLIN_EEPROM_SIZE
|
#ifndef MARLIN_EEPROM_SIZE
|
||||||
#define MARLIN_EEPROM_SIZE size_t(0x1000) // 4KiB of Emulated EEPROM
|
#define MARLIN_EEPROM_SIZE size_t(0x1000) // 4KiB of Emulated EEPROM
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
size_t PersistentStore::capacity() { return MARLIN_EEPROM_SIZE; }
|
size_t PersistentStore::capacity() { return MARLIN_EEPROM_SIZE; }
|
||||||
|
|
||||||
bool PersistentStore::access_start() {
|
bool PersistentStore::access_start() {
|
||||||
@@ -50,7 +58,7 @@ bool PersistentStore::access_start() {
|
|||||||
MSC_Release_Lock();
|
MSC_Release_Lock();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
FRESULT res = f_open(&eeprom_file, "eeprom.dat", FA_OPEN_ALWAYS | FA_WRITE | FA_READ);
|
FRESULT res = f_open(&eeprom_file, EEPROM_FILENAME, FA_OPEN_ALWAYS | FA_WRITE | FA_READ);
|
||||||
if (res) MSC_Release_Lock();
|
if (res) MSC_Release_Lock();
|
||||||
|
|
||||||
if (res == FR_OK) {
|
if (res == FR_OK) {
|
||||||
@@ -81,18 +89,20 @@ bool PersistentStore::access_finish() {
|
|||||||
// This extra chit-chat goes away soon, but is helpful for now
|
// This extra chit-chat goes away soon, but is helpful for now
|
||||||
// to see errors that are happening in read_data / write_data
|
// to see errors that are happening in read_data / write_data
|
||||||
static void debug_rw(const bool write, int &pos, const uint8_t *value, const size_t size, const FRESULT s, const size_t total=0) {
|
static void debug_rw(const bool write, int &pos, const uint8_t *value, const size_t size, const FRESULT s, const size_t total=0) {
|
||||||
PGM_P const rw_str = write ? PSTR("write") : PSTR("read");
|
#if ENABLED(DEBUG_SD_EEPROM_EMULATION)
|
||||||
SERIAL_CHAR(' ');
|
PGM_P const rw_str = write ? PSTR("write") : PSTR("read");
|
||||||
SERIAL_ECHOPGM_P(rw_str);
|
SERIAL_CHAR(' ');
|
||||||
SERIAL_ECHOLNPAIR("_data(", pos, ",", value, ",", size, ", ...)");
|
|
||||||
if (total) {
|
|
||||||
SERIAL_ECHOPGM(" f_");
|
|
||||||
SERIAL_ECHOPGM_P(rw_str);
|
SERIAL_ECHOPGM_P(rw_str);
|
||||||
SERIAL_ECHOPAIR("()=", s, "\n size=", size, "\n bytes_");
|
SERIAL_ECHOLNPGM("_data(", pos, ",", *value, ",", size, ", ...)");
|
||||||
SERIAL_ECHOLNPAIR_P(write ? PSTR("written=") : PSTR("read="), total);
|
if (total) {
|
||||||
}
|
SERIAL_ECHOPGM(" f_");
|
||||||
else
|
SERIAL_ECHOPGM_P(rw_str);
|
||||||
SERIAL_ECHOLNPAIR(" f_lseek()=", s);
|
SERIAL_ECHOPGM("()=", s, "\n size=", size, "\n bytes_");
|
||||||
|
SERIAL_ECHOLNPGM_P(write ? PSTR("written=") : PSTR("read="), total);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
SERIAL_ECHOLNPGM(" f_lseek()=", s);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// File function return codes for type FRESULT. This goes away soon, but
|
// File function return codes for type FRESULT. This goes away soon, but
|
||||||
|
@@ -122,4 +122,37 @@ void setup_endstop_interrupts() {
|
|||||||
#endif
|
#endif
|
||||||
_ATTACH(Z_MIN_PROBE_PIN);
|
_ATTACH(Z_MIN_PROBE_PIN);
|
||||||
#endif
|
#endif
|
||||||
|
#if HAS_I_MAX
|
||||||
|
#if !LPC1768_PIN_INTERRUPT_M(I_MAX_PIN)
|
||||||
|
#error "I_MAX_PIN is not INTERRUPT-capable."
|
||||||
|
#endif
|
||||||
|
_ATTACH(I_MAX_PIN);
|
||||||
|
#elif HAS_I_MIN
|
||||||
|
#if !LPC1768_PIN_INTERRUPT_M(I_MIN_PIN)
|
||||||
|
#error "I_MIN_PIN is not INTERRUPT-capable."
|
||||||
|
#endif
|
||||||
|
_ATTACH(I_MIN_PIN);
|
||||||
|
#endif
|
||||||
|
#if HAS_J_MAX
|
||||||
|
#if !LPC1768_PIN_INTERRUPT_M(J_MAX_PIN)
|
||||||
|
#error "J_MAX_PIN is not INTERRUPT-capable."
|
||||||
|
#endif
|
||||||
|
_ATTACH(J_MAX_PIN);
|
||||||
|
#elif HAS_J_MIN
|
||||||
|
#if !LPC1768_PIN_INTERRUPT_M(J_MIN_PIN)
|
||||||
|
#error "J_MIN_PIN is not INTERRUPT-capable."
|
||||||
|
#endif
|
||||||
|
_ATTACH(J_MIN_PIN);
|
||||||
|
#endif
|
||||||
|
#if HAS_K_MAX
|
||||||
|
#if !LPC1768_PIN_INTERRUPT_M(K_MAX_PIN)
|
||||||
|
#error "K_MAX_PIN is not INTERRUPT-capable."
|
||||||
|
#endif
|
||||||
|
_ATTACH(K_MAX_PIN);
|
||||||
|
#elif HAS_K_MIN
|
||||||
|
#if !LPC1768_PIN_INTERRUPT_M(K_MIN_PIN)
|
||||||
|
#error "K_MIN_PIN is not INTERRUPT-capable."
|
||||||
|
#endif
|
||||||
|
_ATTACH(K_MIN_PIN);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
@@ -67,7 +67,7 @@ static_assert(!(NUM_SERVOS && ENABLED(FAST_PWM_FAN)), "BLTOUCH and Servos are in
|
|||||||
* Test LPC176x-specific configuration values for errors at compile-time.
|
* Test LPC176x-specific configuration values for errors at compile-time.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//#if ENABLED(SPINDLE_LASER_PWM) && !(SPINDLE_LASER_PWM_PIN == 4 || SPINDLE_LASER_PWM_PIN == 6 || SPINDLE_LASER_PWM_PIN == 11)
|
//#if ENABLED(SPINDLE_LASER_USE_PWM) && !(SPINDLE_LASER_PWM_PIN == 4 || SPINDLE_LASER_PWM_PIN == 6 || SPINDLE_LASER_PWM_PIN == 11)
|
||||||
// #error "SPINDLE_LASER_PWM_PIN must use SERVO0, SERVO1 or SERVO3 connector"
|
// #error "SPINDLE_LASER_PWM_PIN must use SERVO0, SERVO1 or SERVO3 connector"
|
||||||
//#endif
|
//#endif
|
||||||
|
|
||||||
@@ -144,9 +144,9 @@ static_assert(DISABLED(BAUD_RATE_GCODE), "BAUD_RATE_GCODE is not yet supported o
|
|||||||
#error "Serial port pins (2) conflict with Z4 pins!"
|
#error "Serial port pins (2) conflict with Z4 pins!"
|
||||||
#elif ANY_RX(2, X_DIR_PIN, Y_DIR_PIN)
|
#elif ANY_RX(2, X_DIR_PIN, Y_DIR_PIN)
|
||||||
#error "Serial port pins (2) conflict with other pins!"
|
#error "Serial port pins (2) conflict with other pins!"
|
||||||
#elif Y_HOME_DIR < 0 && IS_TX2(Y_STOP_PIN)
|
#elif Y_HOME_TO_MIN && IS_TX2(Y_STOP_PIN)
|
||||||
#error "Serial port pins (2) conflict with Y endstop pin!"
|
#error "Serial port pins (2) conflict with Y endstop pin!"
|
||||||
#elif HAS_CUSTOM_PROBE_PIN && IS_TX2(Z_MIN_PROBE_PIN)
|
#elif USES_Z_MIN_PROBE_PIN && IS_TX2(Z_MIN_PROBE_PIN)
|
||||||
#error "Serial port pins (2) conflict with probe pin!"
|
#error "Serial port pins (2) conflict with probe pin!"
|
||||||
#elif ANY_TX(2, X_ENABLE_PIN, Y_ENABLE_PIN) || ANY_RX(2, X_DIR_PIN, Y_DIR_PIN)
|
#elif ANY_TX(2, X_ENABLE_PIN, Y_ENABLE_PIN) || ANY_RX(2, X_DIR_PIN, Y_DIR_PIN)
|
||||||
#error "Serial port pins (2) conflict with X/Y stepper pins!"
|
#error "Serial port pins (2) conflict with X/Y stepper pins!"
|
||||||
@@ -237,7 +237,7 @@ static_assert(DISABLED(BAUD_RATE_GCODE), "BAUD_RATE_GCODE is not yet supported o
|
|||||||
#define PIN_IS_SCL2(P) (P##_PIN == P0_11)
|
#define PIN_IS_SCL2(P) (P##_PIN == P0_11)
|
||||||
#if PIN_IS_SDA2(Y_STOP)
|
#if PIN_IS_SDA2(Y_STOP)
|
||||||
#error "i2c SDA2 overlaps with Y endstop pin!"
|
#error "i2c SDA2 overlaps with Y endstop pin!"
|
||||||
#elif HAS_CUSTOM_PROBE_PIN && PIN_IS_SDA2(Z_MIN_PROBE)
|
#elif USES_Z_MIN_PROBE_PIN && PIN_IS_SDA2(Z_MIN_PROBE)
|
||||||
#error "i2c SDA2 overlaps with Z probe pin!"
|
#error "i2c SDA2 overlaps with Z probe pin!"
|
||||||
#elif PIN_IS_SDA2(X_ENABLE) || PIN_IS_SDA2(Y_ENABLE)
|
#elif PIN_IS_SDA2(X_ENABLE) || PIN_IS_SDA2(Y_ENABLE)
|
||||||
#error "i2c SDA2 overlaps with X/Y ENABLE pin!"
|
#error "i2c SDA2 overlaps with X/Y ENABLE pin!"
|
||||||
|
@@ -117,7 +117,7 @@ void HAL_init() {
|
|||||||
PinCfg.Pinmode = 2; // no pull-up/pull-down
|
PinCfg.Pinmode = 2; // no pull-up/pull-down
|
||||||
PINSEL_ConfigPin(&PinCfg);
|
PINSEL_ConfigPin(&PinCfg);
|
||||||
// now set CLKOUT_EN bit
|
// now set CLKOUT_EN bit
|
||||||
LPC_SC->CLKOUTCFG |= (1<<8);
|
SBI(LPC_SC->CLKOUTCFG, 8);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
USB_Init(); // USB Initialization
|
USB_Init(); // USB Initialization
|
||||||
|
@@ -2,6 +2,9 @@
|
|||||||
* Marlin 3D Printer Firmware
|
* Marlin 3D Printer Firmware
|
||||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
* Copyright (c) 2020 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
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
@@ -33,8 +36,9 @@
|
|||||||
#define PRINT_PORT(p)
|
#define PRINT_PORT(p)
|
||||||
#define GET_ARRAY_PIN(p) pin_array[p].pin
|
#define GET_ARRAY_PIN(p) pin_array[p].pin
|
||||||
#define PRINT_ARRAY_NAME(x) do{ sprintf_P(buffer, PSTR("%-" STRINGIFY(MAX_NAME_LENGTH) "s"), pin_array[x].name); SERIAL_ECHO(buffer); }while(0)
|
#define PRINT_ARRAY_NAME(x) do{ sprintf_P(buffer, PSTR("%-" STRINGIFY(MAX_NAME_LENGTH) "s"), pin_array[x].name); SERIAL_ECHO(buffer); }while(0)
|
||||||
#define PRINT_PIN(p) do{ sprintf_P(buffer, PSTR("%d.%02d"), LPC176x::pin_port(p), LPC176x::pin_bit(p)); SERIAL_ECHO(buffer); }while(0)
|
#define PRINT_PIN(p) do{ sprintf_P(buffer, PSTR("P%d_%02d"), LPC176x::pin_port(p), LPC176x::pin_bit(p)); SERIAL_ECHO(buffer); }while(0)
|
||||||
#define MULTI_NAME_PAD 16 // space needed to be pretty if not first name assigned to a pin
|
#define PRINT_PIN_ANALOG(p) do{ sprintf_P(buffer, PSTR("_A%d "), LPC176x::pin_get_adc_channel(pin)); SERIAL_ECHO(buffer); }while(0)
|
||||||
|
#define MULTI_NAME_PAD 17 // space needed to be pretty if not first name assigned to a pin
|
||||||
|
|
||||||
// pins that will cause hang/reset/disconnect in M43 Toggle and Watch utilities
|
// pins that will cause hang/reset/disconnect in M43 Toggle and Watch utilities
|
||||||
#ifndef M43_NEVER_TOUCH
|
#ifndef M43_NEVER_TOUCH
|
||||||
@@ -48,6 +52,4 @@ bool GET_PINMODE(const pin_t pin) {
|
|||||||
return LPC176x::gpio_direction(pin);
|
return LPC176x::gpio_direction(pin);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GET_ARRAY_IS_DIGITAL(const pin_t pin) {
|
#define GET_ARRAY_IS_DIGITAL(x) ((bool) pin_array[x].is_digital)
|
||||||
return (!LPC176x::pin_has_adc(pin) || !LPC176x::pin_adc_enabled(pin));
|
|
||||||
}
|
|
||||||
|
@@ -26,39 +26,22 @@
|
|||||||
|
|
||||||
#include "tft_spi.h"
|
#include "tft_spi.h"
|
||||||
|
|
||||||
//TFT_SPI tft;
|
|
||||||
|
|
||||||
SPIClass TFT_SPI::SPIx(1);
|
SPIClass TFT_SPI::SPIx(1);
|
||||||
|
|
||||||
#define TFT_CS_H WRITE(TFT_CS_PIN, HIGH)
|
|
||||||
#define TFT_CS_L WRITE(TFT_CS_PIN, LOW)
|
|
||||||
|
|
||||||
#define TFT_DC_H WRITE(TFT_DC_PIN, HIGH)
|
|
||||||
#define TFT_DC_L WRITE(TFT_DC_PIN, LOW)
|
|
||||||
|
|
||||||
#define TFT_RST_H WRITE(TFT_RESET_PIN, HIGH)
|
|
||||||
#define TFT_RST_L WRITE(TFT_RESET_PIN, LOW)
|
|
||||||
|
|
||||||
#define TFT_BLK_H WRITE(TFT_BACKLIGHT_PIN, HIGH)
|
|
||||||
#define TFT_BLK_L WRITE(TFT_BACKLIGHT_PIN, LOW)
|
|
||||||
|
|
||||||
void TFT_SPI::Init() {
|
void TFT_SPI::Init() {
|
||||||
#if PIN_EXISTS(TFT_RESET)
|
#if PIN_EXISTS(TFT_RESET)
|
||||||
SET_OUTPUT(TFT_RESET_PIN);
|
OUT_WRITE(TFT_RESET_PIN, HIGH);
|
||||||
TFT_RST_H;
|
|
||||||
delay(100);
|
delay(100);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if PIN_EXISTS(TFT_BACKLIGHT)
|
#if PIN_EXISTS(TFT_BACKLIGHT)
|
||||||
SET_OUTPUT(TFT_BACKLIGHT_PIN);
|
OUT_WRITE(TFT_BACKLIGHT_PIN, HIGH);
|
||||||
TFT_BLK_H;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
SET_OUTPUT(TFT_DC_PIN);
|
SET_OUTPUT(TFT_DC_PIN);
|
||||||
SET_OUTPUT(TFT_CS_PIN);
|
SET_OUTPUT(TFT_CS_PIN);
|
||||||
|
WRITE(TFT_DC_PIN, HIGH);
|
||||||
TFT_DC_H;
|
WRITE(TFT_CS_PIN, HIGH);
|
||||||
TFT_CS_H;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* STM32F1 APB2 = 72MHz, APB1 = 36MHz, max SPI speed of this MCU if 18Mhz
|
* STM32F1 APB2 = 72MHz, APB1 = 36MHz, max SPI speed of this MCU if 18Mhz
|
||||||
@@ -97,7 +80,7 @@ void TFT_SPI::Init() {
|
|||||||
void TFT_SPI::DataTransferBegin(uint16_t DataSize) {
|
void TFT_SPI::DataTransferBegin(uint16_t DataSize) {
|
||||||
SPIx.setDataSize(DataSize);
|
SPIx.setDataSize(DataSize);
|
||||||
SPIx.begin();
|
SPIx.begin();
|
||||||
TFT_CS_L;
|
WRITE(TFT_CS_PIN, LOW);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t TFT_SPI::GetID() {
|
uint32_t TFT_SPI::GetID() {
|
||||||
@@ -116,7 +99,7 @@ uint32_t TFT_SPI::ReadID(uint16_t Reg) {
|
|||||||
SPIx.setDataSize(DATASIZE_8BIT);
|
SPIx.setDataSize(DATASIZE_8BIT);
|
||||||
SPIx.setClock(SPI_CLOCK_DIV64);
|
SPIx.setClock(SPI_CLOCK_DIV64);
|
||||||
SPIx.begin();
|
SPIx.begin();
|
||||||
TFT_CS_L;
|
WRITE(TFT_CS_PIN, LOW);
|
||||||
WriteReg(Reg);
|
WriteReg(Reg);
|
||||||
|
|
||||||
LOOP_L_N(i, 4) {
|
LOOP_L_N(i, 4) {
|
||||||
@@ -131,21 +114,15 @@ uint32_t TFT_SPI::ReadID(uint16_t Reg) {
|
|||||||
return data >> 7;
|
return data >> 7;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TFT_SPI::isBusy() {
|
bool TFT_SPI::isBusy() { return false; }
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void TFT_SPI::Abort() {
|
void TFT_SPI::Abort() { DataTransferEnd(); }
|
||||||
DataTransferEnd();
|
|
||||||
}
|
|
||||||
|
|
||||||
void TFT_SPI::Transmit(uint16_t Data) {
|
void TFT_SPI::Transmit(uint16_t Data) { SPIx.transfer(Data); }
|
||||||
SPIx.transfer(Data);
|
|
||||||
}
|
|
||||||
|
|
||||||
void TFT_SPI::TransmitDMA(uint32_t MemoryIncrease, uint16_t *Data, uint16_t Count) {
|
void TFT_SPI::TransmitDMA(uint32_t MemoryIncrease, uint16_t *Data, uint16_t Count) {
|
||||||
DataTransferBegin(DATASIZE_16BIT); //16
|
DataTransferBegin(DATASIZE_16BIT);
|
||||||
TFT_DC_H;
|
WRITE(TFT_DC_PIN, HIGH);
|
||||||
SPIx.dmaSend(Data, Count, MemoryIncrease);
|
SPIx.dmaSend(Data, Count, MemoryIncrease);
|
||||||
DataTransferEnd();
|
DataTransferEnd();
|
||||||
}
|
}
|
||||||
|
@@ -22,7 +22,7 @@
|
|||||||
|
|
||||||
#include "../../../inc/MarlinConfig.h"
|
#include "../../../inc/MarlinConfig.h"
|
||||||
|
|
||||||
#if HAS_TFT_XPT2046 || HAS_TOUCH_BUTTONS
|
#if HAS_TFT_XPT2046 || HAS_RES_TOUCH_BUTTONS
|
||||||
|
|
||||||
#include "xpt2046.h"
|
#include "xpt2046.h"
|
||||||
#include <SPI.h>
|
#include <SPI.h>
|
||||||
|
@@ -54,7 +54,7 @@ enum XPTCoordinate : uint8_t {
|
|||||||
XPT2046_Z2 = 0x40 | XPT2046_CONTROL | XPT2046_DFR_MODE,
|
XPT2046_Z2 = 0x40 | XPT2046_CONTROL | XPT2046_DFR_MODE,
|
||||||
};
|
};
|
||||||
|
|
||||||
#if !defined(XPT2046_Z1_THRESHOLD)
|
#ifndef XPT2046_Z1_THRESHOLD
|
||||||
#define XPT2046_Z1_THRESHOLD 10
|
#define XPT2046_Z1_THRESHOLD 10
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@@ -59,7 +59,7 @@
|
|||||||
|
|
||||||
#if HAS_MARLINUI_U8GLIB
|
#if HAS_MARLINUI_U8GLIB
|
||||||
|
|
||||||
#include <U8glib.h>
|
#include <U8glib-HAL.h>
|
||||||
#include "../../shared/HAL_SPI.h"
|
#include "../../shared/HAL_SPI.h"
|
||||||
|
|
||||||
#ifndef LCD_SPI_SPEED
|
#ifndef LCD_SPI_SPEED
|
||||||
|
@@ -79,7 +79,7 @@
|
|||||||
|
|
||||||
#if HAS_MARLINUI_U8GLIB
|
#if HAS_MARLINUI_U8GLIB
|
||||||
|
|
||||||
#include <U8glib.h>
|
#include <U8glib-HAL.h>
|
||||||
|
|
||||||
#define I2C_SLA (0x3C*2)
|
#define I2C_SLA (0x3C*2)
|
||||||
//#define I2C_CMD_MODE 0x080
|
//#define I2C_CMD_MODE 0x080
|
||||||
|
@@ -59,7 +59,7 @@
|
|||||||
|
|
||||||
#if HAS_MARLINUI_U8GLIB
|
#if HAS_MARLINUI_U8GLIB
|
||||||
|
|
||||||
#include <U8glib.h>
|
#include <U8glib-HAL.h>
|
||||||
#include "../../shared/HAL_SPI.h"
|
#include "../../shared/HAL_SPI.h"
|
||||||
#include "../../shared/Delay.h"
|
#include "../../shared/Delay.h"
|
||||||
|
|
||||||
|
@@ -59,7 +59,7 @@
|
|||||||
|
|
||||||
#if ENABLED(U8GLIB_ST7920)
|
#if ENABLED(U8GLIB_ST7920)
|
||||||
|
|
||||||
#include <U8glib.h>
|
#include <U8glib-HAL.h>
|
||||||
#include <SoftwareSPI.h>
|
#include <SoftwareSPI.h>
|
||||||
#include "../../shared/Delay.h"
|
#include "../../shared/Delay.h"
|
||||||
#include "../../shared/HAL_SPI.h"
|
#include "../../shared/HAL_SPI.h"
|
||||||
|
@@ -71,7 +71,7 @@
|
|||||||
#include <LPC17xx.h>
|
#include <LPC17xx.h>
|
||||||
#include <gpio.h>
|
#include <gpio.h>
|
||||||
|
|
||||||
#include <U8glib.h>
|
#include <U8glib-HAL.h>
|
||||||
|
|
||||||
uint8_t swSpiTransfer_mode_0(uint8_t b, const uint8_t spi_speed, const pin_t sck_pin, const pin_t miso_pin, const pin_t mosi_pin ) {
|
uint8_t swSpiTransfer_mode_0(uint8_t b, const uint8_t spi_speed, const pin_t sck_pin, const pin_t miso_pin, const pin_t mosi_pin ) {
|
||||||
|
|
||||||
|
@@ -20,101 +20,104 @@ def print_error(e):
|
|||||||
'or copy the firmware (.pio/build/%s/firmware.bin) manually to the appropriate disk\n' \
|
'or copy the firmware (.pio/build/%s/firmware.bin) manually to the appropriate disk\n' \
|
||||||
%(e, env.get('PIOENV')))
|
%(e, env.get('PIOENV')))
|
||||||
|
|
||||||
try:
|
def before_upload(source, target, env):
|
||||||
#
|
try:
|
||||||
# Find a disk for upload
|
|
||||||
#
|
|
||||||
upload_disk = 'Disk not found'
|
|
||||||
target_file_found = False
|
|
||||||
target_drive_found = False
|
|
||||||
if current_OS == 'Windows':
|
|
||||||
#
|
#
|
||||||
# platformio.ini will accept this for a Windows upload port designation: 'upload_port = L:'
|
# Find a disk for upload
|
||||||
# Windows - doesn't care about the disk's name, only cares about the drive letter
|
#
|
||||||
import subprocess,string
|
upload_disk = 'Disk not found'
|
||||||
from ctypes import windll
|
target_file_found = False
|
||||||
|
target_drive_found = False
|
||||||
|
if current_OS == 'Windows':
|
||||||
|
#
|
||||||
|
# platformio.ini will accept this for a Windows upload port designation: 'upload_port = L:'
|
||||||
|
# Windows - doesn't care about the disk's name, only cares about the drive letter
|
||||||
|
import subprocess,string
|
||||||
|
from ctypes import windll
|
||||||
|
|
||||||
# getting list of drives
|
# getting list of drives
|
||||||
# https://stackoverflow.com/questions/827371/is-there-a-way-to-list-all-the-available-drive-letters-in-python
|
# https://stackoverflow.com/questions/827371/is-there-a-way-to-list-all-the-available-drive-letters-in-python
|
||||||
drives = []
|
drives = []
|
||||||
bitmask = windll.kernel32.GetLogicalDrives()
|
bitmask = windll.kernel32.GetLogicalDrives()
|
||||||
for letter in string.ascii_uppercase:
|
for letter in string.ascii_uppercase:
|
||||||
if bitmask & 1:
|
if bitmask & 1:
|
||||||
drives.append(letter)
|
drives.append(letter)
|
||||||
bitmask >>= 1
|
bitmask >>= 1
|
||||||
|
|
||||||
for drive in drives:
|
for drive in drives:
|
||||||
final_drive_name = drive + ':\\'
|
final_drive_name = drive + ':\\'
|
||||||
# print ('disc check: {}'.format(final_drive_name))
|
# print ('disc check: {}'.format(final_drive_name))
|
||||||
try:
|
try:
|
||||||
volume_info = str(subprocess.check_output('cmd /C dir ' + final_drive_name, stderr=subprocess.STDOUT))
|
volume_info = str(subprocess.check_output('cmd /C dir ' + final_drive_name, stderr=subprocess.STDOUT))
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print ('error:{}'.format(e))
|
print ('error:{}'.format(e))
|
||||||
continue
|
continue
|
||||||
else:
|
else:
|
||||||
if target_drive in volume_info and not target_file_found: # set upload if not found target file yet
|
if target_drive in volume_info and not target_file_found: # set upload if not found target file yet
|
||||||
target_drive_found = True
|
target_drive_found = True
|
||||||
upload_disk = final_drive_name
|
|
||||||
if target_filename in volume_info:
|
|
||||||
if not target_file_found:
|
|
||||||
upload_disk = final_drive_name
|
upload_disk = final_drive_name
|
||||||
target_file_found = True
|
if target_filename in volume_info:
|
||||||
|
if not target_file_found:
|
||||||
|
upload_disk = final_drive_name
|
||||||
|
target_file_found = True
|
||||||
|
|
||||||
elif current_OS == 'Linux':
|
elif current_OS == 'Linux':
|
||||||
#
|
#
|
||||||
# platformio.ini will accept this for a Linux upload port designation: 'upload_port = /media/media_name/drive'
|
# platformio.ini will accept this for a Linux upload port designation: 'upload_port = /media/media_name/drive'
|
||||||
#
|
#
|
||||||
drives = os.listdir(os.path.join(os.sep, 'media', getpass.getuser()))
|
drives = os.listdir(os.path.join(os.sep, 'media', getpass.getuser()))
|
||||||
if target_drive in drives: # If target drive is found, use it.
|
if target_drive in drives: # If target drive is found, use it.
|
||||||
target_drive_found = True
|
target_drive_found = True
|
||||||
upload_disk = os.path.join(os.sep, 'media', getpass.getuser(), target_drive) + os.sep
|
upload_disk = os.path.join(os.sep, 'media', getpass.getuser(), target_drive) + os.sep
|
||||||
else:
|
else:
|
||||||
|
for drive in drives:
|
||||||
|
try:
|
||||||
|
files = os.listdir(os.path.join(os.sep, 'media', getpass.getuser(), drive))
|
||||||
|
except:
|
||||||
|
continue
|
||||||
|
else:
|
||||||
|
if target_filename in files:
|
||||||
|
upload_disk = os.path.join(os.sep, 'media', getpass.getuser(), drive) + os.sep
|
||||||
|
target_file_found = True
|
||||||
|
break
|
||||||
|
#
|
||||||
|
# set upload_port to drive if found
|
||||||
|
#
|
||||||
|
|
||||||
|
if target_file_found or target_drive_found:
|
||||||
|
env.Replace(
|
||||||
|
UPLOAD_FLAGS="-P$UPLOAD_PORT"
|
||||||
|
)
|
||||||
|
|
||||||
|
elif current_OS == 'Darwin': # MAC
|
||||||
|
#
|
||||||
|
# platformio.ini will accept this for a OSX upload port designation: 'upload_port = /media/media_name/drive'
|
||||||
|
#
|
||||||
|
drives = os.listdir('/Volumes') # human readable names
|
||||||
|
if target_drive in drives and not target_file_found: # set upload if not found target file yet
|
||||||
|
target_drive_found = True
|
||||||
|
upload_disk = '/Volumes/' + target_drive + '/'
|
||||||
for drive in drives:
|
for drive in drives:
|
||||||
try:
|
try:
|
||||||
files = os.listdir(os.path.join(os.sep, 'media', getpass.getuser(), drive))
|
filenames = os.listdir('/Volumes/' + drive + '/') # will get an error if the drive is protected
|
||||||
except:
|
except:
|
||||||
continue
|
continue
|
||||||
else:
|
else:
|
||||||
if target_filename in files:
|
if target_filename in filenames:
|
||||||
upload_disk = os.path.join(os.sep, 'media', getpass.getuser(), drive) + os.sep
|
if not target_file_found:
|
||||||
|
upload_disk = '/Volumes/' + drive + '/'
|
||||||
target_file_found = True
|
target_file_found = True
|
||||||
break
|
|
||||||
#
|
|
||||||
# set upload_port to drive if found
|
|
||||||
#
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Set upload_port to drive if found
|
||||||
|
#
|
||||||
if target_file_found or target_drive_found:
|
if target_file_found or target_drive_found:
|
||||||
env.Replace(
|
env.Replace(UPLOAD_PORT=upload_disk)
|
||||||
UPLOAD_FLAGS="-P$UPLOAD_PORT"
|
print('\nUpload disk: ', upload_disk, '\n')
|
||||||
)
|
else:
|
||||||
|
print_error('Autodetect Error')
|
||||||
|
|
||||||
elif current_OS == 'Darwin': # MAC
|
except Exception as e:
|
||||||
#
|
print_error(str(e))
|
||||||
# platformio.ini will accept this for a OSX upload port designation: 'upload_port = /media/media_name/drive'
|
|
||||||
#
|
|
||||||
drives = os.listdir('/Volumes') # human readable names
|
|
||||||
if target_drive in drives and not target_file_found: # set upload if not found target file yet
|
|
||||||
target_drive_found = True
|
|
||||||
upload_disk = '/Volumes/' + target_drive + '/'
|
|
||||||
for drive in drives:
|
|
||||||
try:
|
|
||||||
filenames = os.listdir('/Volumes/' + drive + '/') # will get an error if the drive is protected
|
|
||||||
except:
|
|
||||||
continue
|
|
||||||
else:
|
|
||||||
if target_filename in filenames:
|
|
||||||
if not target_file_found:
|
|
||||||
upload_disk = '/Volumes/' + drive + '/'
|
|
||||||
target_file_found = True
|
|
||||||
|
|
||||||
#
|
env.AddPreAction("upload", before_upload)
|
||||||
# Set upload_port to drive if found
|
|
||||||
#
|
|
||||||
if target_file_found or target_drive_found:
|
|
||||||
env.Replace(UPLOAD_PORT=upload_disk)
|
|
||||||
print('\nUpload disk: ', upload_disk, '\n')
|
|
||||||
else:
|
|
||||||
print_error('Autodetect Error')
|
|
||||||
|
|
||||||
except Exception as e:
|
|
||||||
print_error(str(e))
|
|
||||||
|
217
Marlin/src/HAL/NATIVE_SIM/HAL.h
Normal file
217
Marlin/src/HAL/NATIVE_SIM/HAL.h
Normal file
@@ -0,0 +1,217 @@
|
|||||||
|
/**
|
||||||
|
* Marlin 3D Printer Firmware
|
||||||
|
*
|
||||||
|
* Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
|
* Copyright (c) 2016 Bob Cousins bobcousins42@googlemail.com
|
||||||
|
* Copyright (c) 2015-2016 Nico Tonnhofer wurstnase.reprap@gmail.com
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
#define HAL_IDLETASK
|
||||||
|
void HAL_idletask();
|
||||||
|
|
||||||
|
#define F_CPU 100000000
|
||||||
|
#define SystemCoreClock F_CPU
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
#undef min
|
||||||
|
#undef max
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
#include "pinmapping.h"
|
||||||
|
|
||||||
|
void _printf (const char *format, ...);
|
||||||
|
void _putc(uint8_t c);
|
||||||
|
uint8_t _getc();
|
||||||
|
|
||||||
|
//extern "C" volatile uint32_t _millis;
|
||||||
|
|
||||||
|
//arduino: Print.h
|
||||||
|
#define DEC 10
|
||||||
|
#define HEX 16
|
||||||
|
#define OCT 8
|
||||||
|
#define BIN 2
|
||||||
|
//arduino: binary.h (weird defines)
|
||||||
|
#define B01 1
|
||||||
|
#define B10 2
|
||||||
|
|
||||||
|
#include "../shared/Marduino.h"
|
||||||
|
#include "../shared/math_32bit.h"
|
||||||
|
#include "../shared/HAL_SPI.h"
|
||||||
|
#include "fastio.h"
|
||||||
|
#include "watchdog.h"
|
||||||
|
#include "serial.h"
|
||||||
|
|
||||||
|
#define SHARED_SERVOS HAS_SERVOS
|
||||||
|
|
||||||
|
extern MSerialT serial_stream_0;
|
||||||
|
extern MSerialT serial_stream_1;
|
||||||
|
extern MSerialT serial_stream_2;
|
||||||
|
extern MSerialT serial_stream_3;
|
||||||
|
|
||||||
|
#define _MSERIAL(X) serial_stream_##X
|
||||||
|
#define MSERIAL(X) _MSERIAL(X)
|
||||||
|
|
||||||
|
#if WITHIN(SERIAL_PORT, 0, 3)
|
||||||
|
#define MYSERIAL1 MSERIAL(SERIAL_PORT)
|
||||||
|
#else
|
||||||
|
#error "SERIAL_PORT must be from 0 to 3. Please update your configuration."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef SERIAL_PORT_2
|
||||||
|
#if WITHIN(SERIAL_PORT_2, 0, 3)
|
||||||
|
#define MYSERIAL2 MSERIAL(SERIAL_PORT_2)
|
||||||
|
#else
|
||||||
|
#error "SERIAL_PORT_2 must be from 0 to 3. Please update your configuration."
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef MMU2_SERIAL_PORT
|
||||||
|
#if WITHIN(MMU2_SERIAL_PORT, 0, 3)
|
||||||
|
#define MMU2_SERIAL MSERIAL(MMU2_SERIAL_PORT)
|
||||||
|
#else
|
||||||
|
#error "MMU2_SERIAL_PORT must be from 0 to 3. Please update your configuration."
|
||||||
|
#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. Please update your configuration."
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#define CPU_ST7920_DELAY_1 600
|
||||||
|
#define CPU_ST7920_DELAY_2 750
|
||||||
|
#define CPU_ST7920_DELAY_3 750
|
||||||
|
|
||||||
|
//
|
||||||
|
// Interrupts
|
||||||
|
//
|
||||||
|
#define CRITICAL_SECTION_START()
|
||||||
|
#define CRITICAL_SECTION_END()
|
||||||
|
#define ISRS_ENABLED()
|
||||||
|
#define ENABLE_ISRS()
|
||||||
|
#define DISABLE_ISRS()
|
||||||
|
|
||||||
|
inline void HAL_init() {}
|
||||||
|
|
||||||
|
// Utility functions
|
||||||
|
#pragma GCC diagnostic push
|
||||||
|
#pragma GCC diagnostic ignored "-Wunused-function"
|
||||||
|
int freeMemory();
|
||||||
|
#pragma GCC diagnostic pop
|
||||||
|
|
||||||
|
// ADC
|
||||||
|
#define HAL_ADC_VREF 5.0
|
||||||
|
#define HAL_ADC_RESOLUTION 10
|
||||||
|
#define HAL_ANALOG_SELECT(ch) HAL_adc_enable_channel(ch)
|
||||||
|
#define HAL_START_ADC(ch) HAL_adc_start_conversion(ch)
|
||||||
|
#define HAL_READ_ADC() HAL_adc_get_result()
|
||||||
|
#define HAL_ADC_READY() true
|
||||||
|
|
||||||
|
void HAL_adc_init();
|
||||||
|
void HAL_adc_enable_channel(const uint8_t ch);
|
||||||
|
void HAL_adc_start_conversion(const uint8_t ch);
|
||||||
|
uint16_t HAL_adc_get_result();
|
||||||
|
|
||||||
|
// Reset source
|
||||||
|
inline void HAL_clear_reset_source(void) {}
|
||||||
|
inline uint8_t HAL_get_reset_source(void) { return RST_POWER_ON; }
|
||||||
|
|
||||||
|
/* ---------------- Delay in cycles */
|
||||||
|
|
||||||
|
#define DELAY_CYCLES(x) Kernel::delayCycles(x)
|
||||||
|
#define SYSTEM_YIELD() Kernel::yield()
|
||||||
|
|
||||||
|
// Maple Compatibility
|
||||||
|
typedef void (*systickCallback_t)(void);
|
||||||
|
void systick_attach_callback(systickCallback_t cb);
|
||||||
|
extern volatile uint32_t systick_uptime_millis;
|
||||||
|
|
||||||
|
// Marlin uses strstr in constexpr context, this is not supported, workaround by defining constexpr versions of the required functions.
|
||||||
|
#define strstr(a, b) strstr_constexpr((a), (b))
|
||||||
|
|
||||||
|
constexpr inline std::size_t strlen_constexpr(const char* str) {
|
||||||
|
// https://github.com/gcc-mirror/gcc/blob/5c7634a0e5f202935aa6c11b6ea953b8bf80a00a/libstdc%2B%2B-v3/include/bits/char_traits.h#L329
|
||||||
|
if (str != nullptr) {
|
||||||
|
std::size_t i = 0;
|
||||||
|
while (str[i] != '\0') {
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
constexpr inline int strncmp_constexpr(const char* lhs, const char* rhs, std::size_t count) {
|
||||||
|
// https://github.com/gcc-mirror/gcc/blob/13b9cbfc32fe3ac4c81c4dd9c42d141c8fb95db4/libstdc%2B%2B-v3/include/bits/char_traits.h#L655
|
||||||
|
if (lhs == nullptr || rhs == nullptr) {
|
||||||
|
return rhs != nullptr ? -1 : 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (std::size_t i = 0; i < count; ++i) {
|
||||||
|
if (lhs[i] != rhs[i]) {
|
||||||
|
return lhs[i] < rhs[i] ? -1 : 1;
|
||||||
|
} else if (lhs[i] == '\0') {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
constexpr inline const char* strstr_constexpr(const char* str, const char* target) {
|
||||||
|
// https://github.com/freebsd/freebsd/blob/master/sys/libkern/strstr.c
|
||||||
|
if (char c = target != nullptr ? *target++ : '\0'; c != '\0' && str != nullptr) {
|
||||||
|
std::size_t len = strlen_constexpr(target);
|
||||||
|
do {
|
||||||
|
char sc = {};
|
||||||
|
do {
|
||||||
|
if ((sc = *str++) == '\0') {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
} while (sc != c);
|
||||||
|
} while (strncmp_constexpr(str, target, len) != 0);
|
||||||
|
--str;
|
||||||
|
}
|
||||||
|
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
constexpr inline char* strstr_constexpr(char* str, const char* target) {
|
||||||
|
// https://github.com/freebsd/freebsd/blob/master/sys/libkern/strstr.c
|
||||||
|
if (char c = target != nullptr ? *target++ : '\0'; c != '\0' && str != nullptr) {
|
||||||
|
std::size_t len = strlen_constexpr(target);
|
||||||
|
do {
|
||||||
|
char sc = {};
|
||||||
|
do {
|
||||||
|
if ((sc = *str++) == '\0') {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
} while (sc != c);
|
||||||
|
} while (strncmp_constexpr(str, target, len) != 0);
|
||||||
|
--str;
|
||||||
|
}
|
||||||
|
return str;
|
||||||
|
}
|
26
Marlin/src/HAL/NATIVE_SIM/MarlinSPI.h
Normal file
26
Marlin/src/HAL/NATIVE_SIM/MarlinSPI.h
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
/**
|
||||||
|
* Marlin 3D Printer Firmware
|
||||||
|
*
|
||||||
|
* Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
|
* Copyright (c) 2016 Bob Cousins bobcousins42@googlemail.com
|
||||||
|
* Copyright (c) 2015-2016 Nico Tonnhofer wurstnase.reprap@gmail.com
|
||||||
|
*
|
||||||
|
* 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 <SPI.h>
|
||||||
|
|
||||||
|
using MarlinSPI = SPIClass;
|
111
Marlin/src/HAL/NATIVE_SIM/fastio.h
Normal file
111
Marlin/src/HAL/NATIVE_SIM/fastio.h
Normal file
@@ -0,0 +1,111 @@
|
|||||||
|
/**
|
||||||
|
* Marlin 3D Printer Firmware
|
||||||
|
* Copyright (c) 2021 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 Routines for X86_64
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "../shared/Marduino.h"
|
||||||
|
#include <pinmapping.h>
|
||||||
|
|
||||||
|
#define SET_DIR_INPUT(IO) Gpio::setDir(IO, 1)
|
||||||
|
#define SET_DIR_OUTPUT(IO) Gpio::setDir(IO, 0)
|
||||||
|
|
||||||
|
#define SET_MODE(IO, mode) Gpio::setMode(IO, mode)
|
||||||
|
|
||||||
|
#define WRITE_PIN_SET(IO) Gpio::set(IO)
|
||||||
|
#define WRITE_PIN_CLR(IO) Gpio::clear(IO)
|
||||||
|
|
||||||
|
#define READ_PIN(IO) Gpio::get(IO)
|
||||||
|
#define WRITE_PIN(IO,V) Gpio::set(IO, V)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Magic I/O routines
|
||||||
|
*
|
||||||
|
* Now you can simply SET_OUTPUT(STEP); WRITE(STEP, HIGH); WRITE(STEP, LOW);
|
||||||
|
*
|
||||||
|
* Why double up on these macros? see http://gcc.gnu.org/onlinedocs/cpp/Stringification.html
|
||||||
|
*/
|
||||||
|
|
||||||
|
/// Read a pin
|
||||||
|
#define _READ(IO) READ_PIN(IO)
|
||||||
|
|
||||||
|
/// Write to a pin
|
||||||
|
#define _WRITE(IO,V) WRITE_PIN(IO,V)
|
||||||
|
|
||||||
|
/// toggle a pin
|
||||||
|
#define _TOGGLE(IO) _WRITE(IO, !READ(IO))
|
||||||
|
|
||||||
|
/// set pin as input
|
||||||
|
#define _SET_INPUT(IO) SET_DIR_INPUT(IO)
|
||||||
|
|
||||||
|
/// set pin as output
|
||||||
|
#define _SET_OUTPUT(IO) SET_DIR_OUTPUT(IO)
|
||||||
|
|
||||||
|
/// set pin as input with pullup mode
|
||||||
|
#define _PULLUP(IO,V) pinMode(IO, (V) ? INPUT_PULLUP : INPUT)
|
||||||
|
|
||||||
|
/// set pin as input with pulldown mode
|
||||||
|
#define _PULLDOWN(IO,V) pinMode(IO, (V) ? INPUT_PULLDOWN : INPUT)
|
||||||
|
|
||||||
|
// hg42: all pins can be input or output (I hope)
|
||||||
|
// hg42: undefined pins create compile error (IO, is no pin)
|
||||||
|
// hg42: currently not used, but was used by pinsDebug
|
||||||
|
|
||||||
|
/// check if pin is an input
|
||||||
|
#define _IS_INPUT(IO) (IO >= 0)
|
||||||
|
|
||||||
|
/// check if pin is an output
|
||||||
|
#define _IS_OUTPUT(IO) (IO >= 0)
|
||||||
|
|
||||||
|
/// Read a pin wrapper
|
||||||
|
#define READ(IO) _READ(IO)
|
||||||
|
|
||||||
|
/// Write to a pin wrapper
|
||||||
|
#define WRITE(IO,V) _WRITE(IO,V)
|
||||||
|
|
||||||
|
/// toggle a pin wrapper
|
||||||
|
#define TOGGLE(IO) _TOGGLE(IO)
|
||||||
|
|
||||||
|
/// set pin as input wrapper
|
||||||
|
#define SET_INPUT(IO) _SET_INPUT(IO)
|
||||||
|
/// set pin as input with pullup wrapper
|
||||||
|
#define SET_INPUT_PULLUP(IO) do{ _SET_INPUT(IO); _PULLUP(IO, HIGH); }while(0)
|
||||||
|
/// set pin as input with pulldown wrapper
|
||||||
|
#define SET_INPUT_PULLDOWN(IO) do{ _SET_INPUT(IO); _PULLDOWN(IO, HIGH); }while(0)
|
||||||
|
/// set pin as output wrapper - reads the pin and sets the output to that value
|
||||||
|
#define SET_OUTPUT(IO) do{ _WRITE(IO, _READ(IO)); _SET_OUTPUT(IO); }while(0)
|
||||||
|
// set pin as PWM
|
||||||
|
#define SET_PWM(IO) SET_OUTPUT(IO)
|
||||||
|
|
||||||
|
/// check if pin is an input wrapper
|
||||||
|
#define IS_INPUT(IO) _IS_INPUT(IO)
|
||||||
|
/// check if pin is an output wrapper
|
||||||
|
#define IS_OUTPUT(IO) _IS_OUTPUT(IO)
|
||||||
|
|
||||||
|
// Shorthand
|
||||||
|
#define OUT_WRITE(IO,V) do{ SET_OUTPUT(IO); WRITE(IO,V); }while(0)
|
||||||
|
|
||||||
|
// digitalRead/Write wrappers
|
||||||
|
#define extDigitalRead(IO) digitalRead(IO)
|
||||||
|
#define extDigitalWrite(IO,V) digitalWrite(IO,V)
|
22
Marlin/src/HAL/NATIVE_SIM/inc/Conditionals_LCD.h
Normal file
22
Marlin/src/HAL/NATIVE_SIM/inc/Conditionals_LCD.h
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
/**
|
||||||
|
* Marlin 3D Printer Firmware
|
||||||
|
* Copyright (c) 2021 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
|
31
Marlin/src/HAL/NATIVE_SIM/inc/Conditionals_adv.h
Normal file
31
Marlin/src/HAL/NATIVE_SIM/inc/Conditionals_adv.h
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
/**
|
||||||
|
* Marlin 3D Printer Firmware
|
||||||
|
* Copyright (c) 2021 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
|
||||||
|
|
||||||
|
// Add strcmp_P if missing
|
||||||
|
#ifndef strcmp_P
|
||||||
|
#define strcmp_P(a, b) strcmp((a), (b))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef strcat_P
|
||||||
|
#define strcat_P(dest, src) strcat((dest), (src))
|
||||||
|
#endif
|
22
Marlin/src/HAL/NATIVE_SIM/inc/Conditionals_post.h
Normal file
22
Marlin/src/HAL/NATIVE_SIM/inc/Conditionals_post.h
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
/**
|
||||||
|
* Marlin 3D Printer Firmware
|
||||||
|
* Copyright (c) 2021 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
|
43
Marlin/src/HAL/NATIVE_SIM/inc/SanityCheck.h
Normal file
43
Marlin/src/HAL/NATIVE_SIM/inc/SanityCheck.h
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
/**
|
||||||
|
* Marlin 3D Printer Firmware
|
||||||
|
* Copyright (c) 2021 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 X86_64-specific configuration values for errors at compile-time.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Emulating RAMPS
|
||||||
|
#if ENABLED(SPINDLE_LASER_USE_PWM) && !(SPINDLE_LASER_PWM_PIN == 4 || SPINDLE_LASER_PWM_PIN == 6 || SPINDLE_LASER_PWM_PIN == 11)
|
||||||
|
#error "SPINDLE_LASER_PWM_PIN must use SERVO0, SERVO1 or SERVO3 connector"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if ENABLED(FAST_PWM_FAN) || SPINDLE_LASER_FREQUENCY
|
||||||
|
#error "Features requiring Hardware PWM (FAST_PWM_FAN, SPINDLE_LASER_FREQUENCY) are not yet supported on LINUX."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if HAS_TMC_SW_SERIAL
|
||||||
|
#error "TMC220x Software Serial is not supported on LINUX."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if ENABLED(POSTMORTEM_DEBUGGING)
|
||||||
|
#error "POSTMORTEM_DEBUGGING is not yet supported on LINUX."
|
||||||
|
#endif
|
61
Marlin/src/HAL/NATIVE_SIM/pinsDebug.h
Normal file
61
Marlin/src/HAL/NATIVE_SIM/pinsDebug.h
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
/**
|
||||||
|
* Marlin 3D Printer Firmware
|
||||||
|
* Copyright (c) 2021 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||||
|
*
|
||||||
|
* 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/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Support routines for X86_64
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Translation of routines & variables used by pinsDebug.h
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define NUMBER_PINS_TOTAL NUM_DIGITAL_PINS
|
||||||
|
#define pwm_details(pin) pin = pin // do nothing // print PWM details
|
||||||
|
#define pwm_status(pin) false //Print a pin's PWM status. Return true if it's currently a PWM pin.
|
||||||
|
#define IS_ANALOG(P) (DIGITAL_PIN_TO_ANALOG_PIN(P) >= 0 ? 1 : 0)
|
||||||
|
#define digitalRead_mod(p) digitalRead(p)
|
||||||
|
#define PRINT_PORT(p)
|
||||||
|
#define GET_ARRAY_PIN(p) pin_array[p].pin
|
||||||
|
#define PRINT_ARRAY_NAME(x) do{ sprintf_P(buffer, PSTR("%-" STRINGIFY(MAX_NAME_LENGTH) "s"), pin_array[x].name); SERIAL_ECHO(buffer); }while(0)
|
||||||
|
#define PRINT_PIN(p) do{ sprintf_P(buffer, PSTR("%3d "), p); SERIAL_ECHO(buffer); }while(0)
|
||||||
|
#define PRINT_PIN_ANALOG(p) do{ sprintf_P(buffer, PSTR(" (A%2d) "), DIGITAL_PIN_TO_ANALOG_PIN(pin)); SERIAL_ECHO(buffer); }while(0)
|
||||||
|
#define MULTI_NAME_PAD 16 // space needed to be pretty if not first name assigned to a pin
|
||||||
|
|
||||||
|
// active ADC function/mode/code values for PINSEL registers
|
||||||
|
inline constexpr int8_t ADC_pin_mode(pin_t pin) {
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline int8_t get_pin_mode(pin_t pin) {
|
||||||
|
if (!VALID_PIN(pin)) return -1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool GET_PINMODE(pin_t pin) {
|
||||||
|
int8_t pin_mode = get_pin_mode(pin);
|
||||||
|
if (pin_mode == -1 || pin_mode == ADC_pin_mode(pin)) // found an invalid pin or active analog pin
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return (Gpio::getMode(pin) != 0); //input/output state
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool GET_ARRAY_IS_DIGITAL(pin_t pin) {
|
||||||
|
return (!IS_ANALOG(pin) || get_pin_mode(pin) != ADC_pin_mode(pin));
|
||||||
|
}
|
80
Marlin/src/HAL/NATIVE_SIM/servo_private.h
Normal file
80
Marlin/src/HAL/NATIVE_SIM/servo_private.h
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
/**
|
||||||
|
* Marlin 3D Printer Firmware
|
||||||
|
* Copyright (c) 2021 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
|
||||||
|
|
||||||
|
/**
|
||||||
|
* servo.h - Interrupt driven Servo library for Arduino using 16 bit timers- Version 2
|
||||||
|
* Copyright (c) 2009 Michael Margolis. All right reserved.
|
||||||
|
*
|
||||||
|
* This library 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 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library 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 library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Based on "servo.h - Interrupt driven Servo library for Arduino using 16 bit timers -
|
||||||
|
* Version 2 Copyright (c) 2009 Michael Margolis. All right reserved.
|
||||||
|
*
|
||||||
|
* The only modification was to update/delete macros to match the LPC176x.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
// Macros
|
||||||
|
//values in microseconds
|
||||||
|
#define MIN_PULSE_WIDTH 544 // the shortest pulse sent to a servo
|
||||||
|
#define MAX_PULSE_WIDTH 2400 // the longest pulse sent to a servo
|
||||||
|
#define DEFAULT_PULSE_WIDTH 1500 // default pulse width when servo is attached
|
||||||
|
#define REFRESH_INTERVAL 20000 // minimum time to refresh servos in microseconds
|
||||||
|
|
||||||
|
#define MAX_SERVOS 4
|
||||||
|
|
||||||
|
#define INVALID_SERVO 255 // flag indicating an invalid servo index
|
||||||
|
|
||||||
|
|
||||||
|
// Types
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
uint8_t nbr : 8 ; // a pin number from 0 to 254 (255 signals invalid pin)
|
||||||
|
uint8_t isActive : 1 ; // true if this channel is enabled, pin not pulsed if false
|
||||||
|
} ServoPin_t;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
ServoPin_t Pin;
|
||||||
|
unsigned int pulse_width; // pulse width in microseconds
|
||||||
|
} ServoInfo_t;
|
||||||
|
|
||||||
|
// Global variables
|
||||||
|
|
||||||
|
extern uint8_t ServoCount;
|
||||||
|
extern ServoInfo_t servo_info[MAX_SERVOS];
|
55
Marlin/src/HAL/NATIVE_SIM/spi_pins.h
Normal file
55
Marlin/src/HAL/NATIVE_SIM/spi_pins.h
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
/**
|
||||||
|
* Marlin 3D Printer Firmware
|
||||||
|
* Copyright (c) 2021 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 "../../core/macros.h"
|
||||||
|
#include "../../inc/MarlinConfigPre.h"
|
||||||
|
|
||||||
|
#if BOTH(HAS_MARLINUI_U8GLIB, SDSUPPORT) && (LCD_PINS_D4 == SD_SCK_PIN || LCD_PINS_ENABLE == SD_MOSI_PIN || DOGLCD_SCK == SD_SCK_PIN || DOGLCD_MOSI == SD_MOSI_PIN)
|
||||||
|
#define LPC_SOFTWARE_SPI // If the SD card and LCD adapter share the same SPI pins, then software SPI is currently
|
||||||
|
// needed due to the speed and mode required for communicating with each device being different.
|
||||||
|
// This requirement can be removed if the SPI access to these devices is updated to use
|
||||||
|
// spiBeginTransaction.
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Onboard SD
|
||||||
|
//#define SD_SCK_PIN P0_07
|
||||||
|
//#define SD_MISO_PIN P0_08
|
||||||
|
//#define SD_MOSI_PIN P0_09
|
||||||
|
//#define SD_SS_PIN P0_06
|
||||||
|
|
||||||
|
// External SD
|
||||||
|
#ifndef SD_SCK_PIN
|
||||||
|
#define SD_SCK_PIN 50
|
||||||
|
#endif
|
||||||
|
#ifndef SD_MISO_PIN
|
||||||
|
#define SD_MISO_PIN 51
|
||||||
|
#endif
|
||||||
|
#ifndef SD_MOSI_PIN
|
||||||
|
#define SD_MOSI_PIN 52
|
||||||
|
#endif
|
||||||
|
#ifndef SD_SS_PIN
|
||||||
|
#define SD_SS_PIN 53
|
||||||
|
#endif
|
||||||
|
#ifndef SDSS
|
||||||
|
#define SDSS SD_SS_PIN
|
||||||
|
#endif
|
64
Marlin/src/HAL/NATIVE_SIM/tft/tft_spi.h
Normal file
64
Marlin/src/HAL/NATIVE_SIM/tft/tft_spi.h
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
/**
|
||||||
|
* Marlin 3D Printer Firmware
|
||||||
|
* Copyright (c) 2021 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"
|
||||||
|
|
||||||
|
#ifndef LCD_READ_ID
|
||||||
|
#define LCD_READ_ID 0x04 // Read display identification information (0xD3 on ILI9341)
|
||||||
|
#endif
|
||||||
|
#ifndef LCD_READ_ID4
|
||||||
|
#define LCD_READ_ID4 0xD3 // Read display identification information (0xD3 on ILI9341)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define DATASIZE_8BIT 8
|
||||||
|
#define DATASIZE_16BIT 16
|
||||||
|
#define TFT_IO_DRIVER TFT_SPI
|
||||||
|
|
||||||
|
#define DMA_MINC_ENABLE 1
|
||||||
|
#define DMA_MINC_DISABLE 0
|
||||||
|
|
||||||
|
class TFT_SPI {
|
||||||
|
private:
|
||||||
|
static uint32_t ReadID(uint16_t Reg);
|
||||||
|
static void Transmit(uint16_t Data);
|
||||||
|
static void TransmitDMA(uint32_t MemoryIncrease, uint16_t *Data, uint16_t Count);
|
||||||
|
|
||||||
|
public:
|
||||||
|
// static SPIClass SPIx;
|
||||||
|
|
||||||
|
static void Init();
|
||||||
|
static uint32_t GetID();
|
||||||
|
static bool isBusy();
|
||||||
|
static void Abort();
|
||||||
|
|
||||||
|
static void DataTransferBegin(uint16_t DataWidth = DATASIZE_16BIT);
|
||||||
|
static void DataTransferEnd();
|
||||||
|
static void DataTransferAbort();
|
||||||
|
|
||||||
|
static void WriteData(uint16_t Data);
|
||||||
|
static void WriteReg(uint16_t Reg);
|
||||||
|
|
||||||
|
static void WriteSequence(uint16_t *Data, uint16_t Count);
|
||||||
|
// static void WriteMultiple(uint16_t Color, uint16_t Count);
|
||||||
|
static void WriteMultiple(uint16_t Color, uint32_t Count);
|
||||||
|
};
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user