Compare commits
1005 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| e9dda85ddd | |||
| beea1f1d14 | |||
| a9072b00e8 | |||
| 4e41ff32e1 | |||
| cf137cb73a | |||
| d5cc11d996 | |||
| a530446b62 | |||
| d62a631467 | |||
| d6c3f45bda | |||
| 81760d6818 | |||
| 282f90c1b3 | |||
| 5de9fc556f | |||
| 3482e9632c | |||
| a6493e0cc8 | |||
| a08a7b3459 | |||
| bd4936330b | |||
| 4bb33a0cb9 | |||
| 83e38b3625 | |||
| 5b7bb3ea64 | |||
| f0b115a999 | |||
| cebed347f5 | |||
| a66b22c4f1 | |||
| fadaa2db09 | |||
| f8954ca79b | |||
| 4a3f69ad6d | |||
| 4bf13bea42 | |||
| 3a6bd6920e | |||
| 70ef7978b4 | |||
| 37bc552f3b | |||
| e310f20279 | |||
| 4708635f4f | |||
| f5d5b0a881 | |||
| 30f5dd339d | |||
| 556d716919 | |||
| 76afd5afc1 | |||
| 5c3bc2194a | |||
| 763cd7c5f2 | |||
| 11046b23a9 | |||
| 36b72926f3 | |||
| b35e16b1d8 | |||
| 767c87810b | |||
| 52b6c45451 | |||
| df5d08aec0 | |||
| 8c61606691 | |||
| e70bd3c785 | |||
| 83cc983276 | |||
| bbb8275d66 | |||
| 2afc2f268a | |||
| aa44542f76 | |||
| 248648708f | |||
| e2c0150fa8 | |||
| 4ef5372151 | |||
| a923771611 | |||
| 74ffa0cc3e | |||
| f2d585ac7f | |||
| 80cfdb182c | |||
| 39463268fb | |||
| a7b3989bca | |||
| 829212d76a | |||
| 0de4a70203 | |||
| febfb3218e | |||
| 4da46c5dd2 | |||
| 353ede8208 | |||
| 09de5e76a7 | |||
| 73b6ba8fe3 | |||
| 72b09fe4cb | |||
| e5ad13a8e2 | |||
| b122e46adb | |||
| 1a5866f5c6 | |||
| c7e62b33d1 | |||
| 1916d4e27f | |||
| ce55a7bd9b | |||
| 540120f863 | |||
| b99a26d6ab | |||
| 6528109176 | |||
| b94a0d036c | |||
| 7634ffe8e5 | |||
| 8bae8bbf7a | |||
| 5ce013f414 | |||
| da4a374b49 | |||
| 81b13456b1 | |||
| ee35fb07b0 | |||
| 99c991755a | |||
| a96ae85d88 | |||
| 45b9680c57 | |||
| 83cbed8527 | |||
| d36d9cb506 | |||
| 9e6981ea60 | |||
| 2c6f8a30f3 | |||
| 17a5a1f97d | |||
| a0815deb9a | |||
| 76a7ab6893 | |||
| 7cd56a57f9 | |||
| 56e2b60e6d | |||
| 8c15a093fd | |||
| 7901eb97ad | |||
| 7aaba66d4d | |||
| 5f0b9d429f | |||
| d34b62eafa | |||
| 3743980192 | |||
| 41d53a15f2 | |||
| f234fbf87f | |||
| 5c728d1fb1 | |||
| 162ea81894 | |||
| 97b9fe83ee | |||
| 9953230550 | |||
| 80bd10025b | |||
| 0876bcd027 | |||
| 3d7ac162fb | |||
| 68a2459808 | |||
| 21fddc1cc8 | |||
| 528a1ad3e0 | |||
| dabe374983 | |||
| 8ac0f14796 | |||
| 934fc52d06 | |||
| cf46d1880c | |||
| 4f159a94cd | |||
| b53e14c7f8 | |||
| 94e9f26544 | |||
| 9e87af70b7 | |||
| fe56f5d3a6 | |||
| 90e5826256 | |||
| bb73c335a5 | |||
| 4c1f76567c | |||
| d193c814d3 | |||
| 2cb252da4a | |||
| 9a04c32f7f | |||
| 3b8e9fdd25 | |||
| e0b045da49 | |||
| 4220491a23 | |||
| 3abe1fcf20 | |||
| 02ed020f3f | |||
| 934ac24ad8 | |||
| e2d8b2fc26 | |||
| 3e8483d389 | |||
| a9c529f004 | |||
| a664587219 | |||
| 1619838592 | |||
| 98a33d37c7 | |||
| 12a2e5ae1b | |||
| 9b472a02e9 | |||
| c84bea7110 | |||
| 20f71fafa7 | |||
| 056e5a430e | |||
| 21a604407d | |||
| deb076b9cd | |||
| b8e2ad9d8f | |||
| 0cd9643957 | |||
| 8c78315f71 | |||
| 35dad3fdfe | |||
| bebf5dc6ab | |||
| 2fd1c48e1a | |||
| 301727defc | |||
| 1afd53a933 | |||
| 381aeb94c6 | |||
| 4a36520820 | |||
| 430eedf5c0 | |||
| 793a851d10 | |||
| 2d609487ac | |||
| 295f50379f | |||
| ecfff5099a | |||
| 986344640f | |||
| 69f69606e6 | |||
| 2aa2e5487a | |||
| 23d9020a65 | |||
| 43d9d1ce1b | |||
| ed7f3b21c0 | |||
| b062a3b226 | |||
| 89b0143b09 | |||
| 0790a9d5df | |||
| e05ac66561 | |||
| 3b33f7ec03 | |||
| b94c75bcda | |||
| 8dc8906d78 | |||
| ab684dc484 | |||
| 37fb26b557 | |||
| 7397e5a41d | |||
| 4a9d380117 | |||
| 0ec1a54309 | |||
| ab6e68c312 | |||
| c509603530 | |||
| e5ce65c32b | |||
| 851257c44b | |||
| 1662e953fc | |||
| dde89795c9 | |||
| 6e69ff93ef | |||
| 01b7d6c413 | |||
| 58398832a1 | |||
| 29469a0615 | |||
| b4dd20c0eb | |||
| eab13752dd | |||
| ad60cdd030 | |||
| 78e111a4d0 | |||
| 5558729562 | |||
| 2d32f7c377 | |||
| bcbdac6f6c | |||
| acc8bf1c79 | |||
| 4f107e9fee | |||
| 7844f3fa4f | |||
| 2f3af438ee | |||
| 4483aa5b45 | |||
| 20e6b6315e | |||
| ca4248bdd5 | |||
| 4a5d8ba87e | |||
| 7a5d849857 | |||
| 95c23e55a4 | |||
| 94ce0d24d6 | |||
| cdea1b8460 | |||
| cc122bec82 | |||
| 6afaf0034c | |||
| 7f0d7e760b | |||
| 69004322f6 | |||
| 7441094a41 | |||
| 29a5006df9 | |||
| 1aca038daf | |||
| ce92eb46ec | |||
| c852e9c6a1 | |||
| 2b8db0c2e2 | |||
| 74f297c871 | |||
| 76411392b7 | |||
| 74c81117c3 | |||
| 6f04d8dc77 | |||
| ade05c045e | |||
| 5140726c70 | |||
| 5334a8f0ed | |||
| ee99eed3bf | |||
| 9a5f1d2f51 | |||
| 170df9040b | |||
| f0bc4274f8 | |||
| 20a704b154 | |||
| 30a70c480c | |||
| 1d5e9c7dee | |||
| b8ab2d4987 | |||
| ce796cec97 | |||
| ad4de747ad | |||
| 95c1b7fb31 | |||
| 29b742cfc4 | |||
| 57bda2ff3b | |||
| 228179e09b | |||
| c961f3ab2b | |||
| 3469cb9d24 | |||
| 6c09b83f30 | |||
| 17a1363f4d | |||
| 115350317c | |||
| 44c2682168 | |||
| 8b81aae870 | |||
| 72a2699b10 | |||
| b7c07f1329 | |||
| 2b9a62093a | |||
| 3385b4c280 | |||
| 7c1f82cd96 | |||
| 9ebfdc4a86 | |||
| 586313c2fb | |||
| 571783fc04 | |||
| 4af5229cee | |||
| e0dcc610da | |||
| 4aff10785e | |||
| d0e110d666 | |||
| 10ffb9cb68 | |||
| b303bb1e56 | |||
| e6a61b182f | |||
| 785b1da021 | |||
| a4d20031ec | |||
| 3c60145792 | |||
| f2940adcf1 | |||
| b5b9cc0b79 | |||
| 1d1eb97567 | |||
| 0103cffcd0 | |||
| 6fed66dd42 | |||
| c81416438d | |||
| c95825a0ff | |||
| b6284c9f01 | |||
| f84a97f51c | |||
| 563296fc8b | |||
| 13290e798b | |||
| 96e3dfed46 | |||
| cb6fd130ba | |||
| 11f90de873 | |||
| 9240ec89d0 | |||
| 8cf2a41f81 | |||
| 1f9fc665ec | |||
| bf1995140a | |||
| 7b21cd5d72 | |||
| 37fc32d972 | |||
| 9a6d4b5e56 | |||
| 1e0719dac5 | |||
| f2248f79d3 | |||
| 60d843b540 | |||
| 6d7d281559 | |||
| b3d462b890 | |||
| a7444021c6 | |||
| a93acbd35c | |||
| d978123289 | |||
| ee8dada752 | |||
| 7bc6261d2a | |||
| 013c3bcd82 | |||
| 2fc86ad836 | |||
| 082dc24865 | |||
| d7b6acc03d | |||
| a1dc2856de | |||
| 959be66cc2 | |||
| ae2843940f | |||
| 611ceedc1d | |||
| 38298076d6 | |||
| 1f0b8d6cd8 | |||
| e0d683baed | |||
| f4f75b6b12 | |||
| fb6dc90a85 | |||
| b99391c810 | |||
| d9fc4f3a99 | |||
| daeffbc944 | |||
| 87dde46fb0 | |||
| d96c6f867d | |||
| 1f2e6d5434 | |||
| 232b989d50 | |||
| d38261c908 | |||
| 3075bc3b7b | |||
| 842d0b1c9f | |||
| 042b238dd8 | |||
| c30904b631 | |||
| 225a71f4cd | |||
| 1d29a56344 | |||
| 320e00267d | |||
| 9869629b67 | |||
| 3da78e85bf | |||
| 11a4314261 | |||
| 65c19f82b9 | |||
| 0169cde8a4 | |||
| ab0173b7e6 | |||
| 95f81d2565 | |||
| 9c922f0eab | |||
| 35a03d66e5 | |||
| a4a0887fa7 | |||
| e7c9cf3e1d | |||
| 6710616a09 | |||
| 2064c83c66 | |||
| 2e97ad1f4b | |||
| 4f85f88ae3 | |||
| 181a57ae9b | |||
| 3ee1248cf2 | |||
| 68c3916d46 | |||
| e3bbacd8b9 | |||
| f915371248 | |||
| ea848aa891 | |||
| 5157849c60 | |||
| ca31f9789e | |||
| 78d3cf1de1 | |||
| 521e7eafce | |||
| 2d78a80cf6 | |||
| 5f32698da5 | |||
| 1845056014 | |||
| 0b8ec2aa74 | |||
| 578bdd4b20 | |||
| 6b6865d068 | |||
| 6c018eb770 | |||
| 5561bafbe6 | |||
| 75eee04972 | |||
| ee1d1faa52 | |||
| dbd3e10959 | |||
| fde330af5a | |||
| e8d953257e | |||
| cc86e9ecce | |||
| 5a6db519d6 | |||
| 98d09e5304 | |||
| d87a0ea7f7 | |||
| 0e2bd069d4 | |||
| feca9a33d5 | |||
| eec1aec071 | |||
| a97d1088f0 | |||
| a7317de3b4 | |||
| 06762db050 | |||
| 4f3ebea3a6 | |||
| fa88e0f054 | |||
| 2fd7c2b865 | |||
| ef0bd975cf | |||
| bdc14ddbd7 | |||
| 383e6f4646 | |||
| e37415c95b | |||
| a33112a4c0 | |||
| 7e8007f024 | |||
| f320c2a455 | |||
| 6eedeaedaf | |||
| 6b5e19cfc4 | |||
| 3dc437add4 | |||
| 5f96dffb9b | |||
| 6423b8031d | |||
| bbdad79ce5 | |||
| a2daee8f7a | |||
| 909e3ad116 | |||
| 556616c4f0 | |||
| 46e426ce96 | |||
| f5f6c37c17 | |||
| 08fe8a3076 | |||
| dabcea991f | |||
| 4a5bd47b6a | |||
| e5742a98df | |||
| 774cecc3b4 | |||
| 83b7e32ec4 | |||
| a22155bd96 | |||
| 1da947f548 | |||
| a3960dfa53 | |||
| bab1917311 | |||
| 49348716f5 | |||
| eb781afe7b | |||
| 39f53c3f8c | |||
| b5307aaaad | |||
| f5cf667c95 | |||
| 737095f852 | |||
| f56952c9e6 | |||
| ca5a7be5e8 | |||
| 582c5a36d7 | |||
| a8058729cc | |||
| a2f024ffe3 | |||
| e1d65cc5e0 | |||
| 75cda8d191 | |||
| af8dcc6ee8 | |||
| 2270bf41d7 | |||
| 489ef6e5e1 | |||
| cecc745844 | |||
| 5366362e47 | |||
| a1ecea60fd | |||
| 882421a03e | |||
| a36f72e886 | |||
| 247e989377 | |||
| 91ae676b9b | |||
| a955e06259 | |||
| 31683ce35b | |||
| d773570cd6 | |||
| 556da2b3fc | |||
| 9e19a6efe1 | |||
| f433b2c433 | |||
| bc0d7d7140 | |||
| 24f8831021 | |||
| 9a8fb80eed | |||
| ca12459b9c | |||
| e1ab911c35 | |||
| 58d4494365 | |||
| d502e5beaa | |||
| b4a95db7da | |||
| 02ba6f9f3a | |||
| dba0010607 | |||
| 90667f6114 | |||
| d6961b2626 | |||
| 07ebb8171f | |||
| 245db73929 | |||
| 9342dae8f0 | |||
| 1f84f50fd8 | |||
| 3326c749f8 | |||
| 0269106066 | |||
| 95d38a8e54 | |||
| dca6afc26e | |||
| 19684f23bc | |||
| 52a561399e | |||
| 0683e8a9a3 | |||
| 1bb4a042e2 | |||
| d10861e478 | |||
| cf7c86d581 | |||
| d99e150097 | |||
| 9e88eb6100 | |||
| 71d9a3e1df | |||
| 6575dcc803 | |||
| 2715e5ba1b | |||
| 9a570b23a3 | |||
| 1b091ecb87 | |||
| a75a5f8b2a | |||
| 80dd02fbdb | |||
| e6755450df | |||
| 9215bf791b | |||
| 311bfc99f3 | |||
| a3434de2e6 | |||
| 2bf56b00d4 | |||
| c31d9e717b | |||
| d9d7820b0d | |||
| 9343247e07 | |||
| 351a1a1332 | |||
| 7e9868d762 | |||
| d1cf817660 | |||
| c91771a51e | |||
| a337a43bfd | |||
| 77f93e0b8c | |||
| 7dc7195696 | |||
| 56773bd80e | |||
| 1dec9831d3 | |||
| 390f1f7c69 | |||
| d30fcb8fff | |||
| 17dfe8edc9 | |||
| 7b6b6e1c3e | |||
| 60f2837a98 | |||
| ef5fb390ec | |||
| 87e94f4563 | |||
| 017a9032f1 | |||
| 466282f322 | |||
| 17594298e1 | |||
| 0b9f487ab9 | |||
| d3e1a92b84 | |||
| cd357b0278 | |||
| d0d229e380 | |||
| eb897e65a1 | |||
| 825ebfd5fe | |||
| 3ee3964bec | |||
| aecfb257e9 | |||
| 896a6a93af | |||
| 075f96d2bf | |||
| 05896551f1 | |||
| ea6a891038 | |||
| 983aee5718 | |||
| c913020dc2 | |||
| a50490b11f | |||
| 4b01c901bc | |||
| c1be36bc66 | |||
| e0222d3e01 | |||
| c0264ae787 | |||
| 3a2c50c199 | |||
| 3b4adac579 | |||
| d36b3fbf9d | |||
| bca40e07e3 | |||
| 9a1c993719 | |||
| 504219817c | |||
| 4f2b7271bd | |||
| ec6f9dd5c8 | |||
| e6cda9932b | |||
| b9cfbaa8d4 | |||
| 3fd175af8e | |||
| a9e72b2a2c | |||
| ecde3a3158 | |||
| c8d51c2723 | |||
| d609bb4671 | |||
| 982b425792 | |||
| 9e879a5b1f | |||
| 9974327d33 | |||
| 4eba643ae1 | |||
| 8d7be79108 | |||
| 76b5688304 | |||
| 1e8fbb7bbb | |||
| 20c6a6233b | |||
| 1d295f7983 | |||
| 669814d0d4 | |||
| 4aa48beb37 | |||
| 371fb5a256 | |||
| 0829a511f0 | |||
| a3c78c4510 | |||
| a3211253a0 | |||
| 2c8e7bd5a5 | |||
| 005d6879d9 | |||
| 3dd22349a9 | |||
| e61a84a717 | |||
| d8e73d3036 | |||
| b12340b1d5 | |||
| ec46a59539 | |||
| 5003681414 | |||
| d9396929aa | |||
| 1dee4d92c6 | |||
| 9364cbb4b5 | |||
| 755b661c2d | |||
| 7f4792e47c | |||
| e6837b2b8d | |||
| 9e21330d7a | |||
| c476e62a6f | |||
| 4c5d7831c1 | |||
| 9a5cfb3f26 | |||
| 5a87bea762 | |||
| d62f45bdc1 | |||
| f9d5ee04b4 | |||
| ef04680cc5 | |||
| 1c6cfc3ffe | |||
| 0266e7fe53 | |||
| 610ea0a9d3 | |||
| 70d942a184 | |||
| 5639237e2b | |||
| 541bd26cd7 | |||
| 7a4d601f4d | |||
| bf8675b44a | |||
| ebea672240 | |||
| ce8535f01c | |||
| 0ba4cd2b3b | |||
| afc2dd6cab | |||
| 5768b42c39 | |||
| ee8630c282 | |||
| 01094ea6aa | |||
| 6c1fd1f69c | |||
| 4f65466161 | |||
| 9b3119393f | |||
| 8594e9462c | |||
| 16acb57b22 | |||
| 04c8a3138e | |||
| 38560378fc | |||
| ffbf4a6a90 | |||
| a215bc2ca3 | |||
| cbc674ff99 | |||
| 97546bf55b | |||
| ed1391ee5d | |||
| 7fbd9ec5f4 | |||
| 63989023b8 | |||
| e668d5afd7 | |||
| a2228276bb | |||
| 3ef192e7c7 | |||
| 5fea79fd07 | |||
| 18e65f5eb4 | |||
| 5ed6bf65ba | |||
| d79bcef802 | |||
| f1a53407e7 | |||
| 4309e6ab76 | |||
| 0c3d1cf566 | |||
| aa7d571486 | |||
| 604d3e8fad | |||
| 22fc07d72b | |||
| dd3b5a10a0 | |||
| 416f94f03a | |||
| 204de723f1 | |||
| 80cd89d8f7 | |||
| 624226c91d | |||
| 3adf73a2cd | |||
| eb7b207e4c | |||
| d7e45367af | |||
| 388c7018c4 | |||
| da96607b65 | |||
| fb49645b32 | |||
| 7d751a20b1 | |||
| 9f7d5bbc86 | |||
| 0df25b1008 | |||
| cef623b7d2 | |||
| 12434e78e4 | |||
| 2200607989 | |||
| c31381183b | |||
| 76dce41580 | |||
| 1f1ca34ea6 | |||
| 8d4ab15748 | |||
| 745577693d | |||
| 3019af1c93 | |||
| 8916e6f826 | |||
| b2fd631d82 | |||
| cadef64418 | |||
| ab3497161a | |||
| 46f370ae3c | |||
| 0f43ac79f6 | |||
| ef92b6c369 | |||
| f44f9eb9f8 | |||
| 854f3315af | |||
| 1d46e67de2 | |||
| 85ded0b9bd | |||
| cb291e8d00 | |||
| 25caae1e8c | |||
| 12d7995a18 | |||
| 320b7a9ac3 | |||
| a533e9e637 | |||
| f6ecdae972 | |||
| 477b70eccf | |||
| b2dd2dc217 | |||
| b106f59eb4 | |||
| 38f483c4a6 | |||
| f4eafed188 | |||
| 5987a5464b | |||
| 3a888e956b | |||
| 4cddc61eda | |||
| 2a8c00bdeb | |||
| 4ae2a76492 | |||
| a5d097abe6 | |||
| 5e0a8d2124 | |||
| 994aa9f692 | |||
| 6e67ad51b7 | |||
| 52693f72af | |||
| 991f433ac1 | |||
| 54b7da18cb | |||
| f8771e9ad5 | |||
| be1dee7caf | |||
| 68b7802fc1 | |||
| 6d407767e7 | |||
| 4a9e102c2e | |||
| 1ac6428c82 | |||
| 7c159a20e5 | |||
| 5b74e25108 | |||
| f02fa6339f | |||
| 3b6f1bff8b | |||
| 1d615717e8 | |||
| 99c570212d | |||
| 13e82fa44a | |||
| 95878df30d | |||
| 5d1ede08aa | |||
| 2203505182 | |||
| 06dc7f4f52 | |||
| e6f1b074df | |||
| f605c045e3 | |||
| 2d97f082e5 | |||
| ba91fa09b7 | |||
| 1aeee2cd1f | |||
| 4e23e52a89 | |||
| 88cf3cb1e0 | |||
| 59d26e463a | |||
| cc641d796d | |||
| 9d324f7b1f | |||
| 654e7a84ff | |||
| d903a5ef43 | |||
| 15f26b4021 | |||
| 10d80eb894 | |||
| 858954baad | |||
| 3840663410 | |||
| bd36644d85 | |||
| c485f513d7 | |||
| 06b9e40042 | |||
| 7603023928 | |||
| dbf81f40de | |||
| bb557e5195 | |||
| 89fdfcfaf9 | |||
| d9a388bab8 | |||
| b44e68e2ab | |||
| 0f09554929 | |||
| 18b0dbb501 | |||
| fa8d2bd108 | |||
| d1ebaba71d | |||
| 71e0275a4c | |||
| 205b0a679e | |||
| 3029a6b1aa | |||
| 342048b1df | |||
| ec060f979f | |||
| 56ac5d03ed | |||
| ec7ab5a277 | |||
| 2c5468ce33 | |||
| dbdb2ecdf7 | |||
| c18294d83c | |||
| 401ba6613b | |||
| 19617b79db | |||
| eeacf76cfd | |||
| 738584d342 | |||
| f69effd2eb | |||
| 67d7562609 | |||
| 0ede16cd5a | |||
| 4a89ef6273 | |||
| 145ab7b1ec | |||
| 3f9c2f89fc | |||
| 00298e6681 | |||
| 68ab7f6bb7 | |||
| 7ab63cde62 | |||
| b90133813a | |||
| 75da3555ee | |||
| 8bce9dec90 | |||
| fef74398e4 | |||
| 775c6bb20e | |||
| 06710e54de | |||
| 81cfa23882 | |||
| f3fd9e28f5 | |||
| b94a335493 | |||
| 01aa87c307 | |||
| 473817f2f4 | |||
| a1c3a2b03a | |||
| bdfe4a108c | |||
| 10fe229aad | |||
| dfec58e5dc | |||
| 6c04cf40f4 | |||
| fe7203ee55 | |||
| 483b8dcc05 | |||
| a41e16ffee | |||
| 425af4240b | |||
| 4a4c1db606 | |||
| 2b1375c8ea | |||
| 065440891b | |||
| d58168a03f | |||
| 8cf936ccb1 | |||
| d5d45e85e4 | |||
| 0d4f41fb6d | |||
| 1c1c473910 | |||
| dde878db04 | |||
| 1a42c38e0e | |||
| e695c473af | |||
| bd6eb83250 | |||
| c484228c56 | |||
| f265fb5943 | |||
| b17d3d3e9c | |||
| c53844ff91 | |||
| e393c7fa0e | |||
| b55678a7d0 | |||
| fe8266b591 | |||
| 3d8e3c3c9a | |||
| 61349dc6d3 | |||
| 95821b07b1 | |||
| d62ee95d28 | |||
| b962014087 | |||
| 921198e81c | |||
| 3457952854 | |||
| f4228cc4c1 | |||
| dabcd65903 | |||
| 8fa4f5a40f | |||
| b95aa36b01 | |||
| 7a96a082b7 | |||
| b78f0012e9 | |||
| e958b6da9e | |||
| 86338ca835 | |||
| 8a110b80bf | |||
| 9a12f06f19 | |||
| 7d334775d0 | |||
| 0a86a5f39c | |||
| e7cf0e12ea | |||
| e41df97c42 | |||
| 20a26d5053 | |||
| 924d7769ec | |||
| 8ff937c7d8 | |||
| ae695e8309 | |||
| e98e307d17 | |||
| bd872a7a98 | |||
| fd3de02a37 | |||
| 1bee537a09 | |||
| ded942a4e4 | |||
| bf61e52390 | |||
| 2d9262cc5a | |||
| 993cc9463e | |||
| c2376d62e2 | |||
| f3473495d0 | |||
| c5b267162c | |||
| 8322848c35 | |||
| 61cb98dc0f | |||
| 2b1666fcb0 | |||
| 6ae2cde663 | |||
| cc8f7c83da | |||
| 20445b8e83 | |||
| 12881d5576 | |||
| b88cb86069 | |||
| 3d3be15665 | |||
| 0142783836 | |||
| 006768ab58 | |||
| 376673df28 | |||
| f830756356 | |||
| 1fceb7c580 | |||
| 5287cfbb59 | |||
| f345f60f73 | |||
| e2c8015199 | |||
| aed577271f | |||
| f50ca52c57 | |||
| 36e66bdd9f | |||
| 19869d3a7d | |||
| c8118c3a58 | |||
| 7fe07dc4ce | |||
| 3e8a5b6151 | |||
| 28bc19720a | |||
| a8cb89b3da | |||
| df2251e23e | |||
| 31154278b3 | |||
| 613b4105a2 | |||
| 10e06e1970 | |||
| c751dcfcf9 | |||
| 178938d957 | |||
| a8313c3b7e | |||
| dc26531207 | |||
| c74e6ad868 | |||
| a62eec4ae3 | |||
| 235ad4dd9d | |||
| d06923d0e7 | |||
| 7f59b65fc8 | |||
| 884a3249fe | |||
| d159ec5c90 | |||
| 7c43f4e696 | |||
| 7c8ea8e0e0 | |||
| 573eae8d95 | |||
| bf0acc9611 | |||
| ddc310fc4b | |||
| 10782c770d | |||
| b2758208c7 | |||
| bf5612c0ed | |||
| 9a6c2635ee | |||
| 3341683db2 | |||
| 0bdbf52bc6 | |||
| e4e85e39b3 | |||
| 0621594442 | |||
| dba613fadd | |||
| 5ac4ebad78 | |||
| cb044d989c | |||
| 0d42196d11 | |||
| cac742009c | |||
| 76f938309e | |||
| 24cf29b6a8 | |||
| 41a6f2bc8d | |||
| e0767f8675 | |||
| 5523c12cfd | |||
| a6c8afc5a9 | |||
| cb8df74a9c | |||
| 050439ccba | |||
| 6907df0bd6 | |||
| 5a259a7266 | |||
| b082f1a2b8 | |||
| c666b492c4 | |||
| aa0671fb32 | |||
| f82d0109e4 | |||
| 2a88e76002 | |||
| b25f523aca | |||
| 046439a5a1 | |||
| bcd07c2c91 | |||
| e9b04ada1d | |||
| ff5eb5de29 | |||
| fd62c42faa | |||
| 089d075c8f | |||
| 45a6e9614e | |||
| 9e6d0ea610 | |||
| c345087b41 | |||
| 8de007021a | |||
| f72588595b | |||
| 797ea5efa7 | |||
| 156e7c1c54 | |||
| b8b1aa345c | |||
| b0ece8f8df | |||
| 4b0b00c8da | |||
| 6d3122d4e8 | |||
| 0f27e38eb9 | |||
| 6156050024 | |||
| cacbe005b5 | |||
| caca5636ce | |||
| 6a35ab6557 | |||
| 87de4c134b | |||
| 7944628400 | |||
| 251a84b741 | |||
| d695e5f7bc | |||
| 4744997c16 | |||
| 5bd39ba73f | |||
| 7f887f2342 | |||
| e7e77d9612 | |||
| a7a3abb9bf | |||
| 6f68da5be4 | |||
| e9b9d634c4 | |||
| 6d301a282e | |||
| 61591fd233 | |||
| e97d82f77b | |||
| b58d5dabf8 | |||
| 047bce0cdd | |||
| c81e217334 | |||
| 9cd341c2c3 | |||
| f0ad1e9b70 | |||
| 414b1f8327 | |||
| e68320ee2b | |||
| 7fa643a11e | |||
| 375e724dee | |||
| 6c0f4bbafd | |||
| 4cab75115f | |||
| 014609ad87 | |||
| f7a3172c20 | |||
| b799f7d1f3 | |||
| f3851408fe | |||
| 03cf2b577b | |||
| b3b6f23320 | |||
| 821ba43131 | |||
| 31bf73b89b | |||
| 229ea71421 | |||
| f085e2ca93 | |||
| db98f06110 | |||
| bbb5aacc48 | |||
| 91ab18d1d2 | |||
| 273cbc6871 | |||
| 596d1ff104 | |||
| 896492442c | |||
| b9e58cd3ea | |||
| d961dbae8d | |||
| be031e1850 | |||
| 15dfbabc9c | |||
| 102de7dac3 | |||
| 7338a2fec8 | |||
| d56136f06c | |||
| 34a0c9d143 | |||
| 11f98adcce | |||
| 209fadd2e6 | |||
| 8fa6a4da2e | |||
| 4613f85bb7 | |||
| e1121a4cd0 | |||
| 20fec98f70 | |||
| adfc787a45 | |||
| 86be9a85d0 | |||
| f6de698fc8 | |||
| edc7379546 | |||
| ab8af7fa9c | |||
| fb74caebb5 | |||
| 88cdf487b4 | |||
| be91eaed2c | |||
| b5a08c2518 | |||
| b02ea02dbb | |||
| d69ce77503 | |||
| d1803ec044 | |||
| f2665e597f | |||
| db5ead4230 | |||
| f7d5188b2f | |||
| 1d17c34e12 | |||
| 49ead19d00 | |||
| 7e7dcb8692 | |||
| cf50240e82 | |||
| 79f6d9bdac | |||
| 6af6060aa0 | |||
| 2bac7835e8 | |||
| fd41757aef | |||
| f338f65bdf | |||
| 867f5e9069 | |||
| 88f5e2c639 | |||
| ca0209b868 | |||
| 4f691e622f | |||
| fecadaca82 | |||
| 709def5e7b | |||
| a5e4b4bd7d | |||
| a817794444 | |||
| ffef8f1b29 | |||
| 205a679959 | |||
| b956001d81 | |||
| 1dd3c9e73f | |||
| 8d74a63e4b | |||
| 27fd97a8bb | |||
| 4d89db5209 | |||
| f66323ecfb | |||
| 863198a73f | |||
| ad112b4d3d | |||
| c088081c00 | |||
| 06d46a0ef9 | |||
| 27e68a61fa | |||
| 4e31fa66e2 |
+8
-2
@@ -1,12 +1,14 @@
|
|||||||
# editorconfig.org
|
# editorconfig.org
|
||||||
root = true
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
insert_final_newline = true
|
||||||
|
|
||||||
[{*.patch,syntax_test_*}]
|
[{*.patch,syntax_test_*}]
|
||||||
trim_trailing_whitespace = false
|
trim_trailing_whitespace = false
|
||||||
|
|
||||||
[{*.c,*.cpp,*.h,*.ino,*.py,Makefile}]
|
[{*.c,*.cpp,*.h,*.ino,*.py,Makefile}]
|
||||||
trim_trailing_whitespace = true
|
|
||||||
insert_final_newline = true
|
|
||||||
end_of_line = lf
|
end_of_line = lf
|
||||||
|
|
||||||
[{*.c,*.cpp,*.h,*.ino}]
|
[{*.c,*.cpp,*.h,*.ino}]
|
||||||
@@ -18,6 +20,10 @@ indent_size = 2
|
|||||||
indent_style = tab
|
indent_style = tab
|
||||||
indent_size = 2
|
indent_size = 2
|
||||||
|
|
||||||
|
[*.md]
|
||||||
|
# Two spaces at the end of the line means newline in Markdown
|
||||||
|
trim_trailing_whitespace = false
|
||||||
|
|
||||||
[{*.py}]
|
[{*.py}]
|
||||||
indent_style = space
|
indent_style = space
|
||||||
indent_size = 4
|
indent_size = 4
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
name: 🪲 Report a bug
|
name: 🪲 Report a bug
|
||||||
description: Create a bug report to help improve Marlin Firmware
|
description: Create a bug report to help improve Marlin Firmware
|
||||||
title: "[BUG] (bug summary)"
|
title: "[BUG] (bug summary)"
|
||||||
|
labels: ["Bug: Potential ?"]
|
||||||
body:
|
body:
|
||||||
- type: markdown
|
- type: markdown
|
||||||
attributes:
|
attributes:
|
||||||
@@ -109,8 +110,13 @@ body:
|
|||||||
|
|
||||||
- type: input
|
- type: input
|
||||||
attributes:
|
attributes:
|
||||||
label: Add-ons
|
label: LCD/Controller
|
||||||
description: Please list any hardware add-ons that could be involved.
|
description: Some Marlin behaviors are determined by the controller. Describe your LCD/Controller model and version.
|
||||||
|
|
||||||
|
- type: input
|
||||||
|
attributes:
|
||||||
|
label: Other add-ons
|
||||||
|
description: Please list any other hardware add-ons that could be involved.
|
||||||
|
|
||||||
- type: dropdown
|
- type: dropdown
|
||||||
attributes:
|
attributes:
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ contact_links:
|
|||||||
url: https://www.facebook.com/groups/1049718498464482
|
url: https://www.facebook.com/groups/1049718498464482
|
||||||
about: Please ask and answer questions here.
|
about: Please ask and answer questions here.
|
||||||
- name: 🕹 Marlin on Discord
|
- name: 🕹 Marlin on Discord
|
||||||
url: https://discord.gg/n5NJ59y
|
url: https://discord.com/servers/marlin-firmware-461605380783472640
|
||||||
about: Join the Discord server for support and discussion.
|
about: Join the Discord server for support and discussion.
|
||||||
- name: 🔗 Marlin Discussion Forum
|
- name: 🔗 Marlin Discussion Forum
|
||||||
url: https://reprap.org/forum/list.php?415
|
url: https://reprap.org/forum/list.php?415
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
name: ✨ Request a feature
|
name: ✨ Request a feature
|
||||||
description: Request a new Marlin Firmware feature
|
description: Request a new Marlin Firmware feature
|
||||||
title: "[FR] (feature summary)"
|
title: "[FR] (feature summary)"
|
||||||
labels: 'T: Feature Request'
|
labels: ["T: Feature Request"]
|
||||||
body:
|
body:
|
||||||
- type: markdown
|
- type: markdown
|
||||||
attributes:
|
attributes:
|
||||||
|
|||||||
@@ -28,15 +28,9 @@ Project maintainers are responsible for clarifying the standards of acceptable b
|
|||||||
|
|
||||||
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
|
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
|
||||||
|
|
||||||
## Scope
|
|
||||||
|
|
||||||
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
|
|
||||||
|
|
||||||
## Enforcement
|
## Enforcement
|
||||||
|
|
||||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at [marlinfirmware@github.com](mailto:marlinfirmware@github.com). All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
|
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by following GitHub's [reporting abuse or spam article](https://docs.github.com/en/communities/maintaining-your-safety-on-github/reporting-abuse-or-spam). All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances.
|
||||||
|
|
||||||
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
|
|
||||||
|
|
||||||
## Attribution
|
## Attribution
|
||||||
|
|
||||||
|
|||||||
@@ -26,11 +26,12 @@ The following is a set of guidelines for contributing to Marlin, hosted by the [
|
|||||||
|
|
||||||
## Code of Conduct
|
## Code of Conduct
|
||||||
|
|
||||||
This project and everyone participating in it is governed by the [Marlin Code of Conduct](code_of_conduct.md). By participating, you are expected to uphold this code. Please report unacceptable behavior to [marlinfirmware@github.com](mailto:marlinfirmware@github.com).
|
This project and everyone participating in it is governed by the [Marlin Code of Conduct](code_of_conduct.md). By participating, you are expected to uphold this code. Please report unacceptable behavior by following GitHub's [reporting abuse or spam article](https://docs.github.com/en/communities/maintaining-your-safety-on-github/reporting-abuse-or-spam).
|
||||||
|
|
||||||
## I don't want to read this whole thing I just have a question!!!
|
## I don't want to read this whole thing I just have a question!!!
|
||||||
|
|
||||||
> **Note:** Please don't file an issue to ask a question. You'll get faster results by using the resources below.
|
> [!NOTE]
|
||||||
|
> Please don't file an issue to ask a question. You'll get faster results by using the resources below.
|
||||||
|
|
||||||
We have a Message Board and a Facebook group where our knowledgable user community can provide helpful advice if you have questions.
|
We have a Message Board and a Facebook group where our knowledgable user community can provide helpful advice if you have questions.
|
||||||
|
|
||||||
@@ -42,7 +43,7 @@ We have a Message Board and a Facebook group where our knowledgable user communi
|
|||||||
|
|
||||||
If chat is more your speed, you can join the MarlinFirmware Discord server:
|
If chat is more your speed, you can join the MarlinFirmware Discord server:
|
||||||
|
|
||||||
* Use the link https://discord.gg/n5NJ59y to join up as a General User.
|
* Use the link https://discord.com/servers/marlin-firmware-461605380783472640 to join up as a General User.
|
||||||
* Even though our Discord is pretty active, it may take a while for community members to respond — please be patient!
|
* Even though our Discord is pretty active, it may take a while for community members to respond — please be patient!
|
||||||
* Use the `#general` channel for general questions or discussion about Marlin.
|
* Use the `#general` channel for general questions or discussion about Marlin.
|
||||||
* Other channels exist for certain topics or are limited to Patrons. Check the channel list.
|
* Other channels exist for certain topics or are limited to Patrons. Check the channel list.
|
||||||
@@ -55,7 +56,8 @@ This section guides you through submitting a Bug Report for Marlin. Following th
|
|||||||
|
|
||||||
Before creating a Bug Report, please test the "nightly" development branch, as you might find out that you don't need to create one. When you are creating a Bug Report, please [include as many details as possible](#how-do-i-submit-a-good-bug-report). Fill out [the required template](ISSUE_TEMPLATE/bug_report.yml), the information it asks for helps us resolve issues faster.
|
Before creating a Bug Report, please test the "nightly" development branch, as you might find out that you don't need to create one. When you are creating a Bug Report, please [include as many details as possible](#how-do-i-submit-a-good-bug-report). Fill out [the required template](ISSUE_TEMPLATE/bug_report.yml), the information it asks for helps us resolve issues faster.
|
||||||
|
|
||||||
> **Note:** Regressions can happen. If you find a **Closed** issue that seems like your issue, go ahead and open a new issue and include a link to the original issue in the body of your new one. All you need to create a link is the issue number, preceded by #. For example, #8888.
|
> [!NOTE]
|
||||||
|
> Regressions can happen. If you find a **Closed** issue that seems like your issue, go ahead and open a new issue and include a link to the original issue in the body of your new one. All you need to create a link is the issue number, preceded by #. For example, #8888.
|
||||||
|
|
||||||
#### How Do I Submit A (Good) Bug Report?
|
#### How Do I Submit A (Good) Bug Report?
|
||||||
|
|
||||||
|
|||||||
@@ -1,40 +0,0 @@
|
|||||||
#
|
|
||||||
# Configuration for Lock Threads - https://github.com/dessant/lock-threads-app
|
|
||||||
#
|
|
||||||
|
|
||||||
# Number of days of inactivity before a closed issue or pull request is locked
|
|
||||||
daysUntilLock: 60
|
|
||||||
|
|
||||||
# Skip issues and pull requests created before a given timestamp. Timestamp must
|
|
||||||
# follow ISO 8601 (`YYYY-MM-DD`). Set to `false` to disable
|
|
||||||
skipCreatedBefore: false
|
|
||||||
|
|
||||||
# Issues and pull requests with these labels will be ignored. Set to `[]` to disable
|
|
||||||
exemptLabels: [ 'no-locking' ]
|
|
||||||
|
|
||||||
# Label to add before locking, such as `outdated`. Set to `false` to disable
|
|
||||||
lockLabel: false
|
|
||||||
|
|
||||||
# Comment to post before locking. Set to `false` to disable
|
|
||||||
lockComment: >
|
|
||||||
This thread has been automatically locked since there has not been
|
|
||||||
any recent activity after it was closed. Please open a new issue for
|
|
||||||
related bugs.
|
|
||||||
|
|
||||||
# Assign `resolved` as the reason for locking. Set to `false` to disable
|
|
||||||
setLockReason: true
|
|
||||||
|
|
||||||
# Limit to only `issues` or `pulls`
|
|
||||||
# only: issues
|
|
||||||
|
|
||||||
# Optionally, specify configuration settings just for `issues` or `pulls`
|
|
||||||
# issues:
|
|
||||||
# exemptLabels:
|
|
||||||
# - help-wanted
|
|
||||||
# lockLabel: outdated
|
|
||||||
|
|
||||||
# pulls:
|
|
||||||
# daysUntilLock: 30
|
|
||||||
|
|
||||||
# Repository to extend settings from
|
|
||||||
# _extends: repo
|
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
#
|
||||||
|
# auto-label.yml
|
||||||
|
# - Find all open issues without a label and a title containing "[BUG]".
|
||||||
|
# - Apply the label "Bug: Potential ?" to these issues.
|
||||||
|
#
|
||||||
|
|
||||||
|
name: Label Old Bugs
|
||||||
|
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: "30 8 * * *"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
autolabel:
|
||||||
|
name: Auto Label
|
||||||
|
if: github.repository == 'MarlinFirmware/Marlin'
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Auto Label for [BUG]
|
||||||
|
uses: actions/github-script@v7
|
||||||
|
with:
|
||||||
|
script: |
|
||||||
|
// Get all open issues in this repository
|
||||||
|
const issueList = await github.rest.issues.listForRepo({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
state: 'open'
|
||||||
|
});
|
||||||
|
// Filter issues without labels that have a title containing '[BUG]'.
|
||||||
|
const matchingIssues = issueList.data.filter(
|
||||||
|
issue => issue.title.includes('[BUG]') && issue.labels.length === 0
|
||||||
|
);
|
||||||
|
// Process the first 50
|
||||||
|
for (const issue of matchingIssues.slice(0, 50)) {
|
||||||
|
await github.rest.issues.addLabels({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
issue_number: issue.number,
|
||||||
|
labels: ['Bug: Potential ?']
|
||||||
|
});
|
||||||
|
}
|
||||||
@@ -19,7 +19,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
|
|
||||||
- name: Check out bugfix-2.0.x
|
- name: Check out bugfix-2.0.x
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
ref: bugfix-2.0.x
|
ref: bugfix-2.0.x
|
||||||
|
|
||||||
@@ -39,7 +39,7 @@ jobs:
|
|||||||
exit 0
|
exit 0
|
||||||
|
|
||||||
- name: Check out bugfix-2.1.x
|
- name: Check out bugfix-2.1.x
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
ref: bugfix-2.1.x
|
ref: bugfix-2.1.x
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ on:
|
|||||||
- 1.0.x
|
- 1.0.x
|
||||||
- 1.1.x
|
- 1.1.x
|
||||||
- 2.0.x
|
- 2.0.x
|
||||||
- 2.1.x
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
bad_target:
|
bad_target:
|
||||||
|
|||||||
@@ -1,41 +1,49 @@
|
|||||||
#
|
#
|
||||||
# test-builds.yml
|
# ci-build-tests.yml
|
||||||
# Do test builds to catch compile errors
|
# Do test builds to catch compile errors
|
||||||
#
|
#
|
||||||
|
|
||||||
name: CI
|
name: CI - Build Tests
|
||||||
|
|
||||||
on:
|
on:
|
||||||
pull_request:
|
pull_request:
|
||||||
branches:
|
branches:
|
||||||
- bugfix-2.1.x
|
- bugfix-2.1.x
|
||||||
|
- 2.1.x
|
||||||
paths-ignore:
|
paths-ignore:
|
||||||
- config/**
|
- config/**
|
||||||
- data/**
|
- data/**
|
||||||
- docs/**
|
- docs/**
|
||||||
|
- test/**
|
||||||
|
- Marlin/tests/**
|
||||||
- '**/*.md'
|
- '**/*.md'
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- bugfix-2.1.x
|
- bugfix-2.1.x
|
||||||
|
- 2.1.x
|
||||||
paths-ignore:
|
paths-ignore:
|
||||||
- config/**
|
- config/**
|
||||||
- data/**
|
- data/**
|
||||||
- docs/**
|
- docs/**
|
||||||
|
- test/**
|
||||||
|
- Marlin/tests/**
|
||||||
- '**/*.md'
|
- '**/*.md'
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
test_builds:
|
test_builds:
|
||||||
name: Run All Tests
|
name: Build Test
|
||||||
if: github.repository == 'MarlinFirmware/Marlin'
|
if: github.repository == 'MarlinFirmware/Marlin'
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
|
fail-fast: true
|
||||||
matrix:
|
matrix:
|
||||||
test-platform:
|
test-platform:
|
||||||
|
|
||||||
# Native
|
# Native
|
||||||
- linux_native
|
- linux_native
|
||||||
|
- simulator_linux_release
|
||||||
|
|
||||||
# AVR
|
# AVR
|
||||||
- mega2560
|
- mega2560
|
||||||
@@ -98,9 +106,9 @@ jobs:
|
|||||||
|
|
||||||
# STM32F4
|
# STM32F4
|
||||||
- ARMED
|
- ARMED
|
||||||
- BIGTREE_BTT002
|
- BTT_BTT002
|
||||||
- BIGTREE_GTR_V1_0
|
- BTT_GTR_V1_0
|
||||||
- BIGTREE_SKR_PRO
|
- BTT_SKR_PRO
|
||||||
- FLYF407ZG
|
- FLYF407ZG
|
||||||
- FYSETC_S6
|
- FYSETC_S6
|
||||||
- LERDGEK
|
- LERDGEK
|
||||||
@@ -118,6 +126,7 @@ jobs:
|
|||||||
|
|
||||||
# STM32H7
|
# STM32H7
|
||||||
- BTT_SKR_SE_BX
|
- BTT_SKR_SE_BX
|
||||||
|
- STM32H743VI_btt
|
||||||
|
|
||||||
# STM32F1 (Maple)
|
# STM32F1 (Maple)
|
||||||
- jgaurora_a5s_a1_maple
|
- jgaurora_a5s_a1_maple
|
||||||
@@ -133,6 +142,12 @@ jobs:
|
|||||||
#- STM32F103RC_btt_maple
|
#- STM32F103RC_btt_maple
|
||||||
#- STM32F103RE_creality_maple
|
#- STM32F103RE_creality_maple
|
||||||
|
|
||||||
|
# STM32G0
|
||||||
|
- STM32G0B1RE_btt
|
||||||
|
|
||||||
|
# HC32
|
||||||
|
- HC32F460C_aquila_101
|
||||||
|
|
||||||
# LPC176x - Lengthy tests
|
# LPC176x - Lengthy tests
|
||||||
- LPC1768
|
- LPC1768
|
||||||
- LPC1769
|
- LPC1769
|
||||||
@@ -140,10 +155,10 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
|
|
||||||
- name: Check out the PR
|
- name: Check out the PR
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Cache pip
|
- name: Cache pip
|
||||||
uses: actions/cache@v3
|
uses: actions/cache@v4
|
||||||
with:
|
with:
|
||||||
path: ~/.cache/pip
|
path: ~/.cache/pip
|
||||||
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
|
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
|
||||||
@@ -151,16 +166,16 @@ jobs:
|
|||||||
${{ runner.os }}-pip-
|
${{ runner.os }}-pip-
|
||||||
|
|
||||||
- name: Cache PlatformIO
|
- name: Cache PlatformIO
|
||||||
uses: actions/cache@v3
|
uses: actions/cache@v4
|
||||||
with:
|
with:
|
||||||
path: ~/.platformio
|
path: ~/.platformio
|
||||||
key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }}
|
key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }}
|
||||||
|
|
||||||
- name: Select Python 3.7
|
- name: Select Python 3.9
|
||||||
uses: actions/setup-python@v3
|
uses: actions/setup-python@v5
|
||||||
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.9'
|
||||||
architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified
|
architecture: 'x64'
|
||||||
|
|
||||||
- name: Install PlatformIO
|
- name: Install PlatformIO
|
||||||
run: |
|
run: |
|
||||||
@@ -168,6 +183,13 @@ jobs:
|
|||||||
pio upgrade --dev
|
pio upgrade --dev
|
||||||
pio pkg update --global
|
pio pkg update --global
|
||||||
|
|
||||||
|
- name: Install Simulator dependencies
|
||||||
|
run: |
|
||||||
|
sudo apt-get install build-essential
|
||||||
|
sudo apt-get install libsdl2-dev
|
||||||
|
sudo apt-get install libsdl2-net-dev
|
||||||
|
sudo apt-get install libglm-dev
|
||||||
|
|
||||||
- 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 }}
|
||||||
@@ -0,0 +1,73 @@
|
|||||||
|
#
|
||||||
|
# ci-unit-tests.yml
|
||||||
|
# Build and execute unit tests to catch functional issues in code
|
||||||
|
#
|
||||||
|
|
||||||
|
name: CI - Unit Tests
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- bugfix-2.1.x
|
||||||
|
# Cannot be enabled on 2.1.x until it contains the unit test framework
|
||||||
|
#- 2.1.x
|
||||||
|
paths-ignore:
|
||||||
|
- config/**
|
||||||
|
- data/**
|
||||||
|
- docs/**
|
||||||
|
- '**/*.md'
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- bugfix-2.1.x
|
||||||
|
# Cannot be enabled on 2.1.x until it contains the unit test framework
|
||||||
|
#- 2.1.x
|
||||||
|
paths-ignore:
|
||||||
|
- config/**
|
||||||
|
- data/**
|
||||||
|
- docs/**
|
||||||
|
- '**/*.md'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
# This runs all unit tests as a single job. While it should be possible to break this up into
|
||||||
|
# multiple jobs, they currently run quickly and finish long before the compilation tests.
|
||||||
|
run_unit_tests:
|
||||||
|
name: Unit Test
|
||||||
|
# These tests will only be able to run on the bugfix-2.1.x branch, until the next release
|
||||||
|
# pulls them into additional branches.
|
||||||
|
if: github.repository == 'MarlinFirmware/Marlin'
|
||||||
|
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Check out the PR
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Cache pip
|
||||||
|
uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
path: ~/.cache/pip
|
||||||
|
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
|
||||||
|
restore-keys: |
|
||||||
|
${{ runner.os }}-pip-
|
||||||
|
|
||||||
|
- name: Cache PlatformIO
|
||||||
|
uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
path: ~/.platformio
|
||||||
|
key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }}
|
||||||
|
|
||||||
|
- name: Select Python 3.9
|
||||||
|
uses: actions/setup-python@v5
|
||||||
|
with:
|
||||||
|
python-version: '3.9'
|
||||||
|
architecture: 'x64'
|
||||||
|
|
||||||
|
- name: Install PlatformIO
|
||||||
|
run: |
|
||||||
|
pip install -U platformio
|
||||||
|
pio upgrade --dev
|
||||||
|
pio pkg update --global
|
||||||
|
|
||||||
|
- name: Run All Unit Tests
|
||||||
|
run: |
|
||||||
|
make unit-test-all-local
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
#
|
||||||
|
# ci-validate-boards.yml
|
||||||
|
# Validate boards.h to make sure it's all set up correctly
|
||||||
|
#
|
||||||
|
|
||||||
|
name: CI - Validate boards.h
|
||||||
|
|
||||||
|
# We can do the on: section as two items, one for pull requests and one for pushes...
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- bugfix-2.1.x
|
||||||
|
paths:
|
||||||
|
- 'Marlin/src/core/boards.h'
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- bugfix-2.1.x
|
||||||
|
paths:
|
||||||
|
- 'Marlin/src/core/boards.h'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
validate_pins_files:
|
||||||
|
name: Validate boards.h
|
||||||
|
if: github.repository == 'MarlinFirmware/Marlin'
|
||||||
|
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Check out the PR
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Cache pip
|
||||||
|
uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
path: ~/.cache/pip
|
||||||
|
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
|
||||||
|
restore-keys: |
|
||||||
|
${{ runner.os }}-pip-
|
||||||
|
|
||||||
|
- name: Select Python 3.9
|
||||||
|
uses: actions/setup-python@v5
|
||||||
|
with:
|
||||||
|
python-version: '3.9'
|
||||||
|
architecture: 'x64'
|
||||||
|
|
||||||
|
- name: Validate core/boards.h
|
||||||
|
run: |
|
||||||
|
make validate-boards -j
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
#
|
||||||
|
# ci-validate-pins.yml
|
||||||
|
# Validate that all of the pins files are unchanged by pinsformat.py
|
||||||
|
#
|
||||||
|
|
||||||
|
name: CI - Validate Pins Files
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- bugfix-2.1.x
|
||||||
|
# Cannot be enabled on 2.1.x until it contains the unit test framework
|
||||||
|
#- 2.1.x
|
||||||
|
paths:
|
||||||
|
- 'Marlin/src/pins/*/**'
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- bugfix-2.1.x
|
||||||
|
# Cannot be enabled on 2.1.x until it contains the unit test framework
|
||||||
|
#- 2.1.x
|
||||||
|
paths:
|
||||||
|
- 'Marlin/src/pins/*/**'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
validate_pins_files:
|
||||||
|
name: Validate Pins Files
|
||||||
|
if: github.repository == 'MarlinFirmware/Marlin'
|
||||||
|
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Check out the PR
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Cache pip
|
||||||
|
uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
path: ~/.cache/pip
|
||||||
|
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
|
||||||
|
restore-keys: |
|
||||||
|
${{ runner.os }}-pip-
|
||||||
|
|
||||||
|
- name: Select Python 3.9
|
||||||
|
uses: actions/setup-python@v5
|
||||||
|
with:
|
||||||
|
python-version: '3.9'
|
||||||
|
architecture: 'x64'
|
||||||
|
|
||||||
|
- name: Validate all pins files
|
||||||
|
run: |
|
||||||
|
make validate-pins -j
|
||||||
@@ -23,6 +23,7 @@ jobs:
|
|||||||
- "S: Please Merge"
|
- "S: Please Merge"
|
||||||
- "S: Please Test"
|
- "S: Please Test"
|
||||||
- "help wanted"
|
- "help wanted"
|
||||||
|
- "Bug: Potential ?"
|
||||||
- "Needs: Discussion"
|
- "Needs: Discussion"
|
||||||
- "Needs: Documentation"
|
- "Needs: Documentation"
|
||||||
- "Needs: More Data"
|
- "Needs: More Data"
|
||||||
@@ -31,7 +32,7 @@ jobs:
|
|||||||
- "Needs: Work"
|
- "Needs: Work"
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- name: Remove Labels
|
- name: Remove Labels
|
||||||
uses: actions-ecosystem/action-remove-labels@v1
|
uses: actions-ecosystem/action-remove-labels@v1
|
||||||
with:
|
with:
|
||||||
|
|||||||
@@ -17,12 +17,24 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/stale@v3
|
- uses: actions/stale@v9
|
||||||
with:
|
with:
|
||||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
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.'
|
stale-issue-message: |
|
||||||
days-before-stale: 60
|
Greetings from the Marlin AutoBot!
|
||||||
days-before-close: 10
|
This issue has had no activity for the last 90 days.
|
||||||
|
Do you still see this issue with the latest `bugfix-2.1.x` code?
|
||||||
|
Please add a reply within 14 days or this issue will be automatically closed.
|
||||||
|
To keep a confirmed issue open we can also add a "Bug: Confirmed" tag.
|
||||||
|
|
||||||
|
Disclaimer: This is an open community project with lots of activity and limited
|
||||||
|
resources. The main project contributors will do a bug sweep ahead of the next
|
||||||
|
release, but any skilled member of the community may jump in at any time to fix
|
||||||
|
this issue. That can take a while depending on our busy lives so please be patient,
|
||||||
|
and take advantage of other resources such as the MarlinFirmware Discord to help
|
||||||
|
solve the issue.
|
||||||
|
days-before-stale: 90
|
||||||
|
days-before-close: 14
|
||||||
stale-issue-label: 'stale-closing-soon'
|
stale-issue-label: 'stale-closing-soon'
|
||||||
exempt-all-assignees: true
|
exempt-all-assignees: true
|
||||||
exempt-issue-labels: 'Bug: Confirmed !,T: Feature Request,Needs: More Data,Needs: Discussion,Needs: Documentation,Needs: Patch,Needs: Work,Needs: Testing,help wanted,no-locking'
|
exempt-issue-labels: 'Bug: Confirmed !,T: Feature Request,Needs: More Data,Needs: Discussion,Needs: Documentation,Needs: Patch,Needs: Work,Needs: Testing,help wanted,no-locking'
|
||||||
|
|||||||
@@ -17,15 +17,15 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: dessant/lock-threads@v2
|
- uses: dessant/lock-threads@v5
|
||||||
with:
|
with:
|
||||||
github-token: ${{ github.token }}
|
github-token: ${{ github.token }}
|
||||||
process-only: 'issues'
|
process-only: 'issues'
|
||||||
issue-lock-inactive-days: '60'
|
issue-inactive-days: '60'
|
||||||
issue-exclude-created-before: ''
|
exclude-issue-created-before: ''
|
||||||
issue-exclude-labels: 'no-locking'
|
exclude-any-issue-labels: 'no-locking'
|
||||||
issue-lock-labels: ''
|
add-issue-labels: ''
|
||||||
issue-lock-comment: >
|
issue-comment: >
|
||||||
This issue has been automatically locked since there
|
This issue has been automatically locked since there
|
||||||
has not been any recent activity after it was closed.
|
has not been any recent activity after it was closed.
|
||||||
Please open a new issue for related bugs.
|
Please open a new issue for related bugs.
|
||||||
|
|||||||
@@ -125,6 +125,7 @@ vc-fileutils.settings
|
|||||||
# Visual Studio Code
|
# Visual Studio Code
|
||||||
.vscode/*
|
.vscode/*
|
||||||
!.vscode/extensions.json
|
!.vscode/extensions.json
|
||||||
|
*.code-workspace
|
||||||
|
|
||||||
# Simulation files
|
# Simulation files
|
||||||
imgui.ini
|
imgui.ini
|
||||||
|
|||||||
Vendored
+1
@@ -6,6 +6,7 @@
|
|||||||
"platformio.platformio-ide"
|
"platformio.platformio-ide"
|
||||||
],
|
],
|
||||||
"unwantedRecommendations": [
|
"unwantedRecommendations": [
|
||||||
|
"ms-vscode-remote.remote-containers",
|
||||||
"ms-vscode.cpptools-extension-pack"
|
"ms-vscode.cpptools-extension-pack"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
/**
|
||||||
|
* Marlin-specific settings for Zed
|
||||||
|
*
|
||||||
|
* For a full list of overridable settings, and general information on folder-specific settings,
|
||||||
|
* see the documentation: https://zed.dev/docs/configuring-zed#settings-files
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
"languages": {
|
||||||
|
"C": {
|
||||||
|
"enable_language_server": false
|
||||||
|
},
|
||||||
|
"C++": {
|
||||||
|
"enable_language_server": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,15 +2,24 @@ SCRIPTS_DIR := buildroot/share/scripts
|
|||||||
CONTAINER_RT_BIN := docker
|
CONTAINER_RT_BIN := docker
|
||||||
CONTAINER_RT_OPTS := --rm -v $(PWD):/code -v platformio-cache:/root/.platformio
|
CONTAINER_RT_OPTS := --rm -v $(PWD):/code -v platformio-cache:/root/.platformio
|
||||||
CONTAINER_IMAGE := marlin-dev
|
CONTAINER_IMAGE := marlin-dev
|
||||||
|
UNIT_TEST_CONFIG ?= default
|
||||||
|
|
||||||
help:
|
help:
|
||||||
@echo "Tasks for local development:"
|
@echo "Tasks for local development:"
|
||||||
@echo "* tests-single-ci: Run a single test from inside the CI"
|
@echo "make marlin : Build Marlin for the configured board"
|
||||||
@echo "* tests-single-local: Run a single test locally"
|
@echo "make format-pins -j : Reformat all pins files (-j for parallel execution)"
|
||||||
@echo "* tests-single-local-docker: Run a single test locally, using docker"
|
@echo "make validate-pins -j : Validate all pins files, fails if any require reformatting"
|
||||||
@echo "* tests-all-local: Run all tests locally"
|
@echo "make validate-boards -j : Validate boards.h and pins.h for standards compliance"
|
||||||
@echo "* tests-all-local-docker: Run all tests locally, using docker"
|
@echo "make tests-single-ci : Run a single test from inside the CI"
|
||||||
@echo "* setup-local-docker: Build the local docker image"
|
@echo "make tests-single-local : Run a single test locally"
|
||||||
|
@echo "make tests-single-local-docker : Run a single test locally, using docker"
|
||||||
|
@echo "make tests-all-local : Run all tests locally"
|
||||||
|
@echo "make tests-all-local-docker : Run all tests locally, using docker"
|
||||||
|
@echo "make unit-test-single-local : Run unit tests for a single config locally"
|
||||||
|
@echo "make unit-test-single-local-docker : Run unit tests for a single config locally, using docker"
|
||||||
|
@echo "make unit-test-all-local : Run all code tests locally"
|
||||||
|
@echo "make unit-test-all-local-docker : Run all code tests locally, using docker"
|
||||||
|
@echo "make setup-local-docker : Setup local docker using buildx"
|
||||||
@echo ""
|
@echo ""
|
||||||
@echo "Options for testing:"
|
@echo "Options for testing:"
|
||||||
@echo " TEST_TARGET Set when running tests-single-*, to select the"
|
@echo " TEST_TARGET Set when running tests-single-*, to select the"
|
||||||
@@ -20,40 +29,85 @@ help:
|
|||||||
@echo " run on GitHub CI"
|
@echo " run on GitHub CI"
|
||||||
@echo " ONLY_TEST Limit tests to only those that contain this, or"
|
@echo " ONLY_TEST Limit tests to only those that contain this, or"
|
||||||
@echo " the index of the test (1-based)"
|
@echo " the index of the test (1-based)"
|
||||||
|
@echo " UNIT_TEST_CONFIG Set the name of the config from the test folder, without"
|
||||||
|
@echo " the leading number. Default is 'default'". Used with the
|
||||||
|
@echo " unit-test-single-* tasks"
|
||||||
@echo " VERBOSE_PLATFORMIO If you want the full PIO output, set any value"
|
@echo " VERBOSE_PLATFORMIO If you want the full PIO output, set any value"
|
||||||
@echo " GIT_RESET_HARD Used by CI: reset all local changes. WARNING:"
|
@echo " GIT_RESET_HARD Used by CI: reset all local changes. WARNING:"
|
||||||
@echo " THIS WILL UNDO ANY CHANGES YOU'VE MADE!"
|
@echo " THIS WILL UNDO ANY CHANGES YOU'VE MADE!"
|
||||||
.PHONY: help
|
|
||||||
|
marlin:
|
||||||
|
./buildroot/bin/mftest -a
|
||||||
|
.PHONY: marlin
|
||||||
|
|
||||||
tests-single-ci:
|
tests-single-ci:
|
||||||
export GIT_RESET_HARD=true
|
export GIT_RESET_HARD=true
|
||||||
$(MAKE) tests-single-local TEST_TARGET=$(TEST_TARGET) PLATFORMIO_BUILD_FLAGS=-DGITHUB_ACTION
|
$(MAKE) tests-single-local TEST_TARGET=$(TEST_TARGET) PLATFORMIO_BUILD_FLAGS=-DGITHUB_ACTION
|
||||||
.PHONY: tests-single-ci
|
|
||||||
|
|
||||||
tests-single-local:
|
tests-single-local:
|
||||||
@if ! test -n "$(TEST_TARGET)" ; then echo "***ERROR*** Set TEST_TARGET=<your-module> or use make tests-all-local" ; return 1; fi
|
@if ! test -n "$(TEST_TARGET)" ; then echo "***ERROR*** Set TEST_TARGET=<your-module> or use make tests-all-local" ; return 1; fi
|
||||||
export PATH="./buildroot/bin/:./buildroot/tests/:${PATH}" \
|
export PATH="./buildroot/bin/:./buildroot/tests/:${PATH}" \
|
||||||
&& export VERBOSE_PLATFORMIO=$(VERBOSE_PLATFORMIO) \
|
&& export VERBOSE_PLATFORMIO=$(VERBOSE_PLATFORMIO) \
|
||||||
&& run_tests . $(TEST_TARGET) "$(ONLY_TEST)"
|
&& run_tests . $(TEST_TARGET) "$(ONLY_TEST)"
|
||||||
.PHONY: tests-single-local
|
|
||||||
|
|
||||||
tests-single-local-docker:
|
tests-single-local-docker:
|
||||||
@if ! test -n "$(TEST_TARGET)" ; then echo "***ERROR*** Set TEST_TARGET=<your-module> or use make tests-all-local-docker" ; return 1; fi
|
@if ! test -n "$(TEST_TARGET)" ; then echo "***ERROR*** Set TEST_TARGET=<your-module> or use make tests-all-local-docker" ; return 1; fi
|
||||||
@if ! $(CONTAINER_RT_BIN) images -q $(CONTAINER_IMAGE) > /dev/null ; then $(MAKE) setup-local-docker ; fi
|
@if ! $(CONTAINER_RT_BIN) images -q $(CONTAINER_IMAGE) > /dev/null ; then $(MAKE) setup-local-docker ; fi
|
||||||
$(CONTAINER_RT_BIN) run $(CONTAINER_RT_OPTS) $(CONTAINER_IMAGE) $(MAKE) tests-single-local TEST_TARGET=$(TEST_TARGET) VERBOSE_PLATFORMIO=$(VERBOSE_PLATFORMIO) GIT_RESET_HARD=$(GIT_RESET_HARD) ONLY_TEST="$(ONLY_TEST)"
|
$(CONTAINER_RT_BIN) run $(CONTAINER_RT_OPTS) $(CONTAINER_IMAGE) make tests-single-local TEST_TARGET=$(TEST_TARGET) VERBOSE_PLATFORMIO=$(VERBOSE_PLATFORMIO) GIT_RESET_HARD=$(GIT_RESET_HARD) ONLY_TEST="$(ONLY_TEST)"
|
||||||
.PHONY: tests-single-local-docker
|
|
||||||
|
|
||||||
tests-all-local:
|
tests-all-local:
|
||||||
|
@python -c "import yaml" 2>/dev/null || (echo 'pyyaml module is not installed. Install it with "python -m pip install pyyaml"' && exit 1)
|
||||||
export PATH="./buildroot/bin/:./buildroot/tests/:${PATH}" \
|
export PATH="./buildroot/bin/:./buildroot/tests/:${PATH}" \
|
||||||
&& export VERBOSE_PLATFORMIO=$(VERBOSE_PLATFORMIO) \
|
&& export VERBOSE_PLATFORMIO=$(VERBOSE_PLATFORMIO) \
|
||||||
&& for TEST_TARGET in $$($(SCRIPTS_DIR)/get_test_targets.py) ; do echo "Running tests for $$TEST_TARGET" ; run_tests . $$TEST_TARGET ; done
|
&& for TEST_TARGET in $$(python $(SCRIPTS_DIR)/get_test_targets.py) ; do \
|
||||||
.PHONY: tests-all-local
|
if [ "$$TEST_TARGET" = "linux_native" ] && [ "$$(uname)" = "Darwin" ]; then \
|
||||||
|
echo "Skipping tests for $$TEST_TARGET on macOS" ; \
|
||||||
|
continue ; \
|
||||||
|
fi ; \
|
||||||
|
echo "Running tests for $$TEST_TARGET" ; \
|
||||||
|
run_tests . $$TEST_TARGET || exit 1 ; \
|
||||||
|
sleep 5; \
|
||||||
|
done
|
||||||
|
|
||||||
tests-all-local-docker:
|
tests-all-local-docker:
|
||||||
@if ! $(CONTAINER_RT_BIN) images -q $(CONTAINER_IMAGE) > /dev/null ; then $(MAKE) setup-local-docker ; fi
|
@if ! $(CONTAINER_RT_BIN) images -q $(CONTAINER_IMAGE) > /dev/null ; then $(MAKE) setup-local-docker ; fi
|
||||||
$(CONTAINER_RT_BIN) run $(CONTAINER_RT_OPTS) $(CONTAINER_IMAGE) $(MAKE) tests-all-local VERBOSE_PLATFORMIO=$(VERBOSE_PLATFORMIO) GIT_RESET_HARD=$(GIT_RESET_HARD)
|
$(CONTAINER_RT_BIN) run $(CONTAINER_RT_OPTS) $(CONTAINER_IMAGE) make tests-all-local VERBOSE_PLATFORMIO=$(VERBOSE_PLATFORMIO) GIT_RESET_HARD=$(GIT_RESET_HARD)
|
||||||
.PHONY: tests-all-local-docker
|
|
||||||
|
unit-test-single-local:
|
||||||
|
platformio run -t marlin_$(UNIT_TEST_CONFIG) -e linux_native_test
|
||||||
|
|
||||||
|
unit-test-single-local-docker:
|
||||||
|
@if ! $(CONTAINER_RT_BIN) images -q $(CONTAINER_IMAGE) > /dev/null ; then $(MAKE) setup-local-docker ; fi
|
||||||
|
$(CONTAINER_RT_BIN) run $(CONTAINER_RT_OPTS) $(CONTAINER_IMAGE) make unit-test-single-local UNIT_TEST_CONFIG=$(UNIT_TEST_CONFIG)
|
||||||
|
|
||||||
|
unit-test-all-local:
|
||||||
|
platformio run -t test-marlin -e linux_native_test
|
||||||
|
|
||||||
|
unit-test-all-local-docker:
|
||||||
|
@if ! $(CONTAINER_RT_BIN) images -q $(CONTAINER_IMAGE) > /dev/null ; then $(MAKE) setup-local-docker ; fi
|
||||||
|
$(CONTAINER_RT_BIN) run $(CONTAINER_RT_OPTS) $(CONTAINER_IMAGE) make unit-test-all-local
|
||||||
|
|
||||||
setup-local-docker:
|
setup-local-docker:
|
||||||
$(CONTAINER_RT_BIN) build -t $(CONTAINER_IMAGE) -f docker/Dockerfile .
|
$(CONTAINER_RT_BIN) buildx build -t $(CONTAINER_IMAGE) -f docker/Dockerfile .
|
||||||
.PHONY: setup-local-docker
|
|
||||||
|
PINS := $(shell find Marlin/src/pins -mindepth 2 -name '*.h')
|
||||||
|
|
||||||
|
.PHONY: $(PINS) format-pins validate-pins
|
||||||
|
|
||||||
|
$(PINS): %:
|
||||||
|
@echo "Formatting $@"
|
||||||
|
@python $(SCRIPTS_DIR)/pinsformat.py $< $@
|
||||||
|
|
||||||
|
format-pins: $(PINS)
|
||||||
|
|
||||||
|
validate-pins: format-pins
|
||||||
|
@echo "Validating pins files"
|
||||||
|
@git diff --exit-code || (git status && echo "\nError: Pins files are not formatted correctly. Run \"make format-pins\" to fix.\n" && exit 1)
|
||||||
|
|
||||||
|
BOARDS_FILE := Marlin/src/core/boards.h
|
||||||
|
|
||||||
|
.PHONY: validate-boards
|
||||||
|
|
||||||
|
validate-boards:
|
||||||
|
@echo "Validating boards.h file"
|
||||||
|
@python $(SCRIPTS_DIR)/validate_boards.py $(BOARDS_FILE) || (echo "\nError: boards.h file is not valid. Please check and correct it.\n" && exit 1)
|
||||||
|
|||||||
+239
-123
@@ -50,7 +50,7 @@
|
|||||||
*
|
*
|
||||||
* Calibration Guides: https://reprap.org/wiki/Calibration
|
* Calibration Guides: https://reprap.org/wiki/Calibration
|
||||||
* https://reprap.org/wiki/Triffid_Hunter%27s_Calibration_Guide
|
* https://reprap.org/wiki/Triffid_Hunter%27s_Calibration_Guide
|
||||||
* https://web.archive.org/web/20220907014303/https://sites.google.com/site/repraplogphase/calibration-of-your-reprap
|
* https://web.archive.org/web/20220907014303/sites.google.com/site/repraplogphase/calibration-of-your-reprap
|
||||||
* https://youtu.be/wAL9d7FgInk
|
* https://youtu.be/wAL9d7FgInk
|
||||||
* https://teachingtechyt.github.io/calibration.html
|
* https://teachingtechyt.github.io/calibration.html
|
||||||
*
|
*
|
||||||
@@ -61,7 +61,7 @@
|
|||||||
// @section info
|
// @section info
|
||||||
|
|
||||||
// Author info of this build printed to the host during boot and M115
|
// Author info of this build printed to the host during boot and M115
|
||||||
#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
|
#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Original author or contributor.
|
||||||
//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
|
//#define CUSTOM_VERSION_FILE Version.h // Path from the root directory (no quotes)
|
||||||
|
|
||||||
// @section machine
|
// @section machine
|
||||||
@@ -77,7 +77,7 @@
|
|||||||
* Serial port -1 is the USB emulated serial port, if available.
|
* Serial port -1 is the USB emulated serial port, if available.
|
||||||
* Note: The first serial port (-1 or 0) will always be used by the Arduino bootloader.
|
* Note: The first serial port (-1 or 0) will always be used by the Arduino bootloader.
|
||||||
*
|
*
|
||||||
* :[-1, 0, 1, 2, 3, 4, 5, 6, 7]
|
* :[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
|
||||||
*/
|
*/
|
||||||
#define SERIAL_PORT 0
|
#define SERIAL_PORT 0
|
||||||
|
|
||||||
@@ -99,19 +99,29 @@
|
|||||||
/**
|
/**
|
||||||
* Select a secondary serial port on the board to use for communication with the host.
|
* 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.
|
* Currently Ethernet (-2) is only supported on Teensy 4.1 boards.
|
||||||
* :[-2, -1, 0, 1, 2, 3, 4, 5, 6, 7]
|
* :[-2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
|
||||||
*/
|
*/
|
||||||
//#define SERIAL_PORT_2 -1
|
//#define SERIAL_PORT_2 -1
|
||||||
//#define BAUDRATE_2 250000 // :[2400, 9600, 19200, 38400, 57600, 115200, 250000, 500000, 1000000] Enable to override BAUDRATE
|
//#define BAUDRATE_2 250000 // :[2400, 9600, 19200, 38400, 57600, 115200, 250000, 500000, 1000000] Enable to override BAUDRATE
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Select a third serial port on the board to use for communication with the host.
|
* 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
|
* Currently supported for AVR, DUE, SAMD51, LPC1768/9, STM32/STM32F1/HC32, and Teensy 4.x
|
||||||
* :[-1, 0, 1, 2, 3, 4, 5, 6, 7]
|
* :[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
|
||||||
*/
|
*/
|
||||||
//#define SERIAL_PORT_3 1
|
//#define SERIAL_PORT_3 1
|
||||||
//#define BAUDRATE_3 250000 // :[2400, 9600, 19200, 38400, 57600, 115200, 250000, 500000, 1000000] Enable to override BAUDRATE
|
//#define BAUDRATE_3 250000 // :[2400, 9600, 19200, 38400, 57600, 115200, 250000, 500000, 1000000] Enable to override BAUDRATE
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Select a serial port to communicate with RS485 protocol
|
||||||
|
* :[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
|
||||||
|
*/
|
||||||
|
//#define RS485_SERIAL_PORT 1
|
||||||
|
#ifdef RS485_SERIAL_PORT
|
||||||
|
//#define M485_PROTOCOL 1 // Check your host for protocol compatibility
|
||||||
|
//#define RS485_BUS_BUFFER_SIZE 128
|
||||||
|
#endif
|
||||||
|
|
||||||
// Enable the Bluetooth serial interface on AT90USB devices
|
// Enable the Bluetooth serial interface on AT90USB devices
|
||||||
//#define BLUETOOTH
|
//#define BLUETOOTH
|
||||||
|
|
||||||
@@ -135,9 +145,9 @@
|
|||||||
* Options: A4988, A5984, DRV8825, LV8729, TB6560, TB6600, TMC2100,
|
* Options: A4988, A5984, DRV8825, LV8729, TB6560, TB6600, TMC2100,
|
||||||
* TMC2130, TMC2130_STANDALONE, TMC2160, TMC2160_STANDALONE,
|
* TMC2130, TMC2130_STANDALONE, TMC2160, TMC2160_STANDALONE,
|
||||||
* TMC2208, TMC2208_STANDALONE, TMC2209, TMC2209_STANDALONE,
|
* TMC2208, TMC2208_STANDALONE, TMC2209, TMC2209_STANDALONE,
|
||||||
* TMC26X, TMC26X_STANDALONE, TMC2660, TMC2660_STANDALONE,
|
* TMC2660, TMC2660_STANDALONE, TMC5130, TMC5130_STANDALONE,
|
||||||
* TMC5130, TMC5130_STANDALONE, TMC5160, TMC5160_STANDALONE
|
* TMC5160, TMC5160_STANDALONE
|
||||||
* :['A4988', 'A5984', 'DRV8825', 'LV8729', 'TB6560', 'TB6600', 'TMC2100', 'TMC2130', 'TMC2130_STANDALONE', 'TMC2160', 'TMC2160_STANDALONE', 'TMC2208', 'TMC2208_STANDALONE', 'TMC2209', 'TMC2209_STANDALONE', 'TMC26X', 'TMC26X_STANDALONE', 'TMC2660', 'TMC2660_STANDALONE', 'TMC5130', 'TMC5130_STANDALONE', 'TMC5160', 'TMC5160_STANDALONE']
|
* :['A4988', 'A5984', 'DRV8825', 'LV8729', 'TB6560', 'TB6600', 'TMC2100', 'TMC2130', 'TMC2130_STANDALONE', 'TMC2160', 'TMC2160_STANDALONE', 'TMC2208', 'TMC2208_STANDALONE', 'TMC2209', 'TMC2209_STANDALONE', 'TMC2660', 'TMC2660_STANDALONE', 'TMC5130', 'TMC5130_STANDALONE', 'TMC5160', 'TMC5160_STANDALONE']
|
||||||
*/
|
*/
|
||||||
#define X_DRIVER_TYPE A4988
|
#define X_DRIVER_TYPE A4988
|
||||||
#define Y_DRIVER_TYPE A4988
|
#define Y_DRIVER_TYPE A4988
|
||||||
@@ -244,7 +254,8 @@
|
|||||||
#if ENABLED(SWITCHING_NOZZLE)
|
#if ENABLED(SWITCHING_NOZZLE)
|
||||||
#define SWITCHING_NOZZLE_SERVO_NR 0
|
#define SWITCHING_NOZZLE_SERVO_NR 0
|
||||||
//#define SWITCHING_NOZZLE_E1_SERVO_NR 1 // If two servos are used, the index of the second
|
//#define SWITCHING_NOZZLE_E1_SERVO_NR 1 // If two servos are used, the index of the second
|
||||||
#define SWITCHING_NOZZLE_SERVO_ANGLES { 0, 90 } // Angles for E0, E1 (single servo) or lowered/raised (dual servo)
|
#define SWITCHING_NOZZLE_SERVO_ANGLES { 0, 90 } // A pair of angles for { E0, E1 }.
|
||||||
|
// For Dual Servo use two pairs: { { lower, raise }, { lower, raise } }
|
||||||
#define SWITCHING_NOZZLE_SERVO_DWELL 2500 // Dwell time to wait for servo to make physical move
|
#define SWITCHING_NOZZLE_SERVO_DWELL 2500 // Dwell time to wait for servo to make physical move
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -374,14 +385,15 @@
|
|||||||
* PRUSA_MMU1 : Průša MMU1 (The "multiplexer" version)
|
* PRUSA_MMU1 : Průša MMU1 (The "multiplexer" version)
|
||||||
* PRUSA_MMU2 : Průša MMU2
|
* PRUSA_MMU2 : Průša MMU2
|
||||||
* PRUSA_MMU2S : Průša MMU2S (Requires MK3S extruder with motion sensor, EXTRUDERS = 5)
|
* PRUSA_MMU2S : Průša MMU2S (Requires MK3S extruder with motion sensor, EXTRUDERS = 5)
|
||||||
|
* PRUSA_MMU3 : Průša MMU3 (Requires MK3S extruder with motion sensor and MMU firmware version 3.x.x, EXTRUDERS = 5)
|
||||||
* EXTENDABLE_EMU_MMU2 : MMU with configurable number of filaments (ERCF, SMuFF or similar with Průša MMU2 compatible firmware)
|
* EXTENDABLE_EMU_MMU2 : MMU with configurable number of filaments (ERCF, SMuFF or similar with Průša MMU2 compatible firmware)
|
||||||
* EXTENDABLE_EMU_MMU2S : MMUS with configurable number of filaments (ERCF, SMuFF or similar with Průša MMU2 compatible firmware)
|
* EXTENDABLE_EMU_MMU2S : MMUS with configurable number of filaments (ERCF, SMuFF or similar with Průša MMU2 compatible firmware)
|
||||||
*
|
*
|
||||||
* Requires NOZZLE_PARK_FEATURE to park print head in case MMU unit fails.
|
* Requires NOZZLE_PARK_FEATURE to park print head in case MMU unit fails.
|
||||||
* See additional options in Configuration_adv.h.
|
* See additional options in Configuration_adv.h.
|
||||||
* :["PRUSA_MMU1", "PRUSA_MMU2", "PRUSA_MMU2S", "EXTENDABLE_EMU_MMU2", "EXTENDABLE_EMU_MMU2S"]
|
* :["PRUSA_MMU1", "PRUSA_MMU2", "PRUSA_MMU2S", "PRUSA_MMU3", "EXTENDABLE_EMU_MMU2", "EXTENDABLE_EMU_MMU2S"]
|
||||||
*/
|
*/
|
||||||
//#define MMU_MODEL PRUSA_MMU2
|
//#define MMU_MODEL PRUSA_MMU3
|
||||||
|
|
||||||
// @section psu control
|
// @section psu control
|
||||||
|
|
||||||
@@ -400,9 +412,18 @@
|
|||||||
//#define PS_OFF_SOUND // Beep 1s 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
|
||||||
//#define PSU_POWERUP_DELAY 250 // (ms) Delay for the PSU to warm up to full power
|
//#define PSU_POWERUP_DELAY 250 // (ms) Delay for the PSU to warm up to full power
|
||||||
//#define LED_POWEROFF_TIMEOUT 10000 // (ms) Turn off LEDs after power-off, with this amount of delay
|
//#define LED_POWEROFF_TIMEOUT 10000 // (ms) Turn off LEDs after power-off, with this amount of delay
|
||||||
|
|
||||||
|
//#define PSU_OFF_REDUNDANT // Second pin for redundant power control
|
||||||
|
//#define PSU_OFF_REDUNDANT_INVERTED // Redundant pin state is the inverse of PSU_ACTIVE_STATE
|
||||||
|
|
||||||
|
//#define PS_ON1_PIN 6 // Redundant pin required to enable power in combination with PS_ON_PIN
|
||||||
|
|
||||||
|
//#define PS_ON_EDM_PIN 8 // External Device Monitoring pins for external power control relay feedback. Fault on mismatch.
|
||||||
|
//#define PS_ON1_EDM_PIN 9
|
||||||
|
#define PS_EDM_RESPONSE 250 // (ms) Time to allow for relay action
|
||||||
|
|
||||||
//#define POWER_OFF_TIMER // Enable M81 D<seconds> to power off after a delay
|
//#define POWER_OFF_TIMER // Enable M81 D<seconds> to power off after a delay
|
||||||
//#define POWER_OFF_WAIT_FOR_COOLDOWN // Enable M81 S to power off only after cooldown
|
//#define POWER_OFF_WAIT_FOR_COOLDOWN // Enable M81 S to power off only after cooldown
|
||||||
@@ -412,11 +433,12 @@
|
|||||||
|
|
||||||
//#define AUTO_POWER_CONTROL // Enable automatic control of the PS_ON pin
|
//#define AUTO_POWER_CONTROL // Enable automatic control of the PS_ON pin
|
||||||
#if ENABLED(AUTO_POWER_CONTROL)
|
#if ENABLED(AUTO_POWER_CONTROL)
|
||||||
#define AUTO_POWER_FANS // Turn on PSU if fans need power
|
#define AUTO_POWER_FANS // Turn on PSU for fans
|
||||||
#define AUTO_POWER_E_FANS
|
#define AUTO_POWER_E_FANS // Turn on PSU for E Fans
|
||||||
#define AUTO_POWER_CONTROLLERFAN
|
#define AUTO_POWER_CONTROLLERFAN // Turn on PSU for Controller Fan
|
||||||
#define AUTO_POWER_CHAMBER_FAN
|
#define AUTO_POWER_CHAMBER_FAN // Turn on PSU for Chamber Fan
|
||||||
#define AUTO_POWER_COOLER_FAN
|
#define AUTO_POWER_COOLER_FAN // Turn on PSU for Cooler Fan
|
||||||
|
#define AUTO_POWER_SPINDLE_LASER // Turn on PSU for Spindle/Laser
|
||||||
#define POWER_TIMEOUT 30 // (s) Turn off power if the machine is idle for this duration
|
#define POWER_TIMEOUT 30 // (s) Turn off power if the machine is idle for this duration
|
||||||
//#define POWER_OFF_DELAY 60 // (s) Delay of poweroff after M81 command. Useful to let fans run for extra time.
|
//#define POWER_OFF_DELAY 60 // (s) Delay of poweroff after M81 command. Useful to let fans run for extra time.
|
||||||
#endif
|
#endif
|
||||||
@@ -465,6 +487,7 @@
|
|||||||
* 13 : 100kΩ Hisens up to 300°C - for "Simple ONE" & "All In ONE" hotend - beta 3950, 1%
|
* 13 : 100kΩ Hisens up to 300°C - for "Simple ONE" & "All In ONE" hotend - beta 3950, 1%
|
||||||
* 14 : 100kΩ (R25), 4092K (beta25), 4.7kΩ pull-up, bed thermistor as used in Ender-5 S1
|
* 14 : 100kΩ (R25), 4092K (beta25), 4.7kΩ pull-up, bed thermistor as used in Ender-5 S1
|
||||||
* 15 : 100kΩ Calibrated for JGAurora A5 hotend
|
* 15 : 100kΩ Calibrated for JGAurora A5 hotend
|
||||||
|
* 17 : 100kΩ Dagoma NTC white thermistor
|
||||||
* 18 : 200kΩ ATC Semitec 204GT-2 Dagoma.Fr - MKS_Base_DKU001327
|
* 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
|
* 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
|
* 23 : 100kΩ GTM32 Pro vB - bed - 4.7kΩ pullup to 3.3v and 220Ω to analog input
|
||||||
@@ -476,6 +499,7 @@
|
|||||||
* 68 : PT100 Smplifier board from Dyze Design
|
* 68 : PT100 Smplifier board from Dyze Design
|
||||||
* 70 : 100kΩ bq Hephestos 2
|
* 70 : 100kΩ bq Hephestos 2
|
||||||
* 75 : 100kΩ Generic Silicon Heat Pad with NTC100K MGB18-104F39050L32
|
* 75 : 100kΩ Generic Silicon Heat Pad with NTC100K MGB18-104F39050L32
|
||||||
|
* 666 : 200kΩ Einstart S custom thermistor with 10k pullup.
|
||||||
* 2000 : 100kΩ Ultimachine Rambo TDK NTCG104LH104KT1 NTC100K motherboard Thermistor
|
* 2000 : 100kΩ Ultimachine Rambo TDK NTCG104LH104KT1 NTC100K motherboard Thermistor
|
||||||
*
|
*
|
||||||
* ================================================================
|
* ================================================================
|
||||||
@@ -509,10 +533,10 @@
|
|||||||
* ================================================================
|
* ================================================================
|
||||||
* SPI RTD/Thermocouple Boards
|
* SPI RTD/Thermocouple Boards
|
||||||
* ================================================================
|
* ================================================================
|
||||||
* -5 : MAX31865 with Pt100/Pt1000, 2, 3, or 4-wire (only for sensors 0-1)
|
* -5 : MAX31865 with Pt100/Pt1000, 2, 3, or 4-wire (only for sensors 0-2 and bed)
|
||||||
* NOTE: You must uncomment/set the MAX31865_*_OHMS_n defines below.
|
* NOTE: You must uncomment/set the MAX31865_*_OHMS_n defines below.
|
||||||
* -3 : MAX31855 with Thermocouple, -200°C to +700°C (only for sensors 0-1)
|
* -3 : MAX31855 with Thermocouple, -200°C to +700°C (only for sensors 0-2 and bed)
|
||||||
* -2 : MAX6675 with Thermocouple, 0°C to +700°C (only for sensors 0-1)
|
* -2 : MAX6675 with Thermocouple, 0°C to +700°C (only for sensors 0-2 and bed)
|
||||||
*
|
*
|
||||||
* NOTE: Ensure TEMP_n_CS_PIN is set in your pins file for each TEMP_SENSOR_n using an SPI Thermocouple. By default,
|
* 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,
|
* Hardware SPI on the default serial bus is used. If you have also set TEMP_n_SCK_PIN and TEMP_n_MISO_PIN,
|
||||||
@@ -659,10 +683,10 @@
|
|||||||
* MPCTEMP : Predictive Model temperature control. (~1.8K without auto-tune)
|
* MPCTEMP : Predictive Model temperature control. (~1.8K without auto-tune)
|
||||||
*/
|
*/
|
||||||
#define PIDTEMP // See the PID Tuning Guide at https://reprap.org/wiki/PID_Tuning
|
#define PIDTEMP // See the PID Tuning Guide at https://reprap.org/wiki/PID_Tuning
|
||||||
//#define MPCTEMP // ** EXPERIMENTAL ** See https://marlinfw.org/docs/features/model_predictive_control.html
|
//#define MPCTEMP // See https://marlinfw.org/docs/features/model_predictive_control.html
|
||||||
|
|
||||||
#define PID_MAX 255 // Limit hotend current while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
|
#define PID_MAX 255 // Limit hotend current while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
|
||||||
#define PID_K1 0.95 // Smoothing factor within any PID loop
|
#define PID_K1 0.95 // Smoothing factor within any PID loop
|
||||||
|
|
||||||
#if ENABLED(PIDTEMP)
|
#if ENABLED(PIDTEMP)
|
||||||
//#define PID_DEBUG // Print PID debug data to the serial port. Use 'M303 D' to toggle activation.
|
//#define PID_DEBUG // Print PID debug data to the serial port. Use 'M303 D' to toggle activation.
|
||||||
@@ -690,10 +714,13 @@
|
|||||||
* Use a physical model of the hotend to control temperature. When configured correctly this gives
|
* Use a physical model of the hotend to control temperature. When configured correctly this gives
|
||||||
* better responsiveness and stability than PID and removes the need for PID_EXTRUSION_SCALING
|
* better responsiveness and stability than PID and removes the need for PID_EXTRUSION_SCALING
|
||||||
* and PID_FAN_SCALING. Enable MPC_AUTOTUNE and use M306 T to autotune the model.
|
* and PID_FAN_SCALING. Enable MPC_AUTOTUNE and use M306 T to autotune the model.
|
||||||
* @section mpctemp
|
* @section mpc temp
|
||||||
*/
|
*/
|
||||||
#if ENABLED(MPCTEMP)
|
#if ENABLED(MPCTEMP)
|
||||||
#define MPC_AUTOTUNE // Include a method to do MPC auto-tuning (~6.3K bytes of flash)
|
#define MPC_AUTOTUNE // Include a method to do MPC auto-tuning (~6.3K bytes of flash)
|
||||||
|
#if ENABLED(MPC_AUTOTUNE)
|
||||||
|
//#define MPC_AUTOTUNE_DEBUG // Enable MPC debug logging (~870 bytes of flash)
|
||||||
|
#endif
|
||||||
//#define MPC_EDIT_MENU // Add MPC editing to the "Advanced Settings" menu. (~1.3K bytes of flash)
|
//#define MPC_EDIT_MENU // Add MPC editing to the "Advanced Settings" menu. (~1.3K bytes of flash)
|
||||||
//#define MPC_AUTOTUNE_MENU // Add MPC auto-tuning to the "Advanced Settings" menu. (~350 bytes of flash)
|
//#define MPC_AUTOTUNE_MENU // Add MPC auto-tuning to the "Advanced Settings" menu. (~350 bytes of flash)
|
||||||
|
|
||||||
@@ -775,6 +802,43 @@
|
|||||||
//#define BED_LIMIT_SWITCHING // Keep the bed temperature within BED_HYSTERESIS of the target
|
//#define BED_LIMIT_SWITCHING // Keep the bed temperature within BED_HYSTERESIS of the target
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Peltier Bed - Heating and Cooling
|
||||||
|
*
|
||||||
|
* A Peltier device transfers heat from one side to the other in proportion to the amount of
|
||||||
|
* current flowing through the device and the direction of current flow. So the same device
|
||||||
|
* can both heat and cool.
|
||||||
|
*
|
||||||
|
* When "cooling" in addition to rejecting the heat transferred from the hot side to the cold
|
||||||
|
* side, the dissipated power (voltage * current) must also be rejected. Be sure to set up a
|
||||||
|
* fan that can be powered in sync with the Peltier unit.
|
||||||
|
*
|
||||||
|
* This feature is only set up to run in bang-bang mode because Peltiers don't handle PWM
|
||||||
|
* well without filter circuitry.
|
||||||
|
*
|
||||||
|
* Since existing 3D printers are made to handle relatively high current for the heated bed,
|
||||||
|
* we can use the heated bed power pins to control the Peltier power using the same G-codes
|
||||||
|
* as the heated bed (M140, M190, etc.).
|
||||||
|
*
|
||||||
|
* A second GPIO pin is required to control current direction.
|
||||||
|
* Two configurations are possible: Relay and H-Bridge
|
||||||
|
*
|
||||||
|
* (At this time only relay is supported. H-bridge requires 4 MOS switches configured in H-Bridge.)
|
||||||
|
*
|
||||||
|
* Power is handled by the bang-bang control loop: 0 or 255.
|
||||||
|
* Cooling applications are more common than heating, so the pin states are commonly:
|
||||||
|
* LOW = Heating = Relay Energized
|
||||||
|
* HIGH = Cooling = Relay in "Normal" state
|
||||||
|
*/
|
||||||
|
//#define PELTIER_BED
|
||||||
|
#if ENABLED(PELTIER_BED)
|
||||||
|
#define PELTIER_DIR_PIN -1 // Relay control pin for Peltier
|
||||||
|
#define PELTIER_DIR_HEAT_STATE LOW // The relay pin state that causes the Peltier to heat
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Add 'M190 R T' for more gradual M190 R bed cooling.
|
||||||
|
//#define BED_ANNEALING_GCODE
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
//==================== PID > Chamber Temperature Control ====================
|
//==================== PID > Chamber Temperature Control ====================
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
@@ -812,14 +876,16 @@
|
|||||||
// Lasko "MyHeat Personal Heater" (200w) modified with a Fotek SSR-10DA to control only the heating element
|
// Lasko "MyHeat Personal Heater" (200w) modified with a Fotek SSR-10DA to control only the heating element
|
||||||
// and placed inside the small Creality printer enclosure tent.
|
// and placed inside the small Creality printer enclosure tent.
|
||||||
//
|
//
|
||||||
#define DEFAULT_chamberKp 37.04
|
#define DEFAULT_chamberKp 37.04
|
||||||
#define DEFAULT_chamberKi 1.40
|
#define DEFAULT_chamberKi 1.40
|
||||||
#define DEFAULT_chamberKd 655.17
|
#define DEFAULT_chamberKd 655.17
|
||||||
// M309 P37.04 I1.04 D655.17
|
// M309 P37.04 I1.04 D655.17
|
||||||
|
|
||||||
// FIND YOUR OWN: "M303 E-2 C8 S50" to run autotune on the chamber at 50 degreesC for 8 cycles.
|
// FIND YOUR OWN: "M303 E-2 C8 S50" to run autotune on the chamber at 50 degreesC for 8 cycles.
|
||||||
#endif // PIDTEMPCHAMBER
|
#endif // PIDTEMPCHAMBER
|
||||||
|
|
||||||
|
// @section pid temp
|
||||||
|
|
||||||
#if ANY(PIDTEMP, PIDTEMPBED, PIDTEMPCHAMBER)
|
#if ANY(PIDTEMP, PIDTEMPBED, PIDTEMPCHAMBER)
|
||||||
//#define PID_OPENLOOP // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
|
//#define PID_OPENLOOP // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
|
||||||
//#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
|
//#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
|
||||||
@@ -885,8 +951,16 @@
|
|||||||
//#define COREYX
|
//#define COREYX
|
||||||
//#define COREZX
|
//#define COREZX
|
||||||
//#define COREZY
|
//#define COREZY
|
||||||
//#define MARKFORGED_XY // MarkForged. See https://reprap.org/forum/read.php?152,504042
|
|
||||||
|
//
|
||||||
|
// MarkForged Kinematics
|
||||||
|
// See https://reprap.org/forum/read.php?152,504042
|
||||||
|
//
|
||||||
|
//#define MARKFORGED_XY
|
||||||
//#define MARKFORGED_YX
|
//#define MARKFORGED_YX
|
||||||
|
#if ANY(MARKFORGED_XY, MARKFORGED_YX)
|
||||||
|
//#define MARKFORGED_INVERSE // Enable for an inverted Markforged kinematics belt path
|
||||||
|
#endif
|
||||||
|
|
||||||
// Enable for a belt style printer with endless "Z" motion
|
// Enable for a belt style printer with endless "Z" motion
|
||||||
//#define BELTPRINTER
|
//#define BELTPRINTER
|
||||||
@@ -943,7 +1017,7 @@
|
|||||||
// Distance between bed and nozzle Z home position
|
// Distance between bed and nozzle Z home position
|
||||||
#define DELTA_HEIGHT 250.00 // (mm) Get this value from G33 auto calibrate
|
#define DELTA_HEIGHT 250.00 // (mm) Get this value from G33 auto calibrate
|
||||||
|
|
||||||
#define DELTA_ENDSTOP_ADJ { 0.0, 0.0, 0.0 } // Get these values from G33 auto calibrate
|
#define DELTA_ENDSTOP_ADJ { 0.0, 0.0, 0.0 } // (mm) Get these values from G33 auto calibrate
|
||||||
|
|
||||||
// Horizontal distance bridged by diagonal push rods when effector is centered.
|
// Horizontal distance bridged by diagonal push rods when effector is centered.
|
||||||
#define DELTA_RADIUS 124.0 // (mm) Get this value from G33 auto calibrate
|
#define DELTA_RADIUS 124.0 // (mm) Get this value from G33 auto calibrate
|
||||||
@@ -951,11 +1025,11 @@
|
|||||||
// Trim adjustments for individual towers
|
// Trim adjustments for individual towers
|
||||||
// tower angle corrections for X and Y tower / rotate XYZ so Z tower angle = 0
|
// tower angle corrections for X and Y tower / rotate XYZ so Z tower angle = 0
|
||||||
// measured in degrees anticlockwise looking from above the printer
|
// measured in degrees anticlockwise looking from above the printer
|
||||||
#define DELTA_TOWER_ANGLE_TRIM { 0.0, 0.0, 0.0 } // Get these values from G33 auto calibrate
|
#define DELTA_TOWER_ANGLE_TRIM { 0.0, 0.0, 0.0 } // (mm) Get these values from G33 auto calibrate
|
||||||
|
|
||||||
// Delta radius and diagonal rod adjustments (mm)
|
// Delta radius and diagonal rod adjustments
|
||||||
//#define DELTA_RADIUS_TRIM_TOWER { 0.0, 0.0, 0.0 }
|
//#define DELTA_RADIUS_TRIM_TOWER { 0.0, 0.0, 0.0 } // (mm)
|
||||||
//#define DELTA_DIAGONAL_ROD_TRIM_TOWER { 0.0, 0.0, 0.0 }
|
//#define DELTA_DIAGONAL_ROD_TRIM_TOWER { 0.0, 0.0, 0.0 } // (mm)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// @section scara
|
// @section scara
|
||||||
@@ -991,9 +1065,6 @@
|
|||||||
// Radius around the center where the arm cannot reach
|
// Radius around the center where the arm cannot reach
|
||||||
#define MIDDLE_DEAD_ZONE_R 0 // (mm)
|
#define MIDDLE_DEAD_ZONE_R 0 // (mm)
|
||||||
|
|
||||||
#define THETA_HOMING_OFFSET 0 // Calculated from Calibration Guide and M360 / M114. See https://www.morgan3dp.com/morgan-calibration-guide/
|
|
||||||
#define PSI_HOMING_OFFSET 0 // Calculated from Calibration Guide and M364 / M114. See https://www.morgan3dp.com/morgan-calibration-guide/
|
|
||||||
|
|
||||||
#elif ENABLED(MP_SCARA)
|
#elif ENABLED(MP_SCARA)
|
||||||
|
|
||||||
#define SCARA_OFFSET_THETA1 12 // degrees
|
#define SCARA_OFFSET_THETA1 12 // degrees
|
||||||
@@ -1012,23 +1083,19 @@
|
|||||||
#define DEFAULT_SEGMENTS_PER_SECOND 200
|
#define DEFAULT_SEGMENTS_PER_SECOND 200
|
||||||
|
|
||||||
// Length of inner and outer support arms. Measure arm lengths precisely.
|
// Length of inner and outer support arms. Measure arm lengths precisely.
|
||||||
#define TPARA_LINKAGE_1 120 // (mm)
|
#define TPARA_LINKAGE_1 120 // (mm)
|
||||||
#define TPARA_LINKAGE_2 120 // (mm)
|
#define TPARA_LINKAGE_2 120 // (mm)
|
||||||
|
|
||||||
// SCARA tower offset (position of Tower relative to bed zero position)
|
// TPARA tower offset (position of Tower relative to bed zero position)
|
||||||
// This needs to be reasonably accurate as it defines the printbed position in the SCARA space.
|
// This needs to be reasonably accurate as it defines the printbed position in the TPARA space.
|
||||||
#define TPARA_OFFSET_X 0 // (mm)
|
#define TPARA_OFFSET_X 0 // (mm)
|
||||||
#define TPARA_OFFSET_Y 0 // (mm)
|
#define TPARA_OFFSET_Y 0 // (mm)
|
||||||
#define TPARA_OFFSET_Z 0 // (mm)
|
#define TPARA_OFFSET_Z 0 // (mm)
|
||||||
|
|
||||||
#define FEEDRATE_SCALING // Convert XY feedrate from mm/s to degrees/s on the fly
|
#define FEEDRATE_SCALING // Convert XY feedrate from mm/s to degrees/s on the fly
|
||||||
|
|
||||||
// Radius around the center where the arm cannot reach
|
// Radius around the center where the arm cannot reach
|
||||||
#define MIDDLE_DEAD_ZONE_R 0 // (mm)
|
#define MIDDLE_DEAD_ZONE_R 0 // (mm)
|
||||||
|
|
||||||
// Calculated from Calibration Guide and M360 / M114. See https://www.morgan3dp.com/morgan-calibration-guide/
|
|
||||||
#define THETA_HOMING_OFFSET 0
|
|
||||||
#define PSI_HOMING_OFFSET 0
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// @section polar
|
// @section polar
|
||||||
@@ -1216,11 +1283,16 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Default Axis Steps Per Unit (linear=steps/mm, rotational=steps/°)
|
* Default Axis Steps Per Unit (linear=steps/mm, rotational=steps/°)
|
||||||
* Override with M92
|
* Override with M92 (when enabled below)
|
||||||
* X, Y, Z [, I [, J [, K...]]], 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 }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enable support for M92. Disable to save at least ~530 bytes of flash.
|
||||||
|
*/
|
||||||
|
#define EDITABLE_STEPS_PER_UNIT
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default Max Feed Rate (linear=mm/s, rotational=°/s)
|
* Default Max Feed Rate (linear=mm/s, rotational=°/s)
|
||||||
* Override with M203
|
* Override with M203
|
||||||
@@ -1271,6 +1343,7 @@
|
|||||||
#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_EJERK 5.0
|
||||||
//#define DEFAULT_IJERK 0.3
|
//#define DEFAULT_IJERK 0.3
|
||||||
//#define DEFAULT_JJERK 0.3
|
//#define DEFAULT_JJERK 0.3
|
||||||
//#define DEFAULT_KJERK 0.3
|
//#define DEFAULT_KJERK 0.3
|
||||||
@@ -1286,8 +1359,6 @@
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define DEFAULT_EJERK 5.0 // May be used by Linear Advance
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Junction Deviation Factor
|
* Junction Deviation Factor
|
||||||
*
|
*
|
||||||
@@ -1415,6 +1486,30 @@
|
|||||||
//#define TOUCH_MI_MANUAL_DEPLOY // For manual deploy (LCD menu)
|
//#define TOUCH_MI_MANUAL_DEPLOY // For manual deploy (LCD menu)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Bed Distance Sensor
|
||||||
|
*
|
||||||
|
* Measures the distance from bed to nozzle with accuracy of 0.01mm.
|
||||||
|
* For information about this sensor https://github.com/markniu/Bed_Distance_sensor
|
||||||
|
* Uses I2C port, so it requires I2C library markyue/Panda_SoftMasterI2C.
|
||||||
|
*/
|
||||||
|
//#define BD_SENSOR
|
||||||
|
#if ENABLED(BD_SENSOR)
|
||||||
|
//#define BD_SENSOR_PROBE_NO_STOP // Probe bed without stopping at each probe point
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* BIQU MicroProbe
|
||||||
|
*
|
||||||
|
* A lightweight, solenoid-driven probe.
|
||||||
|
* For information about this sensor https://github.com/bigtreetech/MicroProbe
|
||||||
|
*
|
||||||
|
* Also requires PROBE_ENABLE_DISABLE
|
||||||
|
* With FT_MOTION requires ENDSTOP_INTERRUPTS_FEATURE
|
||||||
|
*/
|
||||||
|
//#define BIQU_MICROPROBE_V1 // Triggers HIGH
|
||||||
|
//#define BIQU_MICROPROBE_V2 // Triggers LOW
|
||||||
|
|
||||||
// A probe that is deployed and stowed with a solenoid pin (SOL1_PIN)
|
// A probe that is deployed and stowed with a solenoid pin (SOL1_PIN)
|
||||||
//#define SOLENOID_PROBE
|
//#define SOLENOID_PROBE
|
||||||
|
|
||||||
@@ -1513,7 +1608,7 @@
|
|||||||
*
|
*
|
||||||
* Tune and Adjust
|
* Tune and Adjust
|
||||||
* - Probe Offsets can be tuned at runtime with 'M851', LCD menus, babystepping, etc.
|
* - Probe Offsets can be tuned at runtime with 'M851', LCD menus, babystepping, etc.
|
||||||
* - PROBE_OFFSET_WIZARD (configuration_adv.h) can be used for setting the Z offset.
|
* - PROBE_OFFSET_WIZARD (Configuration_adv.h) can be used for setting the Z offset.
|
||||||
*
|
*
|
||||||
* Assuming the typical work area orientation:
|
* Assuming the typical work area orientation:
|
||||||
* - Probe to RIGHT of the Nozzle has a Positive X offset
|
* - Probe to RIGHT of the Nozzle has a Positive X offset
|
||||||
@@ -1549,7 +1644,8 @@
|
|||||||
// with NOZZLE_AS_PROBE this can be negative for a wider probing area.
|
// with NOZZLE_AS_PROBE this can be negative for a wider probing area.
|
||||||
#define PROBING_MARGIN 10
|
#define PROBING_MARGIN 10
|
||||||
|
|
||||||
// X and Y axis travel speed (mm/min) between probes
|
// X and Y axis travel speed (mm/min) between probes.
|
||||||
|
// Leave undefined to use the average of the current XY homing feedrate.
|
||||||
#define XY_PROBE_FEEDRATE (133*60)
|
#define XY_PROBE_FEEDRATE (133*60)
|
||||||
|
|
||||||
// Feedrate (mm/min) for the first approach when double-probing (MULTIPLE_PROBING == 2)
|
// Feedrate (mm/min) for the first approach when double-probing (MULTIPLE_PROBING == 2)
|
||||||
@@ -1580,6 +1676,7 @@
|
|||||||
#define PROBE_TARE_DELAY 200 // (ms) Delay after tare before
|
#define PROBE_TARE_DELAY 200 // (ms) Delay after tare before
|
||||||
#define PROBE_TARE_STATE HIGH // State to write pin for tare
|
#define PROBE_TARE_STATE HIGH // State to write pin for tare
|
||||||
//#define PROBE_TARE_PIN PA5 // Override default pin
|
//#define PROBE_TARE_PIN PA5 // Override default pin
|
||||||
|
//#define PROBE_TARE_MENU // Display a menu item to tare the probe
|
||||||
#if ENABLED(PROBE_ACTIVATION_SWITCH)
|
#if ENABLED(PROBE_ACTIVATION_SWITCH)
|
||||||
//#define PROBE_TARE_ONLY_WHILE_INACTIVE // Fail to tare/probe if PROBE_ACTIVATION_SWITCH is active
|
//#define PROBE_TARE_ONLY_WHILE_INACTIVE // Fail to tare/probe if PROBE_ACTIVATION_SWITCH is active
|
||||||
#endif
|
#endif
|
||||||
@@ -1617,19 +1714,24 @@
|
|||||||
* probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD.
|
* probe Z Offset set with NOZZLE_TO_PROBE_OFFSET, M851, or the LCD.
|
||||||
* Only integer values >= 1 are valid here.
|
* Only integer values >= 1 are valid here.
|
||||||
*
|
*
|
||||||
* Example: `M851 Z-5` with a CLEARANCE of 4 => 9mm from bed to nozzle.
|
* Example: 'M851 Z-5' with a CLEARANCE of 4 => 9mm from bed to nozzle.
|
||||||
* But: `M851 Z+1` with a CLEARANCE of 2 => 2mm from bed to nozzle.
|
* But: 'M851 Z+1' with a CLEARANCE of 2 => 2mm from bed to nozzle.
|
||||||
*/
|
*/
|
||||||
#define Z_CLEARANCE_DEPLOY_PROBE 10 // Z Clearance for Deploy/Stow
|
#define Z_CLEARANCE_DEPLOY_PROBE 10 // (mm) Z Clearance for Deploy/Stow
|
||||||
#define Z_CLEARANCE_BETWEEN_PROBES 5 // Z Clearance between probe points
|
#define Z_CLEARANCE_BETWEEN_PROBES 5 // (mm) Z Clearance between probe points
|
||||||
#define Z_CLEARANCE_MULTI_PROBE 5 // Z Clearance between multiple probes
|
#define Z_CLEARANCE_MULTI_PROBE 5 // (mm) Z Clearance between multiple probes
|
||||||
//#define Z_AFTER_PROBING 5 // Z position after probing is done
|
#define Z_PROBE_ERROR_TOLERANCE 3 // (mm) Tolerance for early trigger (<= -probe.offset.z + ZPET)
|
||||||
|
//#define Z_AFTER_PROBING 5 // (mm) Z position after probing is done
|
||||||
|
|
||||||
#define Z_PROBE_LOW_POINT -2 // Farthest distance below the trigger-point to go before stopping
|
#define Z_PROBE_LOW_POINT -2 // (mm) Farthest distance below the trigger-point to go before stopping
|
||||||
|
|
||||||
// For M851 give a range for adjusting the Z probe offset
|
// For M851 provide ranges for adjusting the X, Y, and Z probe offsets
|
||||||
#define Z_PROBE_OFFSET_RANGE_MIN -20
|
//#define PROBE_OFFSET_XMIN -50 // (mm)
|
||||||
#define Z_PROBE_OFFSET_RANGE_MAX 20
|
//#define PROBE_OFFSET_XMAX 50 // (mm)
|
||||||
|
//#define PROBE_OFFSET_YMIN -50 // (mm)
|
||||||
|
//#define PROBE_OFFSET_YMAX 50 // (mm)
|
||||||
|
//#define PROBE_OFFSET_ZMIN -20 // (mm)
|
||||||
|
//#define PROBE_OFFSET_ZMAX 20 // (mm)
|
||||||
|
|
||||||
// Enable the M48 repeatability test to test probe accuracy
|
// Enable the M48 repeatability test to test probe accuracy
|
||||||
//#define Z_MIN_PROBE_REPEATABILITY_TEST
|
//#define Z_MIN_PROBE_REPEATABILITY_TEST
|
||||||
@@ -1664,6 +1766,8 @@
|
|||||||
#define PROBING_BED_TEMP 50
|
#define PROBING_BED_TEMP 50
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// @section stepper drivers
|
||||||
|
|
||||||
// For Inverting Stepper Enable Pins (Active Low) use 0, Non Inverting (Active High) use 1
|
// For Inverting Stepper Enable Pins (Active Low) use 0, Non Inverting (Active High) use 1
|
||||||
// :{ 0:'Low', 1:'High' }
|
// :{ 0:'Low', 1:'High' }
|
||||||
#define X_ENABLE_ON 0
|
#define X_ENABLE_ON 0
|
||||||
@@ -1734,10 +1838,13 @@
|
|||||||
*/
|
*/
|
||||||
//#define Z_IDLE_HEIGHT Z_HOME_POS
|
//#define Z_IDLE_HEIGHT Z_HOME_POS
|
||||||
|
|
||||||
//#define Z_CLEARANCE_FOR_HOMING 4 // (mm) Minimal Z height before homing (G28) for Z clearance above the bed, clamps, ...
|
//#define Z_CLEARANCE_FOR_HOMING 4 // (mm) Minimal Z height before homing (G28) for Z clearance above the bed, clamps, ...
|
||||||
// Be sure to have this much clearance over your Z_MAX_POS to prevent grinding.
|
// You'll need this much clearance above Z_MAX_POS to avoid grinding.
|
||||||
|
|
||||||
//#define Z_AFTER_HOMING 10 // (mm) Height to move to after homing (if Z was homed)
|
//#define Z_AFTER_HOMING 10 // (mm) Height to move to after homing (if Z was homed)
|
||||||
|
//#define XY_AFTER_HOMING { 10, 10 } // (mm) Move to an XY position after homing (and raising Z)
|
||||||
|
|
||||||
|
//#define EVENT_GCODE_AFTER_HOMING "M300 P440 S200" // Commands to run after G28 (and move to XY_AFTER_HOMING)
|
||||||
|
|
||||||
// Direction of endstops when homing; 1=MAX, -1=MIN
|
// Direction of endstops when homing; 1=MAX, -1=MIN
|
||||||
// :[-1,1]
|
// :[-1,1]
|
||||||
@@ -1834,6 +1941,8 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @section filament runout sensors
|
||||||
|
*
|
||||||
* Filament Runout Sensors
|
* Filament Runout Sensors
|
||||||
* Mechanical or opto endstops are used to check for the presence of filament.
|
* Mechanical or opto endstops are used to check for the presence of filament.
|
||||||
*
|
*
|
||||||
@@ -1993,6 +2102,12 @@
|
|||||||
//#define AUTO_BED_LEVELING_UBL
|
//#define AUTO_BED_LEVELING_UBL
|
||||||
//#define MESH_BED_LEVELING
|
//#define MESH_BED_LEVELING
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Commands to execute at the end of G29 probing.
|
||||||
|
* Useful to retract or move the Z probe out of the way.
|
||||||
|
*/
|
||||||
|
//#define EVENT_GCODE_AFTER_G29 "G1 Z10 F12000\nG1 X15 Y330\nG1 Z0.5\nG1 Z10"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Normally G28 leaves leveling disabled on completion. Enable one of
|
* Normally G28 leaves leveling disabled on completion. Enable one of
|
||||||
* these options to restore the prior leveling state or to always enable
|
* these options to restore the prior leveling state or to always enable
|
||||||
@@ -2010,19 +2125,10 @@
|
|||||||
#define LEVELING_BED_TEMP 50
|
#define LEVELING_BED_TEMP 50
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
|
||||||
* Bed Distance Sensor
|
|
||||||
*
|
|
||||||
* Measures the distance from bed to nozzle with accuracy of 0.01mm.
|
|
||||||
* For information about this sensor https://github.com/markniu/Bed_Distance_sensor
|
|
||||||
* Uses I2C port, so it requires I2C library markyue/Panda_SoftMasterI2C.
|
|
||||||
*/
|
|
||||||
//#define BD_SENSOR
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Enable detailed logging of G28, G29, M48, etc.
|
* Enable detailed logging of G28, G29, M48, etc.
|
||||||
* Turn on with the command 'M111 S32'.
|
* Turn on with the command 'M111 S32'.
|
||||||
* NOTE: Requires a lot of PROGMEM!
|
* NOTE: Requires a lot of flash!
|
||||||
*/
|
*/
|
||||||
//#define DEBUG_LEVELING_FEATURE
|
//#define DEBUG_LEVELING_FEATURE
|
||||||
|
|
||||||
@@ -2169,7 +2275,7 @@
|
|||||||
#if ENABLED(LCD_BED_TRAMMING)
|
#if ENABLED(LCD_BED_TRAMMING)
|
||||||
#define BED_TRAMMING_INSET_LFRB { 30, 30, 30, 30 } // (mm) Left, Front, Right, Back insets
|
#define BED_TRAMMING_INSET_LFRB { 30, 30, 30, 30 } // (mm) Left, Front, Right, Back insets
|
||||||
#define BED_TRAMMING_HEIGHT 0.0 // (mm) Z height of nozzle at tramming points
|
#define BED_TRAMMING_HEIGHT 0.0 // (mm) Z height of nozzle at tramming points
|
||||||
#define BED_TRAMMING_Z_HOP 4.0 // (mm) Z height of nozzle between tramming points
|
#define BED_TRAMMING_Z_HOP 4.0 // (mm) Z raise between tramming points
|
||||||
//#define BED_TRAMMING_INCLUDE_CENTER // Move to the center after the last corner
|
//#define BED_TRAMMING_INCLUDE_CENTER // Move to the center after the last corner
|
||||||
//#define BED_TRAMMING_USE_PROBE
|
//#define BED_TRAMMING_USE_PROBE
|
||||||
#if ENABLED(BED_TRAMMING_USE_PROBE)
|
#if ENABLED(BED_TRAMMING_USE_PROBE)
|
||||||
@@ -2198,12 +2304,6 @@
|
|||||||
#define BED_TRAMMING_LEVELING_ORDER { LF, RF, RB, LB }
|
#define BED_TRAMMING_LEVELING_ORDER { LF, RF, RB, LB }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
|
||||||
* Commands to execute at the end of G29 probing.
|
|
||||||
* Useful to retract or move the Z probe out of the way.
|
|
||||||
*/
|
|
||||||
//#define Z_PROBE_END_SCRIPT "G1 Z10 F12000\nG1 X15 Y330\nG1 Z0.5\nG1 Z10"
|
|
||||||
|
|
||||||
// @section homing
|
// @section homing
|
||||||
|
|
||||||
// The center of the bed is at (X=0, Y=0)
|
// The center of the bed is at (X=0, Y=0)
|
||||||
@@ -2231,14 +2331,17 @@
|
|||||||
//#define Z_SAFE_HOMING
|
//#define Z_SAFE_HOMING
|
||||||
|
|
||||||
#if ENABLED(Z_SAFE_HOMING)
|
#if ENABLED(Z_SAFE_HOMING)
|
||||||
#define Z_SAFE_HOMING_X_POINT X_CENTER // X point for Z homing
|
#define Z_SAFE_HOMING_X_POINT X_CENTER // (mm) X point for Z homing
|
||||||
#define Z_SAFE_HOMING_Y_POINT Y_CENTER // Y point for Z homing
|
#define Z_SAFE_HOMING_Y_POINT Y_CENTER // (mm) Y point for Z homing
|
||||||
//#define Z_SAFE_HOMING_POINT_ABSOLUTE // Ignore home offsets (M206) for Z homing position
|
//#define Z_SAFE_HOMING_POINT_ABSOLUTE // Ignore home offsets (M206) for Z homing position
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Homing speeds (linear=mm/min, rotational=°/min)
|
// Homing speeds (linear=mm/min, rotational=°/min)
|
||||||
#define HOMING_FEEDRATE_MM_M { (50*60), (50*60), (4*60) }
|
#define HOMING_FEEDRATE_MM_M { (50*60), (50*60), (4*60) }
|
||||||
|
|
||||||
|
// Edit homing feedrates with M210 and MarlinUI menu items
|
||||||
|
//#define EDITABLE_HOMING_FEEDRATE
|
||||||
|
|
||||||
// Validate that endstops are triggered on homing moves
|
// Validate that endstops are triggered on homing moves
|
||||||
#define VALIDATE_HOMING_ENDSTOPS
|
#define VALIDATE_HOMING_ENDSTOPS
|
||||||
|
|
||||||
@@ -2317,7 +2420,7 @@
|
|||||||
*/
|
*/
|
||||||
//#define EEPROM_SETTINGS // Persistent storage with M500 and M501
|
//#define EEPROM_SETTINGS // Persistent storage with M500 and M501
|
||||||
//#define DISABLE_M503 // Saves ~2700 bytes of flash. Disable for release!
|
//#define DISABLE_M503 // Saves ~2700 bytes of flash. Disable for release!
|
||||||
#define EEPROM_CHITCHAT // Give feedback on EEPROM commands. Disable to save PROGMEM.
|
#define EEPROM_CHITCHAT // Give feedback on EEPROM commands. Disable to save flash.
|
||||||
#define EEPROM_BOOT_SILENT // Keep M503 quiet and only give errors during first load
|
#define EEPROM_BOOT_SILENT // Keep M503 quiet and only give errors during first load
|
||||||
#if ENABLED(EEPROM_SETTINGS)
|
#if ENABLED(EEPROM_SETTINGS)
|
||||||
//#define EEPROM_AUTO_INIT // Init EEPROM automatically on any errors.
|
//#define EEPROM_AUTO_INIT // Init EEPROM automatically on any errors.
|
||||||
@@ -2365,9 +2468,9 @@
|
|||||||
#define PREHEAT_2_TEMP_CHAMBER 35
|
#define PREHEAT_2_TEMP_CHAMBER 35
|
||||||
#define PREHEAT_2_FAN_SPEED 0 // Value from 0 to 255
|
#define PREHEAT_2_FAN_SPEED 0 // Value from 0 to 255
|
||||||
|
|
||||||
// @section motion
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @section nozzle park
|
||||||
|
*
|
||||||
* Nozzle Park
|
* Nozzle Park
|
||||||
*
|
*
|
||||||
* Park the nozzle at the given XYZ position on idle or G27.
|
* Park the nozzle at the given XYZ position on idle or G27.
|
||||||
@@ -2390,6 +2493,8 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @section nozzle clean
|
||||||
|
*
|
||||||
* Clean Nozzle Feature
|
* Clean Nozzle Feature
|
||||||
*
|
*
|
||||||
* Adds the G12 command to perform a nozzle cleaning process.
|
* Adds the G12 command to perform a nozzle cleaning process.
|
||||||
@@ -2550,9 +2655,24 @@
|
|||||||
//#include "Configuration_Secure.h" // External file with PASSWORD_DEFAULT_VALUE
|
//#include "Configuration_Secure.h" // External file with PASSWORD_DEFAULT_VALUE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//=============================================================================
|
// @section media
|
||||||
//============================= LCD and SD support ============================
|
|
||||||
//=============================================================================
|
/**
|
||||||
|
* SD CARD
|
||||||
|
*
|
||||||
|
* SD Card support is disabled by default. If your controller has an SD slot,
|
||||||
|
* you must uncomment the following option or it won't work.
|
||||||
|
*/
|
||||||
|
//#define SDSUPPORT
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SD CARD: ENABLE CRC
|
||||||
|
*
|
||||||
|
* Use CRC checks and retries on the SD communication.
|
||||||
|
*/
|
||||||
|
#if ENABLED(SDSUPPORT)
|
||||||
|
//#define SD_CHECK_AND_RETRY
|
||||||
|
#endif
|
||||||
|
|
||||||
// @section interface
|
// @section interface
|
||||||
|
|
||||||
@@ -2593,27 +2713,12 @@
|
|||||||
#define DISPLAY_CHARSET_HD44780 JAPANESE
|
#define DISPLAY_CHARSET_HD44780 JAPANESE
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Info Screen Style (0:Classic, 1:Průša)
|
* Info Screen Style (0:Classic, 1:Průša, 2:CNC)
|
||||||
*
|
*
|
||||||
* :[0:'Classic', 1:'Průša']
|
* :[0:'Classic', 1:'Průša', 2:'CNC']
|
||||||
*/
|
*/
|
||||||
#define LCD_INFO_SCREEN_STYLE 0
|
#define LCD_INFO_SCREEN_STYLE 0
|
||||||
|
|
||||||
/**
|
|
||||||
* SD CARD
|
|
||||||
*
|
|
||||||
* SD Card support is disabled by default. If your controller has an SD slot,
|
|
||||||
* you must uncomment the following option or it won't work.
|
|
||||||
*/
|
|
||||||
//#define SDSUPPORT
|
|
||||||
|
|
||||||
/**
|
|
||||||
* SD CARD: ENABLE CRC
|
|
||||||
*
|
|
||||||
* Use CRC checks and retries on the SD communication.
|
|
||||||
*/
|
|
||||||
//#define SD_CHECK_AND_RETRY
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* LCD Menu Items
|
* LCD Menu Items
|
||||||
*
|
*
|
||||||
@@ -2742,7 +2847,7 @@
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Original RADDS LCD Display+Encoder+SDCardReader
|
// Original RADDS LCD Display+Encoder+SDCardReader
|
||||||
// https://web.archive.org/web/20200719145306/http://doku.radds.org/dokumentation/lcd-display/
|
// https://web.archive.org/web/20200719145306/doku.radds.org/dokumentation/lcd-display/
|
||||||
//
|
//
|
||||||
//#define RADDS_DISPLAY
|
//#define RADDS_DISPLAY
|
||||||
|
|
||||||
@@ -2808,7 +2913,7 @@
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Elefu RA Board Control Panel
|
// Elefu RA Board Control Panel
|
||||||
// https://web.archive.org/web/20140823033947/http://www.elefu.com/index.php?route=product/product&product_id=53
|
// https://web.archive.org/web/20140823033947/www.elefu.com/index.php?route=product/product&product_id=53
|
||||||
//
|
//
|
||||||
//#define RA_CONTROL_PANEL
|
//#define RA_CONTROL_PANEL
|
||||||
|
|
||||||
@@ -2940,7 +3045,7 @@
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Cartesio UI
|
// Cartesio UI
|
||||||
// https://web.archive.org/web/20180605050442/http://mauk.cc/webshop/cartesio-shop/electronics/user-interface
|
// https://web.archive.org/web/20180605050442/mauk.cc/webshop/cartesio-shop/electronics/user-interface
|
||||||
//
|
//
|
||||||
//#define CARTESIO_UI
|
//#define CARTESIO_UI
|
||||||
|
|
||||||
@@ -2984,14 +3089,19 @@
|
|||||||
//#define FYSETC_GENERIC_12864_1_1 // Larger display with basic ON/OFF backlight.
|
//#define FYSETC_GENERIC_12864_1_1 // Larger display with basic ON/OFF backlight.
|
||||||
|
|
||||||
//
|
//
|
||||||
// BigTreeTech Mini 12864 V1.0 is an alias for FYSETC_MINI_12864_2_1. Type A/B. NeoPixel RGB Backlight.
|
// BigTreeTech Mini 12864 V1.0 / V2.0 is an alias for FYSETC_MINI_12864_2_1. Type A/B. NeoPixel RGB Backlight.
|
||||||
// https://github.com/bigtreetech/MINI-12864/tree/master/mini12864_v1.0
|
// https://github.com/bigtreetech/MINI-12864
|
||||||
//
|
//
|
||||||
//#define BTT_MINI_12864_V1
|
//#define BTT_MINI_12864
|
||||||
|
|
||||||
|
//
|
||||||
|
// BEEZ MINI 12864 is an alias for FYSETC_MINI_12864_2_1. Type A/B. NeoPixel RGB Backlight.
|
||||||
|
//
|
||||||
|
//#define BEEZ_MINI_12864
|
||||||
|
|
||||||
//
|
//
|
||||||
// Factory display for Creality CR-10 / CR-7 / Ender-3
|
// Factory display for Creality CR-10 / CR-7 / Ender-3
|
||||||
// https://www.aliexpress.com/item/32833148327.html
|
// https://marlinfw.org/docs/hardware/controllers.html#cr10_stockdisplay
|
||||||
//
|
//
|
||||||
// Connect to EXP1 on RAMPS and compatible boards.
|
// Connect to EXP1 on RAMPS and compatible boards.
|
||||||
//
|
//
|
||||||
@@ -3003,14 +3113,14 @@
|
|||||||
//#define ENDER2_STOCKDISPLAY
|
//#define ENDER2_STOCKDISPLAY
|
||||||
|
|
||||||
//
|
//
|
||||||
// ANET and Tronxy Graphical Controller
|
// ANET and Tronxy 128×64 Full Graphics Controller as used on Anet A6
|
||||||
//
|
|
||||||
// Anet 128x64 full graphics lcd with rotary encoder as used on Anet A6
|
|
||||||
// A clone of the RepRapDiscount full graphics display but with
|
|
||||||
// different pins/wiring (see pins_ANET_10.h). Enable one of these.
|
|
||||||
//
|
//
|
||||||
//#define ANET_FULL_GRAPHICS_LCD
|
//#define ANET_FULL_GRAPHICS_LCD
|
||||||
//#define ANET_FULL_GRAPHICS_LCD_ALT_WIRING
|
|
||||||
|
//
|
||||||
|
// GUCOCO CTC 128×64 Full Graphics Controller as used on GUCOCO CTC A10S
|
||||||
|
//
|
||||||
|
//#define CTC_A10S_A13
|
||||||
|
|
||||||
//
|
//
|
||||||
// AZSMZ 12864 LCD with SD
|
// AZSMZ 12864 LCD with SD
|
||||||
@@ -3172,6 +3282,11 @@
|
|||||||
//
|
//
|
||||||
//#define ANYCUBIC_LCD_VYPER
|
//#define ANYCUBIC_LCD_VYPER
|
||||||
|
|
||||||
|
//
|
||||||
|
// Sovol SV-06 Resistive Touch Screen
|
||||||
|
//
|
||||||
|
//#define SOVOL_SV06_RTS
|
||||||
|
|
||||||
//
|
//
|
||||||
// 320x240 Nextion 2.8" serial TFT Resistive Touch Screen NX3224T028
|
// 320x240 Nextion 2.8" serial TFT Resistive Touch Screen NX3224T028
|
||||||
//
|
//
|
||||||
@@ -3367,8 +3482,9 @@
|
|||||||
#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 DISABLE_ENCODER // Disable the click encoder, if any
|
#if ANY(TFT_CLASSIC_UI, TFT_COLOR_UI)
|
||||||
//#define TOUCH_IDLE_SLEEP_MINS 5 // (minutes) Display Sleep after a period of inactivity. Set with M255 S.
|
//#define NO_BACK_MENU_ITEM // Don't display a top menu item to go back to the parent menu
|
||||||
|
#endif
|
||||||
|
|
||||||
#define TOUCH_SCREEN_CALIBRATION
|
#define TOUCH_SCREEN_CALIBRATION
|
||||||
|
|
||||||
|
|||||||
+499
-247
File diff suppressed because it is too large
Load Diff
+108
-77
@@ -187,6 +187,17 @@ else ifeq ($(HARDWARE_MOTHERBOARD),1033)
|
|||||||
# RAMPS Plus 3DYMY (Power outputs: Spindle, Controller Fan)
|
# RAMPS Plus 3DYMY (Power outputs: Spindle, Controller Fan)
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1034)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1034)
|
||||||
|
|
||||||
|
# RAMPS 1.6+ (Power outputs: Hotend, Fan, Bed)
|
||||||
|
else ifeq ($(HARDWARE_MOTHERBOARD),1035)
|
||||||
|
# RAMPS 1.6+ (Power outputs: Hotend0, Hotend1, Bed)
|
||||||
|
else ifeq ($(HARDWARE_MOTHERBOARD),1036)
|
||||||
|
# RAMPS 1.6+ (Power outputs: Hotend, Fan0, Fan1)
|
||||||
|
else ifeq ($(HARDWARE_MOTHERBOARD),1037)
|
||||||
|
# RAMPS 1.6+ (Power outputs: Hotend0, Hotend1, Fan)
|
||||||
|
else ifeq ($(HARDWARE_MOTHERBOARD),1038)
|
||||||
|
# RAMPS 1.6+ (Power outputs: Spindle, Controller Fan)
|
||||||
|
else ifeq ($(HARDWARE_MOTHERBOARD),1039)
|
||||||
|
|
||||||
#
|
#
|
||||||
# RAMPS Derivatives - ATmega1280, ATmega2560
|
# RAMPS Derivatives - ATmega1280, ATmega2560
|
||||||
#
|
#
|
||||||
@@ -221,108 +232,113 @@ else ifeq ($(HARDWARE_MOTHERBOARD),1112)
|
|||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1113)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1113)
|
||||||
# BigTreeTech or BIQU KFB2.0
|
# BigTreeTech or BIQU KFB2.0
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1114)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1114)
|
||||||
# zrib V2.0 (Chinese RAMPS replica)
|
# Zonestar zrib V2.0 (Chinese RAMPS replica)
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1115)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1115)
|
||||||
# zrib V5.2 (Chinese RAMPS replica)
|
# Zonestar zrib V5.2 (Chinese RAMPS replica)
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1116)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1116)
|
||||||
# Felix 2.0+ Electronics Board (RAMPS like)
|
# Zonestar zrib V5.3 (Chinese RAMPS replica)
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1117)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1117)
|
||||||
# Invent-A-Part RigidBoard
|
# Felix 2.0+ Electronics Board (RAMPS like)
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1118)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1118)
|
||||||
# Invent-A-Part RigidBoard V2
|
# Invent-A-Part RigidBoard
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1119)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1119)
|
||||||
# Sainsmart 2-in-1 board
|
# Invent-A-Part RigidBoard V2
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1120)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1120)
|
||||||
# Ultimaker
|
# Sainsmart 2-in-1 board
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1121)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1121)
|
||||||
# Ultimaker (Older electronics. Pre 1.5.4. This is rare)
|
# Ultimaker
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1122)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1122)
|
||||||
|
# Ultimaker (Older electronics. Pre 1.5.4. This is rare)
|
||||||
|
else ifeq ($(HARDWARE_MOTHERBOARD),1123)
|
||||||
MCU ?= atmega1280
|
MCU ?= atmega1280
|
||||||
PROG_MCU ?= m1280
|
PROG_MCU ?= m1280
|
||||||
# Azteeg X3
|
# Azteeg X3
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1123)
|
|
||||||
# Azteeg X3 Pro
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1124)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1124)
|
||||||
# Ultimainboard 2.x (Uses TEMP_SENSOR 20)
|
# Azteeg X3 Pro
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1125)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1125)
|
||||||
# Rumba
|
# Ultimainboard 2.x (Uses TEMP_SENSOR 20)
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1126)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1126)
|
||||||
# Raise3D N series Rumba derivative
|
# Rumba
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1127)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1127)
|
||||||
# Rapide Lite 200 (v1, low-cost RUMBA clone with drv)
|
# Raise3D N series Rumba derivative
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1128)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1128)
|
||||||
# Formbot T-Rex 2 Plus
|
# Rapide Lite 200 (v1, low-cost RUMBA clone with drv)
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1129)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1129)
|
||||||
# Formbot T-Rex 3
|
# Formbot T-Rex 2 Plus
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1130)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1130)
|
||||||
# Formbot Raptor
|
# Formbot T-Rex 3
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1131)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1131)
|
||||||
# Formbot Raptor 2
|
# Formbot Raptor
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1132)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1132)
|
||||||
# bq ZUM Mega 3D
|
# Formbot Raptor 2
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1133)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1133)
|
||||||
# MakeBoard Mini v2.1.2 by MicroMake
|
# bq ZUM Mega 3D
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1134)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1134)
|
||||||
# TriGorilla Anycubic version 1.3-based on RAMPS EFB
|
# MakeBoard Mini v2.1.2 by MicroMake
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1135)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1135)
|
||||||
# ... Ver 1.4
|
# TriGorilla Anycubic version 1.3-based on RAMPS EFB
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1136)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1136)
|
||||||
# ... Rev 1.1 (new servo pin order)
|
# ... Ver 1.4
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1137)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1137)
|
||||||
# Creality: Ender-4, CR-8
|
# ... Rev 1.1 (new servo pin order)
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1138)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1138)
|
||||||
# Creality: CR10S, CR20, CR-X
|
# Creality: Ender-4, CR-8
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1139)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1139)
|
||||||
# Dagoma F5
|
# Creality: CR10S, CR20, CR-X
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1140)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1140)
|
||||||
# FYSETC F6 1.3
|
# Dagoma F5
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1141)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1141)
|
||||||
# FYSETC F6 1.4
|
# Dagoma D6 (as found in the Dagoma DiscoUltimate V2 TMC)
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1142)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1142)
|
||||||
# Wanhao Duplicator i3 Plus
|
# FYSETC F6 1.3
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1143)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1143)
|
||||||
# VORON Design
|
# FYSETC F6 1.4
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1144)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1144)
|
||||||
# Tronxy TRONXY-V3-1.0
|
# Wanhao Duplicator i3 Plus
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1145)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1145)
|
||||||
# Z-Bolt X Series
|
# VORON Design
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1146)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1146)
|
||||||
# TT OSCAR
|
# Tronxy TRONXY-V3-1.0
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1147)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1147)
|
||||||
# Overlord/Overlord Pro
|
# Z-Bolt X Series
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1148)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1148)
|
||||||
# ADIMLab Gantry v1
|
# TT OSCAR
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1149)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1149)
|
||||||
# ADIMLab Gantry v2
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1150)
|
|
||||||
# BIQU Tango V1
|
# BIQU Tango V1
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1151)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1150)
|
||||||
# MKS GEN L V2
|
# MKS GEN L V2
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1152)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1151)
|
||||||
# MKS GEN L V2.1
|
# MKS GEN L V2.1
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1153)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1152)
|
||||||
# Copymaster 3D
|
# Copymaster 3D
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1154)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1153)
|
||||||
# Ortur 4
|
# Ortur 4
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1155)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1154)
|
||||||
# Tenlog D3 Hero IDEX printer
|
# Tenlog D3 Hero IDEX printer
|
||||||
|
else ifeq ($(HARDWARE_MOTHERBOARD),1155)
|
||||||
|
# Tenlog D3, D5, D6 IDEX Printer
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1156)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1156)
|
||||||
# Tenlog D3,5,6 Pro IDEX printers
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1157)
|
|
||||||
# Ramps S 1.2 by Sakul.cz (Power outputs: Hotend0, Hotend1, Fan, Bed)
|
# Ramps S 1.2 by Sakul.cz (Power outputs: Hotend0, Hotend1, Fan, Bed)
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1158)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1157)
|
||||||
# Ramps S 1.2 by Sakul.cz (Power outputs: Hotend0, Hotend1, Hotend2, Bed)
|
# Ramps S 1.2 by Sakul.cz (Power outputs: Hotend0, Hotend1, Hotend2, Bed)
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1159)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1158)
|
||||||
# Ramps S 1.2 by Sakul.cz (Power outputs: Hotend, Fan0, Fan1, Bed)
|
# Ramps S 1.2 by Sakul.cz (Power outputs: Hotend, Fan0, Fan1, Bed)
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1160)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1159)
|
||||||
# Longer LK1 PRO / Alfawise U20 Pro (PRO version)
|
# Longer LK1 PRO / Alfawise U20 Pro (PRO version)
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1161)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1160)
|
||||||
# Longer LKx PRO / Alfawise Uxx Pro (PRO version)
|
# Longer LKx PRO / Alfawise Uxx Pro (PRO version)
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1162)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1161)
|
||||||
# Zonestar zrib V5.3 (Chinese RAMPS replica)
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1163)
|
|
||||||
# Pxmalion Core I3
|
# Pxmalion Core I3
|
||||||
|
else ifeq ($(HARDWARE_MOTHERBOARD),1162)
|
||||||
|
# Panowin Cutlass (as found in the Panowin F1)
|
||||||
|
else ifeq ($(HARDWARE_MOTHERBOARD),1163)
|
||||||
|
# Kodama Bardo V1.x (as found in the Kodama Trinus)
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1164)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1164)
|
||||||
|
# XTLW MFF V1.0
|
||||||
|
else ifeq ($(HARDWARE_MOTHERBOARD),1165)
|
||||||
|
# XTLW MFF V2.0
|
||||||
|
else ifeq ($(HARDWARE_MOTHERBOARD),1166)
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# RAMBo and derivatives
|
# RAMBo and derivatives
|
||||||
@@ -340,7 +356,7 @@ else ifeq ($(HARDWARE_MOTHERBOARD),1203)
|
|||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1204)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1204)
|
||||||
# abee Scoovo X9H
|
# abee Scoovo X9H
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1205)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1205)
|
||||||
# Rambo ThinkerV2
|
# ThinkerV2
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1206)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1206)
|
||||||
|
|
||||||
#
|
#
|
||||||
@@ -383,30 +399,40 @@ else ifeq ($(HARDWARE_MOTHERBOARD),1315)
|
|||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1316)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1316)
|
||||||
# Geeetech GT2560 Rev B for A10(M/T/D)
|
# Geeetech GT2560 Rev B for A10(M/T/D)
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1317)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1317)
|
||||||
# Geeetech GT2560 Rev B for A10(M/T/D)
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1318)
|
|
||||||
# Geeetech GT2560 Rev B for Mecreator2
|
# Geeetech GT2560 Rev B for Mecreator2
|
||||||
|
else ifeq ($(HARDWARE_MOTHERBOARD),1318)
|
||||||
|
# Geeetech GT2560 Rev B for A20(M/T/D)
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1319)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1319)
|
||||||
# Geeetech GT2560 Rev B for A20(M/T/D)
|
# Geeetech GT2560 Rev B for A10(M/T/D)
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1320)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1320)
|
||||||
# Einstart retrofit
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1321)
|
|
||||||
# Wanhao 0ne+ i3 Mini
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1322)
|
|
||||||
# Leapfrog Xeed 2015
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1323)
|
|
||||||
# PICA Shield (original version)
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1324)
|
|
||||||
# PICA Shield (rev C or later)
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1325)
|
|
||||||
# Intamsys 4.0 (Funmat HT)
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1326)
|
|
||||||
# Malyan M180 Mainboard Version 2 (no display function, direct G-code only)
|
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1327)
|
|
||||||
# Geeetech GT2560 Rev B for A20(M/T/D)
|
# Geeetech GT2560 Rev B for A20(M/T/D)
|
||||||
|
else ifeq ($(HARDWARE_MOTHERBOARD),1321)
|
||||||
|
# Einstart retrofit
|
||||||
|
else ifeq ($(HARDWARE_MOTHERBOARD),1322)
|
||||||
|
# Wanhao 0ne+ i3 Mini
|
||||||
|
else ifeq ($(HARDWARE_MOTHERBOARD),1323)
|
||||||
|
# Overlord/Overlord Pro
|
||||||
|
else ifeq ($(HARDWARE_MOTHERBOARD),1324)
|
||||||
|
# ADIMLab Gantry v1
|
||||||
|
else ifeq ($(HARDWARE_MOTHERBOARD),1325)
|
||||||
|
# ADIMLab Gantry v2
|
||||||
|
else ifeq ($(HARDWARE_MOTHERBOARD),1326)
|
||||||
|
# Leapfrog Xeed 2015
|
||||||
|
else ifeq ($(HARDWARE_MOTHERBOARD),1327)
|
||||||
|
# PICA Shield (original version)
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1328)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1328)
|
||||||
# Mega controller & Protoneer CNC Shield V3.00
|
# PICA Shield (rev C or later)
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1329)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1329)
|
||||||
|
# Intamsys 4.0 (Funmat HT)
|
||||||
|
else ifeq ($(HARDWARE_MOTHERBOARD),1330)
|
||||||
|
# Malyan M180 Mainboard Version 2 (no display function, direct G-code only)
|
||||||
|
else ifeq ($(HARDWARE_MOTHERBOARD),1331)
|
||||||
|
# Mega controller & Protoneer CNC Shield V3.00
|
||||||
|
else ifeq ($(HARDWARE_MOTHERBOARD),1332)
|
||||||
|
# WEEDO 62A board (TINA2, Monoprice Cadet, etc.)
|
||||||
|
else ifeq ($(HARDWARE_MOTHERBOARD),1333)
|
||||||
|
# Geeetech GT2560 V4.1B for A10(M/T/D)
|
||||||
|
else ifeq ($(HARDWARE_MOTHERBOARD),1334)
|
||||||
|
|
||||||
#
|
#
|
||||||
# ATmega1281, ATmega2561
|
# ATmega1281, ATmega2561
|
||||||
@@ -440,7 +466,7 @@ else ifeq ($(HARDWARE_MOTHERBOARD),1502)
|
|||||||
HARDWARE_VARIANT ?= Sanguino
|
HARDWARE_VARIANT ?= Sanguino
|
||||||
MCU ?= atmega644p
|
MCU ?= atmega644p
|
||||||
PROG_MCU ?= m644p
|
PROG_MCU ?= m644p
|
||||||
# Melzi V2.0
|
# Melzi V2
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1503)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1503)
|
||||||
HARDWARE_VARIANT ?= Sanguino
|
HARDWARE_VARIANT ?= Sanguino
|
||||||
MCU ?= atmega1284p
|
MCU ?= atmega1284p
|
||||||
@@ -450,36 +476,41 @@ else ifeq ($(HARDWARE_MOTHERBOARD),1504)
|
|||||||
HARDWARE_VARIANT ?= Sanguino
|
HARDWARE_VARIANT ?= Sanguino
|
||||||
MCU ?= atmega1284p
|
MCU ?= atmega1284p
|
||||||
PROG_MCU ?= m1284p
|
PROG_MCU ?= m1284p
|
||||||
# Melzi Creality3D board (for CR-10 etc)
|
# Melzi Creality3D (for CR-10 etc)
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1505)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1505)
|
||||||
HARDWARE_VARIANT ?= Sanguino
|
HARDWARE_VARIANT ?= Sanguino
|
||||||
MCU ?= atmega1284p
|
MCU ?= atmega1284p
|
||||||
PROG_MCU ?= m1284p
|
PROG_MCU ?= m1284p
|
||||||
# Melzi Malyan M150 board
|
# Melzi Creality3D (for Ender-2)
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1506)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1506)
|
||||||
HARDWARE_VARIANT ?= Sanguino
|
HARDWARE_VARIANT ?= Sanguino
|
||||||
MCU ?= atmega1284p
|
MCU ?= atmega1284p
|
||||||
PROG_MCU ?= m1284p
|
PROG_MCU ?= m1284p
|
||||||
# Tronxy X5S
|
# Melzi Malyan M150
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1507)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1507)
|
||||||
HARDWARE_VARIANT ?= Sanguino
|
HARDWARE_VARIANT ?= Sanguino
|
||||||
MCU ?= atmega1284p
|
MCU ?= atmega1284p
|
||||||
PROG_MCU ?= m1284p
|
PROG_MCU ?= m1284p
|
||||||
# STB V1.1
|
# Tronxy X5S
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1508)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1508)
|
||||||
HARDWARE_VARIANT ?= Sanguino
|
HARDWARE_VARIANT ?= Sanguino
|
||||||
MCU ?= atmega1284p
|
MCU ?= atmega1284p
|
||||||
PROG_MCU ?= m1284p
|
PROG_MCU ?= m1284p
|
||||||
# Azteeg X1
|
# STB V1.1
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1509)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1509)
|
||||||
HARDWARE_VARIANT ?= Sanguino
|
HARDWARE_VARIANT ?= Sanguino
|
||||||
MCU ?= atmega1284p
|
MCU ?= atmega1284p
|
||||||
PROG_MCU ?= m1284p
|
PROG_MCU ?= m1284p
|
||||||
# Anet 1.0 (Melzi clone)
|
# Azteeg X1
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1510)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1510)
|
||||||
HARDWARE_VARIANT ?= Sanguino
|
HARDWARE_VARIANT ?= Sanguino
|
||||||
MCU ?= atmega1284p
|
MCU ?= atmega1284p
|
||||||
PROG_MCU ?= m1284p
|
PROG_MCU ?= m1284p
|
||||||
|
# Anet 1.0 (Melzi clone)
|
||||||
|
else ifeq ($(HARDWARE_MOTHERBOARD),1511)
|
||||||
|
HARDWARE_VARIANT ?= Sanguino
|
||||||
|
MCU ?= atmega1284p
|
||||||
|
PROG_MCU ?= m1284p
|
||||||
# ZoneStar ZMIB V2
|
# ZoneStar ZMIB V2
|
||||||
else ifeq ($(HARDWARE_MOTHERBOARD),1511)
|
else ifeq ($(HARDWARE_MOTHERBOARD),1511)
|
||||||
HARDWARE_VARIANT ?= Sanguino
|
HARDWARE_VARIANT ?= Sanguino
|
||||||
|
|||||||
+1
-1
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
Marlin Firmware
|
Marlin Firmware
|
||||||
|
|
||||||
(c) 2011-2020 MarlinFirmware
|
(c) 2011-2024 MarlinFirmware
|
||||||
Portions of Marlin are (c) by their respective authors.
|
Portions of Marlin are (c) by their respective authors.
|
||||||
All code complies with GPLv2 and/or GPLv3
|
All code complies with GPLv2 and/or GPLv3
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -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 "2023-08-04"
|
//#define STRING_DISTRIBUTION_DATE "2024-10-17"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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.
|
||||||
|
|||||||
@@ -3,10 +3,50 @@
|
|||||||
# config.ini - Options to apply before the build
|
# config.ini - Options to apply before the build
|
||||||
#
|
#
|
||||||
[config:base]
|
[config:base]
|
||||||
|
#
|
||||||
|
# ini_use_config - A comma-separated list of actions to apply to the Configuration files.
|
||||||
|
# The actions will be applied in the listed order.
|
||||||
|
# - none
|
||||||
|
# Ignore this file and don't apply any configuration options
|
||||||
|
#
|
||||||
|
# - base
|
||||||
|
# Just apply the options in config:base to the configuration
|
||||||
|
#
|
||||||
|
# - minimal
|
||||||
|
# Just apply the options in config:minimal to the configuration
|
||||||
|
#
|
||||||
|
# - all
|
||||||
|
# Apply all 'config:*' sections in this file to the configuration
|
||||||
|
#
|
||||||
|
# - another.ini
|
||||||
|
# Load another INI file with a path relative to this config.ini file (i.e., within Marlin/)
|
||||||
|
#
|
||||||
|
# - https://me.myserver.com/path/to/configs
|
||||||
|
# Fetch configurations from any URL.
|
||||||
|
#
|
||||||
|
# - example/Creality/Ender-5 Plus @ bugfix-2.1.x
|
||||||
|
# Fetch example configuration files from the MarlinFirmware/Configurations repository
|
||||||
|
# https://raw.githubusercontent.com/MarlinFirmware/Configurations/bugfix-2.1.x/config/examples/Creality/Ender-5%20Plus/
|
||||||
|
#
|
||||||
|
# - example/default @ release-2.0.9.7
|
||||||
|
# Fetch default configuration files from the MarlinFirmware/Configurations repository
|
||||||
|
# https://raw.githubusercontent.com/MarlinFirmware/Configurations/release-2.0.9.7/config/default/
|
||||||
|
#
|
||||||
|
# - [disable]
|
||||||
|
# Comment out all #defines in both Configuration.h and Configuration_adv.h. This is useful
|
||||||
|
# to start with a clean slate before applying any config: options, so only the options explicitly
|
||||||
|
# set in config.ini will be enabled in the configuration.
|
||||||
|
#
|
||||||
|
# - [flatten] (Not yet implemented)
|
||||||
|
# Produce a flattened set of Configuration.h and Configuration_adv.h files with only the enabled
|
||||||
|
# #defines and no comments. A clean look, but context-free.
|
||||||
|
#
|
||||||
ini_use_config = none
|
ini_use_config = none
|
||||||
|
|
||||||
# Load all config: sections in this file
|
# Load all config: sections in this file
|
||||||
;ini_use_config = all
|
;ini_use_config = all
|
||||||
|
# Disable everything and apply subsequent config:base options
|
||||||
|
;ini_use_config = [disable], base
|
||||||
# Load config file relative to Marlin/
|
# Load config file relative to Marlin/
|
||||||
;ini_use_config = another.ini
|
;ini_use_config = another.ini
|
||||||
# Download configurations from GitHub
|
# Download configurations from GitHub
|
||||||
|
|||||||
@@ -81,6 +81,12 @@ void MarlinHAL::init() {
|
|||||||
#if HAS_SERVO_3
|
#if HAS_SERVO_3
|
||||||
OUT_WRITE(SERVO3_PIN, LOW);
|
OUT_WRITE(SERVO3_PIN, LOW);
|
||||||
#endif
|
#endif
|
||||||
|
#if HAS_SERVO_4
|
||||||
|
OUT_WRITE(SERVO4_PIN, LOW);
|
||||||
|
#endif
|
||||||
|
#if HAS_SERVO_5
|
||||||
|
OUT_WRITE(SERVO5_PIN, LOW);
|
||||||
|
#endif
|
||||||
|
|
||||||
init_pwm_timers(); // Init user timers to default frequency - 1000HZ
|
init_pwm_timers(); // Init user timers to default frequency - 1000HZ
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +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
|
*
|
||||||
|
* 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
|
||||||
@@ -127,11 +129,11 @@ typedef Servo hal_servo_t;
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef MMU2_SERIAL_PORT
|
#ifdef MMU_SERIAL_PORT
|
||||||
#if !WITHIN(MMU2_SERIAL_PORT, 0, 3)
|
#if !WITHIN(MMU_SERIAL_PORT, 0, 3)
|
||||||
#error "MMU2_SERIAL_PORT must be from 0 to 3"
|
#error "MMU_SERIAL_PORT must be from 0 to 3"
|
||||||
#endif
|
#endif
|
||||||
#define MMU2_SERIAL mmuSerial
|
#define MMU_SERIAL mmuSerial
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef LCD_SERIAL_PORT
|
#ifdef LCD_SERIAL_PORT
|
||||||
@@ -139,7 +141,7 @@ typedef Servo hal_servo_t;
|
|||||||
#error "LCD_SERIAL_PORT must be from 0 to 3."
|
#error "LCD_SERIAL_PORT must be from 0 to 3."
|
||||||
#endif
|
#endif
|
||||||
#define LCD_SERIAL lcdSerial
|
#define LCD_SERIAL lcdSerial
|
||||||
#if HAS_DGUS_LCD
|
#if ANY(HAS_DGUS_LCD, EXTENSIBLE_UI)
|
||||||
#define LCD_SERIAL_TX_BUFFER_FREE() LCD_SERIAL.get_tx_buffer_free()
|
#define LCD_SERIAL_TX_BUFFER_FREE() LCD_SERIAL.get_tx_buffer_free()
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
@@ -157,7 +159,7 @@ typedef Servo hal_servo_t;
|
|||||||
#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)
|
||||||
|
|||||||
@@ -119,7 +119,6 @@ void spiBegin() {
|
|||||||
while (!TEST(SPSR, SPIF)) { /* Intentionally left empty */ }
|
while (!TEST(SPSR, SPIF)) { /* Intentionally left empty */ }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/** begin spi transaction */
|
/** begin spi transaction */
|
||||||
void spiBeginTransaction(uint32_t spiClock, uint8_t bitOrder, uint8_t dataMode) {
|
void spiBeginTransaction(uint32_t spiClock, uint8_t bitOrder, uint8_t dataMode) {
|
||||||
// Based on Arduino SPI library
|
// Based on Arduino SPI library
|
||||||
@@ -175,7 +174,6 @@ void spiBegin() {
|
|||||||
SPSR = clockDiv | 0x01;
|
SPSR = clockDiv | 0x01;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#else // SOFTWARE_SPI || FORCE_SOFT_SPI
|
#else // SOFTWARE_SPI || FORCE_SOFT_SPI
|
||||||
|
|
||||||
// ------------------------
|
// ------------------------
|
||||||
|
|||||||
@@ -601,20 +601,20 @@ MSerialT1 customizedSerial1(MSerialT1::HasEmergencyParser);
|
|||||||
|
|
||||||
#endif // SERIAL_PORT_3
|
#endif // SERIAL_PORT_3
|
||||||
|
|
||||||
#ifdef MMU2_SERIAL_PORT
|
#ifdef MMU_SERIAL_PORT
|
||||||
|
|
||||||
ISR(SERIAL_REGNAME(USART, MMU2_SERIAL_PORT, _RX_vect)) {
|
ISR(SERIAL_REGNAME(USART, MMU_SERIAL_PORT, _RX_vect)) {
|
||||||
MarlinSerial<MMU2SerialCfg<MMU2_SERIAL_PORT>>::store_rxd_char();
|
MarlinSerial<MMU2SerialCfg<MMU_SERIAL_PORT>>::store_rxd_char();
|
||||||
}
|
}
|
||||||
|
|
||||||
ISR(SERIAL_REGNAME(USART, MMU2_SERIAL_PORT, _UDRE_vect)) {
|
ISR(SERIAL_REGNAME(USART, MMU_SERIAL_PORT, _UDRE_vect)) {
|
||||||
MarlinSerial<MMU2SerialCfg<MMU2_SERIAL_PORT>>::_tx_udr_empty_irq();
|
MarlinSerial<MMU2SerialCfg<MMU_SERIAL_PORT>>::_tx_udr_empty_irq();
|
||||||
}
|
}
|
||||||
|
|
||||||
template class MarlinSerial< MMU2SerialCfg<MMU2_SERIAL_PORT> >;
|
template class MarlinSerial< MMU2SerialCfg<MMU_SERIAL_PORT> >;
|
||||||
MSerialMMU2 mmuSerial(MSerialMMU2::HasEmergencyParser);
|
MSerialMMU2 mmuSerial(MSerialMMU2::HasEmergencyParser);
|
||||||
|
|
||||||
#endif // MMU2_SERIAL_PORT
|
#endif // MMU_SERIAL_PORT
|
||||||
|
|
||||||
#ifdef LCD_SERIAL_PORT
|
#ifdef LCD_SERIAL_PORT
|
||||||
|
|
||||||
@@ -629,7 +629,7 @@ MSerialT1 customizedSerial1(MSerialT1::HasEmergencyParser);
|
|||||||
template class MarlinSerial< LCDSerialCfg<LCD_SERIAL_PORT> >;
|
template class MarlinSerial< LCDSerialCfg<LCD_SERIAL_PORT> >;
|
||||||
MSerialLCD lcdSerial(MSerialLCD::HasEmergencyParser);
|
MSerialLCD lcdSerial(MSerialLCD::HasEmergencyParser);
|
||||||
|
|
||||||
#if HAS_DGUS_LCD
|
#if ANY(HAS_DGUS_LCD, EXTENSIBLE_UI)
|
||||||
template<typename Cfg>
|
template<typename Cfg>
|
||||||
typename MarlinSerial<Cfg>::ring_buffer_pos_t MarlinSerial<Cfg>::get_tx_buffer_free() {
|
typename MarlinSerial<Cfg>::ring_buffer_pos_t MarlinSerial<Cfg>::get_tx_buffer_free() {
|
||||||
const ring_buffer_pos_t t = tx_buffer.tail, // next byte to send.
|
const ring_buffer_pos_t t = tx_buffer.tail, // next byte to send.
|
||||||
|
|||||||
@@ -37,10 +37,6 @@
|
|||||||
#include "../../core/types.h"
|
#include "../../core/types.h"
|
||||||
#include "../../core/serial_hook.h"
|
#include "../../core/serial_hook.h"
|
||||||
|
|
||||||
#ifndef SERIAL_PORT
|
|
||||||
#define SERIAL_PORT 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef USBCON
|
#ifndef USBCON
|
||||||
|
|
||||||
// The presence of the UBRRH register is used to detect a UART.
|
// The presence of the UBRRH register is used to detect a UART.
|
||||||
@@ -209,7 +205,7 @@
|
|||||||
static ring_buffer_pos_t available();
|
static ring_buffer_pos_t available();
|
||||||
static void write(const uint8_t c);
|
static void write(const uint8_t c);
|
||||||
static void flushTX();
|
static void flushTX();
|
||||||
#if HAS_DGUS_LCD
|
#if ANY(HAS_DGUS_LCD, EXTENSIBLE_UI)
|
||||||
static ring_buffer_pos_t get_tx_buffer_free();
|
static ring_buffer_pos_t get_tx_buffer_free();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -250,7 +246,7 @@
|
|||||||
|
|
||||||
#endif // !USBCON
|
#endif // !USBCON
|
||||||
|
|
||||||
#ifdef MMU2_SERIAL_PORT
|
#ifdef MMU_SERIAL_PORT
|
||||||
template <uint8_t serial>
|
template <uint8_t serial>
|
||||||
struct MMU2SerialCfg {
|
struct MMU2SerialCfg {
|
||||||
static constexpr int PORT = serial;
|
static constexpr int PORT = serial;
|
||||||
@@ -264,7 +260,7 @@
|
|||||||
static constexpr bool RX_OVERRUNS = false;
|
static constexpr bool RX_OVERRUNS = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef Serial1Class< MarlinSerial< MMU2SerialCfg<MMU2_SERIAL_PORT> > > MSerialMMU2;
|
typedef Serial1Class< MarlinSerial< MMU2SerialCfg<MMU_SERIAL_PORT> > > MSerialMMU2;
|
||||||
extern MSerialMMU2 mmuSerial;
|
extern MSerialMMU2 mmuSerial;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -63,7 +63,6 @@
|
|||||||
|
|
||||||
static volatile int8_t Channel[_Nbr_16timers]; // counter for the servo being pulsed for each timer (or -1 if refresh interval)
|
static volatile int8_t Channel[_Nbr_16timers]; // counter for the servo being pulsed for each timer (or -1 if refresh interval)
|
||||||
|
|
||||||
|
|
||||||
/************ static functions common to all instances ***********************/
|
/************ static functions common to all instances ***********************/
|
||||||
|
|
||||||
static inline void handle_interrupts(const timer16_Sequence_t timer, volatile uint16_t* TCNTn, volatile uint16_t* OCRnA) {
|
static inline void handle_interrupts(const timer16_Sequence_t timer, volatile uint16_t* TCNTn, volatile uint16_t* OCRnA) {
|
||||||
|
|||||||
@@ -35,14 +35,14 @@
|
|||||||
#ifndef MARLIN_EEPROM_SIZE
|
#ifndef MARLIN_EEPROM_SIZE
|
||||||
#define MARLIN_EEPROM_SIZE size_t(E2END + 1)
|
#define MARLIN_EEPROM_SIZE size_t(E2END + 1)
|
||||||
#endif
|
#endif
|
||||||
size_t PersistentStore::capacity() { return MARLIN_EEPROM_SIZE; }
|
size_t PersistentStore::capacity() { return MARLIN_EEPROM_SIZE - eeprom_exclude_size; }
|
||||||
bool PersistentStore::access_start() { return true; }
|
bool PersistentStore::access_start() { return true; }
|
||||||
bool PersistentStore::access_finish() { return true; }
|
bool PersistentStore::access_finish() { return true; }
|
||||||
|
|
||||||
bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, uint16_t *crc) {
|
bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, uint16_t *crc) {
|
||||||
uint16_t written = 0;
|
uint16_t written = 0;
|
||||||
while (size--) {
|
while (size--) {
|
||||||
uint8_t * const p = (uint8_t * const)pos;
|
uint8_t * const p = (uint8_t * const)REAL_EEPROM_ADDR(pos);
|
||||||
uint8_t v = *value;
|
uint8_t v = *value;
|
||||||
if (v != eeprom_read_byte(p)) { // EEPROM has only ~100,000 write cycles, so only write bytes that have changed!
|
if (v != eeprom_read_byte(p)) { // EEPROM has only ~100,000 write cycles, so only write bytes that have changed!
|
||||||
eeprom_write_byte(p, v);
|
eeprom_write_byte(p, v);
|
||||||
@@ -61,7 +61,7 @@ bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, ui
|
|||||||
|
|
||||||
bool PersistentStore::read_data(int &pos, uint8_t *value, size_t size, uint16_t *crc, const bool writing/*=true*/) {
|
bool PersistentStore::read_data(int &pos, uint8_t *value, size_t size, uint16_t *crc, const bool writing/*=true*/) {
|
||||||
do {
|
do {
|
||||||
uint8_t c = eeprom_read_byte((uint8_t*)pos);
|
const uint8_t c = eeprom_read_byte((uint8_t*)REAL_EEPROM_ADDR(pos));
|
||||||
if (writing) *value = c;
|
if (writing) *value = c;
|
||||||
crc16(crc, &c, 1);
|
crc16(crc, &c, 1);
|
||||||
pos++;
|
pos++;
|
||||||
|
|||||||
@@ -91,7 +91,6 @@ void endstop_ISR() { endstops.update(); }
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
// Install Pin change interrupt for a pin. Can be called multiple times.
|
// Install Pin change interrupt for a pin. Can be called multiple times.
|
||||||
void pciSetup(const int8_t pin) {
|
void pciSetup(const int8_t pin) {
|
||||||
if (digitalPinHasPCICR(pin)) {
|
if (digitalPinHasPCICR(pin)) {
|
||||||
@@ -346,6 +345,14 @@ void setup_endstop_interrupts() {
|
|||||||
pciSetup(Z_MIN_PROBE_PIN);
|
pciSetup(Z_MIN_PROBE_PIN);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
#if USE_CALIBRATION
|
||||||
|
#if (digitalPinToInterrupt(CALIBRATION_PIN) != NOT_AN_INTERRUPT)
|
||||||
|
_ATTACH(CALIBRATION_PIN);
|
||||||
|
#else
|
||||||
|
static_assert(digitalPinHasPCICR(CALIBRATION_PIN), "CALIBRATION_PIN is not interrupt-capable. Disable ENDSTOP_INTERRUPTS_FEATURE to continue.");
|
||||||
|
pciSetup(CALIBRATION_PIN);
|
||||||
|
#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.
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -150,7 +150,7 @@ void MarlinHAL::set_pwm_frequency(const pin_t pin, const uint16_t f_desired) {
|
|||||||
else {
|
else {
|
||||||
if (p == 32 || p == 128) continue; // Skip TIMER2 specific prescalers when not TIMER2
|
if (p == 32 || p == 128) continue; // Skip TIMER2 specific prescalers when not TIMER2
|
||||||
const uint16_t rft = (F_CPU) / (p * f_desired);
|
const uint16_t rft = (F_CPU) / (p * f_desired);
|
||||||
DEBUG_ECHOLNPGM("(Not Timer 2) F_CPU=" STRINGIFY(F_CPU), " prescaler=", p, " f_desired=", f_desired);
|
DEBUG_ECHOLNPGM("(Not Timer 2) F_CPU=", STRINGIFY(F_CPU), " prescaler=", p, " f_desired=", f_desired);
|
||||||
res_fast_temp = rft - 1;
|
res_fast_temp = rft - 1;
|
||||||
res_pc_temp = rft / 2;
|
res_pc_temp = rft / 2;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,9 +28,6 @@
|
|||||||
* Port : E0 E1 E4 E5 G5 E3 H3 H4 H5 H6 B4 B5 B6 B7 J1 J0 H1 H0 D3 D2 D1 D0 A0 A1 A2 A3 A4 A5 A6 A7 C7 C6 C5 C4 C3 C2 C1 C0 D7 G2 G1 G0 L7 L6 L5 L4 L3 L2 L1 L0 B3 B2 B1 B0 F0 F1 F2 F3 F4 F5 F6 F7 K0 K1 K2 K3 K4 K5 K6 K7 | E2 E6 E7 xx xx H2 H7 G3 G4 xx xx xx xx xx D4 D5 D6 xx xx J2 J3 J4 J5 J6 J7 xx xx xx xx xx
|
* Port : E0 E1 E4 E5 G5 E3 H3 H4 H5 H6 B4 B5 B6 B7 J1 J0 H1 H0 D3 D2 D1 D0 A0 A1 A2 A3 A4 A5 A6 A7 C7 C6 C5 C4 C3 C2 C1 C0 D7 G2 G1 G0 L7 L6 L5 L4 L3 L2 L1 L0 B3 B2 B1 B0 F0 F1 F2 F3 F4 F5 F6 F7 K0 K1 K2 K3 K4 K5 K6 K7 | E2 E6 E7 xx xx H2 H7 G3 G4 xx xx xx xx xx D4 D5 D6 xx xx J2 J3 J4 J5 J6 J7 xx xx xx xx xx
|
||||||
* Logical Pin : 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | 78 79 80 xx xx 84 85 71 70 xx xx xx xx xx 81 82 83 xx xx 72 73 75 76 77 74 xx xx xx xx xx
|
* Logical Pin : 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | 78 79 80 xx xx 84 85 71 70 xx xx xx xx xx 81 82 83 xx xx 72 73 75 76 77 74 xx xx xx xx xx
|
||||||
* Analog Input : 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
* Analog Input : 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
||||||
*
|
|
||||||
* Arduino Pin Layout video: https://youtu.be/rIqeVCX09FA
|
|
||||||
* AVR alternate pin function overview video: https://youtu.be/1yd8wuI5Plg
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "../fastio.h"
|
#include "../fastio.h"
|
||||||
|
|||||||
@@ -26,9 +26,6 @@
|
|||||||
*
|
*
|
||||||
* Logical Pin: 38 39 40 41 42 43 44 45 16 10 11 12 06 07 08 09 30 31 32 33 34 35 36 37 17 18 19 20 21 22 23 24 00 01 13 05 02 03 14 15 46 47 48 49 50 51 52 53 25 26 27 28 29 04
|
* Logical Pin: 38 39 40 41 42 43 44 45 16 10 11 12 06 07 08 09 30 31 32 33 34 35 36 37 17 18 19 20 21 22 23 24 00 01 13 05 02 03 14 15 46 47 48 49 50 51 52 53 25 26 27 28 29 04
|
||||||
* Port: A0 A1 A2 A3 A4 A5 A6 A7 B0 B1 B2 B3 B4 B5 B6 B7 C0 C1 C2 C3 C4 C5 C6 C7 D0 D1 D2 D3 D4 D5 D6 D7 E0 E1 E2 E3 E4 E5 E6 E7 F0 F1 F2 F3 F4 F5 F6 F7 G0 G1 G2 G3 G4 G5
|
* Port: A0 A1 A2 A3 A4 A5 A6 A7 B0 B1 B2 B3 B4 B5 B6 B7 C0 C1 C2 C3 C4 C5 C6 C7 D0 D1 D2 D3 D4 D5 D6 D7 E0 E1 E2 E3 E4 E5 E6 E7 F0 F1 F2 F3 F4 F5 F6 F7 G0 G1 G2 G3 G4 G5
|
||||||
*
|
|
||||||
* Arduino Pin Layout video: https://youtu.be/rIqeVCX09FA
|
|
||||||
* AVR alternate pin function overview video: https://youtu.be/1yd8wuI5Plg
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "../fastio.h"
|
#include "../fastio.h"
|
||||||
|
|||||||
@@ -26,9 +26,6 @@
|
|||||||
*
|
*
|
||||||
* Logical Pin: 08 09 10 11 12 13 14 15 16 17 18 19 20 21 00 01 02 03 04 05 06 07
|
* Logical Pin: 08 09 10 11 12 13 14 15 16 17 18 19 20 21 00 01 02 03 04 05 06 07
|
||||||
* Port: B0 B1 B2 B3 B4 B5 C0 C1 C2 C3 C4 C5 C6 C7 D0 D1 D2 D3 D4 D5 D6 D7
|
* Port: B0 B1 B2 B3 B4 B5 C0 C1 C2 C3 C4 C5 C6 C7 D0 D1 D2 D3 D4 D5 D6 D7
|
||||||
*
|
|
||||||
* Arduino Pin Layout video: https://youtu.be/rIqeVCX09FA
|
|
||||||
* AVR alternate pin function overview video: https://youtu.be/1yd8wuI5Plg
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "../fastio.h"
|
#include "../fastio.h"
|
||||||
|
|||||||
@@ -26,9 +26,6 @@
|
|||||||
*
|
*
|
||||||
* Logical Pin: 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
* Logical Pin: 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
||||||
* Port: B0 B1 B2 B3 B4 B5 B6 B7 D0 D1 D2 D3 D4 D5 D6 D7 C0 C1 C2 C3 C4 C5 C6 C7 A7 A6 A5 A4 A3 A2 A1 A0
|
* Port: B0 B1 B2 B3 B4 B5 B6 B7 D0 D1 D2 D3 D4 D5 D6 D7 C0 C1 C2 C3 C4 C5 C6 C7 A7 A6 A5 A4 A3 A2 A1 A0
|
||||||
*
|
|
||||||
* Arduino Pin Layout video: https://youtu.be/rIqeVCX09FA
|
|
||||||
* AVR alternate pin function overview video: https://youtu.be/1yd8wuI5Plg
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** ATMega644
|
/** ATMega644
|
||||||
|
|||||||
@@ -26,10 +26,7 @@
|
|||||||
*
|
*
|
||||||
* Logical Pin: 28 29 30 31 32 33 34 35 20 21 22 23 24 25 26 27 10 11 12 13 14 15 16 17 00 01 02 03 04 05 06 07 08 09(46*47)36 37 18 19 38 39 40 41 42 43 44 45
|
* Logical Pin: 28 29 30 31 32 33 34 35 20 21 22 23 24 25 26 27 10 11 12 13 14 15 16 17 00 01 02 03 04 05 06 07 08 09(46*47)36 37 18 19 38 39 40 41 42 43 44 45
|
||||||
* Port: A0 A1 A2 A3 A4 A5 A6 A7 B0 B1 B2 B3 B4 B5 B6 B7 C0 C1 C2 C3 C4 C5 C6 C7 D0 D1 D2 D3 D4 D5 D6 D7 E0 E1 E2 E3 E4 E5 E6 E7 F0 F1 F2 F3 F4 F5 F6 F7
|
* Port: A0 A1 A2 A3 A4 A5 A6 A7 B0 B1 B2 B3 B4 B5 B6 B7 C0 C1 C2 C3 C4 C5 C6 C7 D0 D1 D2 D3 D4 D5 D6 D7 E0 E1 E2 E3 E4 E5 E6 E7 F0 F1 F2 F3 F4 F5 F6 F7
|
||||||
* The logical pins 46 and 47 are not supported by Teensyduino, but are supported below as E2 and E3
|
* Logical pins 46-47 aren't supported by Teensyduino, but are supported below as E2 and E3
|
||||||
*
|
|
||||||
* Arduino Pin Layout video: https://youtu.be/rIqeVCX09FA
|
|
||||||
* AVR alternate pin function overview video: https://youtu.be/1yd8wuI5Plg
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "../fastio.h"
|
#include "../fastio.h"
|
||||||
@@ -679,7 +676,6 @@
|
|||||||
#define PF7_PWM 0
|
#define PF7_PWM 0
|
||||||
#define PF7_DDR DDRF
|
#define PF7_DDR DDRF
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Some of the pin mapping functions of the Teensduino extension to the Arduino IDE
|
* Some of the pin mapping functions of the Teensduino extension to the Arduino IDE
|
||||||
* do not function the same as the other Arduino extensions.
|
* do not function the same as the other Arduino extensions.
|
||||||
|
|||||||
@@ -20,3 +20,7 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#ifndef SERIAL_PORT
|
||||||
|
#define SERIAL_PORT 0
|
||||||
|
#endif
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
/**
|
||||||
|
* Marlin 3D Printer Firmware
|
||||||
|
* Copyright (c) 2024 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
|
||||||
@@ -42,7 +42,7 @@
|
|||||||
#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(p)
|
#define digitalPinToPort_DEBUG(p) digitalPinToPort(p)
|
||||||
#define GET_PINMODE(pin) (*portModeRegister(pin) & digitalPinToBitMask_DEBUG(pin))
|
#define getValidPinMode(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
|
||||||
|
|
||||||
@@ -50,32 +50,32 @@
|
|||||||
#define digitalPinToTimer_DEBUG(p) digitalPinToTimer_plus_70(p)
|
#define digitalPinToTimer_DEBUG(p) digitalPinToTimer_plus_70(p)
|
||||||
#define digitalPinToBitMask_DEBUG(p) digitalPinToBitMask_plus_70(p)
|
#define digitalPinToBitMask_DEBUG(p) digitalPinToBitMask_plus_70(p)
|
||||||
#define digitalPinToPort_DEBUG(p) digitalPinToPort_plus_70(p)
|
#define digitalPinToPort_DEBUG(p) digitalPinToPort_plus_70(p)
|
||||||
bool GET_PINMODE(int8_t pin) {return *portModeRegister(digitalPinToPort_DEBUG(pin)) & digitalPinToBitMask_DEBUG(pin); }
|
bool getValidPinMode(pin_t pin) {return *portModeRegister(digitalPinToPort_DEBUG(pin)) & digitalPinToBitMask_DEBUG(pin); }
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#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(p)
|
#define digitalPinToPort_DEBUG(p) digitalPinToPort(p)
|
||||||
bool GET_PINMODE(int8_t pin) {return *portModeRegister(digitalPinToPort_DEBUG(pin)) & digitalPinToBitMask_DEBUG(pin); }
|
bool getValidPinMode(pin_t pin) {return *portModeRegister(digitalPinToPort_DEBUG(pin)) & digitalPinToBitMask_DEBUG(pin); }
|
||||||
#define GET_ARRAY_PIN(p) pgm_read_byte(&pin_array[p].pin)
|
#define getPinByIndex(p) pgm_read_byte(&pin_array[p].pin)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define VALID_PIN(pin) (pin >= 0 && pin < NUM_DIGITAL_PINS ? 1 : 0)
|
#define isValidPin(pin) (pin >= 0 && pin < NUM_DIGITAL_PINS ? 1 : 0)
|
||||||
#if AVR_ATmega1284_FAMILY
|
#if AVR_ATmega1284_FAMILY
|
||||||
#define IS_ANALOG(P) WITHIN(P, analogInputToDigitalPin(7), analogInputToDigitalPin(0))
|
#define isAnalogPin(P) WITHIN(P, analogInputToDigitalPin(7), analogInputToDigitalPin(0))
|
||||||
#define DIGITAL_PIN_TO_ANALOG_PIN(P) int(IS_ANALOG(P) ? (P) - analogInputToDigitalPin(7) : -1)
|
#define digitalPinToAnalogIndex(P) int(isAnalogPin(P) ? (P) - analogInputToDigitalPin(7) : -1)
|
||||||
#else
|
#else
|
||||||
#define _ANALOG1(P) WITHIN(P, analogInputToDigitalPin(0), analogInputToDigitalPin(7))
|
#define _ANALOG1(P) WITHIN(P, analogInputToDigitalPin(0), analogInputToDigitalPin(7))
|
||||||
#define _ANALOG2(P) WITHIN(P, analogInputToDigitalPin(8), analogInputToDigitalPin(15))
|
#define _ANALOG2(P) WITHIN(P, analogInputToDigitalPin(8), analogInputToDigitalPin(15))
|
||||||
#define IS_ANALOG(P) (_ANALOG1(P) || _ANALOG2(P))
|
#define isAnalogPin(P) (_ANALOG1(P) || _ANALOG2(P))
|
||||||
#define DIGITAL_PIN_TO_ANALOG_PIN(P) int(_ANALOG1(P) ? (P) - analogInputToDigitalPin(0) : _ANALOG2(P) ? (P) - analogInputToDigitalPin(8) + 8 : -1)
|
#define digitalPinToAnalogIndex(P) int(_ANALOG1(P) ? (P) - analogInputToDigitalPin(0) : _ANALOG2(P) ? (P) - analogInputToDigitalPin(8) + 8 : -1)
|
||||||
#endif
|
#endif
|
||||||
#define GET_ARRAY_PIN(p) pgm_read_byte(&pin_array[p].pin)
|
#define getPinByIndex(p) pgm_read_byte(&pin_array[p].pin)
|
||||||
#define MULTI_NAME_PAD 26 // space needed to be pretty if not first name assigned to a pin
|
#define MULTI_NAME_PAD 26 // space needed to be pretty if not first name assigned to a pin
|
||||||
|
|
||||||
void PRINT_ARRAY_NAME(uint8_t x) {
|
void printPinNameByIndex(uint8_t x) {
|
||||||
PGM_P const name_mem_pointer = (PGM_P)pgm_read_ptr(&pin_array[x].name);
|
PGM_P const name_mem_pointer = (PGM_P)pgm_read_ptr(&pin_array[x].name);
|
||||||
for (uint8_t y = 0; y < MAX_NAME_LENGTH; ++y) {
|
for (uint8_t y = 0; y < MAX_NAME_LENGTH; ++y) {
|
||||||
char temp_char = pgm_read_byte(name_mem_pointer + y);
|
char temp_char = pgm_read_byte(name_mem_pointer + y);
|
||||||
@@ -88,7 +88,7 @@ void PRINT_ARRAY_NAME(uint8_t x) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#define GET_ARRAY_IS_DIGITAL(x) pgm_read_byte(&pin_array[x].is_digital)
|
#define getPinIsDigitalByIndex(x) pgm_read_byte(&pin_array[x].is_digital)
|
||||||
|
|
||||||
#if defined(__AVR_ATmega1284P__) // 1284 IDE extensions set this to the number of
|
#if defined(__AVR_ATmega1284P__) // 1284 IDE extensions set this to the number of
|
||||||
#undef NUM_DIGITAL_PINS // digital only pins while all other CPUs have it
|
#undef NUM_DIGITAL_PINS // digital only pins while all other CPUs have it
|
||||||
@@ -163,7 +163,6 @@ bool pwm_status(uint8_t pin) {
|
|||||||
SERIAL_ECHO_SP(2);
|
SERIAL_ECHO_SP(2);
|
||||||
} // pwm_status
|
} // pwm_status
|
||||||
|
|
||||||
|
|
||||||
const volatile uint8_t* const PWM_other[][3] PROGMEM = {
|
const volatile uint8_t* const PWM_other[][3] PROGMEM = {
|
||||||
{ &TCCR0A, &TCCR0B, &TIMSK0 },
|
{ &TCCR0A, &TCCR0B, &TIMSK0 },
|
||||||
{ &TCCR1A, &TCCR1B, &TIMSK1 },
|
{ &TCCR1A, &TCCR1B, &TIMSK1 },
|
||||||
@@ -181,7 +180,6 @@ const volatile uint8_t* const PWM_other[][3] PROGMEM = {
|
|||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
const volatile uint8_t* const PWM_OCR[][3] PROGMEM = {
|
const volatile uint8_t* const PWM_OCR[][3] PROGMEM = {
|
||||||
|
|
||||||
#ifdef TIMER0A
|
#ifdef TIMER0A
|
||||||
@@ -217,7 +215,6 @@ const volatile uint8_t* const PWM_OCR[][3] PROGMEM = {
|
|||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#define TCCR_A(T) pgm_read_word(&PWM_other[T][0])
|
#define TCCR_A(T) pgm_read_word(&PWM_other[T][0])
|
||||||
#define TCCR_B(T) pgm_read_word(&PWM_other[T][1])
|
#define TCCR_B(T) pgm_read_word(&PWM_other[T][1])
|
||||||
#define TIMSK(T) pgm_read_word(&PWM_other[T][2])
|
#define TIMSK(T) pgm_read_word(&PWM_other[T][2])
|
||||||
@@ -279,7 +276,7 @@ void timer_prefix(uint8_t T, char L, uint8_t N) { // T - timer L - pwm N -
|
|||||||
if (TEST(*TMSK, TOIE)) err_prob_interrupt();
|
if (TEST(*TMSK, TOIE)) err_prob_interrupt();
|
||||||
}
|
}
|
||||||
|
|
||||||
void pwm_details(uint8_t pin) {
|
void printPinPWM(uint8_t pin) {
|
||||||
switch (digitalPinToTimer_DEBUG(pin)) {
|
switch (digitalPinToTimer_DEBUG(pin)) {
|
||||||
|
|
||||||
#if ABTEST(0)
|
#if ABTEST(0)
|
||||||
@@ -350,7 +347,7 @@ void pwm_details(uint8_t pin) {
|
|||||||
#else
|
#else
|
||||||
UNUSED(print_is_also_tied);
|
UNUSED(print_is_also_tied);
|
||||||
#endif
|
#endif
|
||||||
} // pwm_details
|
} // printPinPWM
|
||||||
|
|
||||||
#ifndef digitalRead_mod // Use Teensyduino's version of digitalRead - it doesn't disable the PWMs
|
#ifndef digitalRead_mod // Use Teensyduino's version of digitalRead - it doesn't disable the PWMs
|
||||||
int digitalRead_mod(const pin_t pin) { // same as digitalRead except the PWM stop section has been removed
|
int digitalRead_mod(const pin_t pin) { // same as digitalRead except the PWM stop section has been removed
|
||||||
@@ -359,7 +356,7 @@ void pwm_details(uint8_t pin) {
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void print_port(const pin_t pin) { // print port number
|
void printPinPort(const pin_t pin) { // print port number
|
||||||
#ifdef digitalPinToPort_DEBUG
|
#ifdef digitalPinToPort_DEBUG
|
||||||
uint8_t x;
|
uint8_t x;
|
||||||
SERIAL_ECHOPGM(" Port: ");
|
SERIAL_ECHOPGM(" Port: ");
|
||||||
@@ -389,7 +386,7 @@ void print_port(const pin_t pin) { // print port number
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#define PRINT_PIN(p) do{ sprintf_P(buffer, PSTR("%3d "), p); SERIAL_ECHO(buffer); }while(0)
|
#define printPinNumber(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 printPinAnalog(p) do{ sprintf_P(buffer, PSTR(" (A%2d) "), digitalPinToAnalogIndex(pin)); SERIAL_ECHO(buffer); }while(0)
|
||||||
|
|
||||||
#undef ABTEST
|
#undef ABTEST
|
||||||
|
|||||||
@@ -1,7 +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
|
*
|
||||||
|
* 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
|
||||||
|
|||||||
@@ -0,0 +1,29 @@
|
|||||||
|
/**
|
||||||
|
* Marlin 3D Printer Firmware
|
||||||
|
* Copyright (c) 2023 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
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AVR LCD-specific defines
|
||||||
|
*/
|
||||||
|
|
||||||
|
uint8_t u8g_com_HAL_AVR_sw_sp_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr);
|
||||||
|
#define U8G_COM_HAL_SW_SPI_FN u8g_com_HAL_AVR_sw_sp_fn
|
||||||
@@ -120,8 +120,7 @@ void u8g_spiSend_sw_AVR_mode_3(uint8_t val) {
|
|||||||
U8G_ATOMIC_END();
|
U8G_ATOMIC_END();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if U8G_SPI_USE_MODE_3
|
||||||
#if ENABLED(FYSETC_MINI_12864)
|
|
||||||
#define SPISEND_SW_AVR u8g_spiSend_sw_AVR_mode_3
|
#define SPISEND_SW_AVR u8g_spiSend_sw_AVR_mode_3
|
||||||
#else
|
#else
|
||||||
#define SPISEND_SW_AVR u8g_spiSend_sw_AVR_mode_0
|
#define SPISEND_SW_AVR u8g_spiSend_sw_AVR_mode_0
|
||||||
@@ -144,9 +143,9 @@ uint8_t u8g_com_HAL_AVR_sw_sp_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case U8G_COM_MSG_CHIP_SELECT:
|
case U8G_COM_MSG_CHIP_SELECT:
|
||||||
#if ENABLED(FYSETC_MINI_12864) // LCD SPI is running mode 3 while SD card is running mode 0
|
#if U8G_SPI_USE_MODE_3 // LCD SPI is running mode 3 while SD card is running mode 0
|
||||||
if (arg_val) { // SCK idle state needs to be set to the proper idle state before
|
if (arg_val) { // SCK idle state needs to be set to the proper idle state before
|
||||||
// the next chip select goes active
|
// the next chip select goes active
|
||||||
u8g_com_arduino_digital_write(u8g, U8G_PI_SCK, 1); // Set SCK to mode 3 idle state before CS goes active
|
u8g_com_arduino_digital_write(u8g, U8G_PI_SCK, 1); // Set SCK to mode 3 idle state before CS goes active
|
||||||
u8g_com_arduino_digital_write(u8g, U8G_PI_CS, LOW);
|
u8g_com_arduino_digital_write(u8g, U8G_PI_CS, LOW);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +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
|
*
|
||||||
|
* 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
|
||||||
|
|||||||
@@ -1,9 +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) 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
|
||||||
@@ -81,11 +81,11 @@ extern DefaultSerial4 MSerial3;
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef MMU2_SERIAL_PORT
|
#ifdef MMU_SERIAL_PORT
|
||||||
#if WITHIN(MMU2_SERIAL_PORT, 0, 3)
|
#if WITHIN(MMU_SERIAL_PORT, 0, 3)
|
||||||
#define MMU2_SERIAL MSERIAL(MMU2_SERIAL_PORT)
|
#define MMU_SERIAL MSERIAL(MMU_SERIAL_PORT)
|
||||||
#else
|
#else
|
||||||
#error "MMU2_SERIAL_PORT must be from 0 to 3."
|
#error "MMU_SERIAL_PORT must be from 0 to 3."
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -127,7 +127,7 @@ typedef Servo hal_servo_t;
|
|||||||
#define HAL_ADC_RESOLUTION 10
|
#define HAL_ADC_RESOLUTION 10
|
||||||
|
|
||||||
#ifndef analogInputToDigitalPin
|
#ifndef analogInputToDigitalPin
|
||||||
#define analogInputToDigitalPin(p) ((p < 12U) ? (p) + 54U : -1)
|
#define analogInputToDigitalPin(p) pin_t((p < 12U) ? (p) + 54U : -1)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -42,7 +42,7 @@
|
|||||||
// Public functions
|
// Public functions
|
||||||
// ------------------------
|
// ------------------------
|
||||||
|
|
||||||
#if ANY(DUE_SOFTWARE_SPI, FORCE_SOFT_SPI)
|
#if ANY(SOFTWARE_SPI, FORCE_SOFT_SPI)
|
||||||
|
|
||||||
// ------------------------
|
// ------------------------
|
||||||
// Software SPI
|
// Software SPI
|
||||||
|
|||||||
@@ -474,7 +474,6 @@ 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> >;
|
||||||
|
|||||||
@@ -50,7 +50,7 @@
|
|||||||
static Flags<_Nbr_16timers> DisablePending; // ISR should disable the timer at the next timer reset
|
static Flags<_Nbr_16timers> DisablePending; // ISR should disable the timer at the next timer reset
|
||||||
|
|
||||||
// ------------------------
|
// ------------------------
|
||||||
/// Interrupt handler for the TC0 channel 1.
|
// Interrupt handler for the TC0 channel 1.
|
||||||
// ------------------------
|
// ------------------------
|
||||||
void Servo_Handler(const timer16_Sequence_t, Tc*, const uint8_t);
|
void Servo_Handler(const timer16_Sequence_t, Tc*, const uint8_t);
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -959,14 +958,14 @@ static void ee_Init() {
|
|||||||
#ifndef MARLIN_EEPROM_SIZE
|
#ifndef MARLIN_EEPROM_SIZE
|
||||||
#define MARLIN_EEPROM_SIZE 0x1000 // 4KB
|
#define MARLIN_EEPROM_SIZE 0x1000 // 4KB
|
||||||
#endif
|
#endif
|
||||||
size_t PersistentStore::capacity() { return MARLIN_EEPROM_SIZE; }
|
size_t PersistentStore::capacity() { return MARLIN_EEPROM_SIZE - eeprom_exclude_size; }
|
||||||
bool PersistentStore::access_start() { ee_Init(); return true; }
|
bool PersistentStore::access_start() { ee_Init(); return true; }
|
||||||
bool PersistentStore::access_finish() { ee_Flush(); return true; }
|
bool PersistentStore::access_finish() { ee_Flush(); return true; }
|
||||||
|
|
||||||
bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, uint16_t *crc) {
|
bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, uint16_t *crc) {
|
||||||
uint16_t written = 0;
|
uint16_t written = 0;
|
||||||
while (size--) {
|
while (size--) {
|
||||||
uint8_t * const p = (uint8_t * const)pos;
|
uint8_t * const p = (uint8_t * const)REAL_EEPROM_ADDR(pos);
|
||||||
uint8_t v = *value;
|
uint8_t v = *value;
|
||||||
if (v != ee_Read(uint32_t(p))) { // EEPROM has only ~100,000 write cycles, so only write bytes that have changed!
|
if (v != ee_Read(uint32_t(p))) { // EEPROM has only ~100,000 write cycles, so only write bytes that have changed!
|
||||||
ee_Write(uint32_t(p), v);
|
ee_Write(uint32_t(p), v);
|
||||||
@@ -985,7 +984,7 @@ bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, ui
|
|||||||
|
|
||||||
bool PersistentStore::read_data(int &pos, uint8_t *value, size_t size, uint16_t *crc, const bool writing/*=true*/) {
|
bool PersistentStore::read_data(int &pos, uint8_t *value, size_t size, uint16_t *crc, const bool writing/*=true*/) {
|
||||||
do {
|
do {
|
||||||
uint8_t c = ee_Read(uint32_t(pos));
|
uint8_t c = ee_Read(uint32_t(REAL_EEPROM_ADDR(pos)));
|
||||||
if (writing) *value = c;
|
if (writing) *value = c;
|
||||||
crc16(crc, &c, 1);
|
crc16(crc, &c, 1);
|
||||||
pos++;
|
pos++;
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -37,14 +36,14 @@
|
|||||||
#ifndef MARLIN_EEPROM_SIZE
|
#ifndef MARLIN_EEPROM_SIZE
|
||||||
#error "MARLIN_EEPROM_SIZE is required for I2C / SPI EEPROM."
|
#error "MARLIN_EEPROM_SIZE is required for I2C / SPI EEPROM."
|
||||||
#endif
|
#endif
|
||||||
size_t PersistentStore::capacity() { return MARLIN_EEPROM_SIZE; }
|
size_t PersistentStore::capacity() { return MARLIN_EEPROM_SIZE - eeprom_exclude_size; }
|
||||||
bool PersistentStore::access_start() { eeprom_init(); return true; }
|
bool PersistentStore::access_start() { eeprom_init(); return true; }
|
||||||
bool PersistentStore::access_finish() { return true; }
|
bool PersistentStore::access_finish() { return true; }
|
||||||
|
|
||||||
bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, uint16_t *crc) {
|
bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, uint16_t *crc) {
|
||||||
uint16_t written = 0;
|
uint16_t written = 0;
|
||||||
while (size--) {
|
while (size--) {
|
||||||
uint8_t * const p = (uint8_t * const)pos;
|
uint8_t * const p = (uint8_t * const)REAL_EEPROM_ADDR(pos);
|
||||||
uint8_t v = *value;
|
uint8_t v = *value;
|
||||||
if (v != eeprom_read_byte(p)) { // EEPROM has only ~100,000 write cycles, so only write bytes that have changed!
|
if (v != eeprom_read_byte(p)) { // EEPROM has only ~100,000 write cycles, so only write bytes that have changed!
|
||||||
eeprom_write_byte(p, v);
|
eeprom_write_byte(p, v);
|
||||||
@@ -63,7 +62,7 @@ bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, ui
|
|||||||
|
|
||||||
bool PersistentStore::read_data(int &pos, uint8_t *value, size_t size, uint16_t *crc, const bool writing/*=true*/) {
|
bool PersistentStore::read_data(int &pos, uint8_t *value, size_t size, uint16_t *crc, const bool writing/*=true*/) {
|
||||||
do {
|
do {
|
||||||
uint8_t c = eeprom_read_byte((uint8_t*)pos);
|
const uint8_t c = eeprom_read_byte((uint8_t*)REAL_EEPROM_ADDR(pos));
|
||||||
if (writing) *value = c;
|
if (writing) *value = c;
|
||||||
crc16(crc, &c, 1);
|
crc16(crc, &c, 1);
|
||||||
pos++;
|
pos++;
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ void setup_endstop_interrupts() {
|
|||||||
TERN_(USE_Z4_MAX, _ATTACH(Z4_MAX_PIN));
|
TERN_(USE_Z4_MAX, _ATTACH(Z4_MAX_PIN));
|
||||||
TERN_(USE_Z4_MIN, _ATTACH(Z4_MIN_PIN));
|
TERN_(USE_Z4_MIN, _ATTACH(Z4_MIN_PIN));
|
||||||
TERN_(USE_Z_MIN_PROBE, _ATTACH(Z_MIN_PROBE_PIN));
|
TERN_(USE_Z_MIN_PROBE, _ATTACH(Z_MIN_PROBE_PIN));
|
||||||
|
TERN_(USE_CALIBRATION, _ATTACH(CALIBRATION_PIN));
|
||||||
TERN_(USE_I_MAX, _ATTACH(I_MAX_PIN));
|
TERN_(USE_I_MAX, _ATTACH(I_MAX_PIN));
|
||||||
TERN_(USE_I_MIN, _ATTACH(I_MIN_PIN));
|
TERN_(USE_I_MIN, _ATTACH(I_MIN_PIN));
|
||||||
TERN_(USE_J_MAX, _ATTACH(J_MAX_PIN));
|
TERN_(USE_J_MAX, _ATTACH(J_MAX_PIN));
|
||||||
|
|||||||
@@ -61,7 +61,7 @@
|
|||||||
#else
|
#else
|
||||||
#define G2_PWM_Z 0
|
#define G2_PWM_Z 0
|
||||||
#endif
|
#endif
|
||||||
#if PIN_EXISTS(MOTOR_CURRENT_PWM_E)
|
#if HAS_MOTOR_CURRENT_PWM_E
|
||||||
#define G2_PWM_E 1
|
#define G2_PWM_E 1
|
||||||
#else
|
#else
|
||||||
#define G2_PWM_E 0
|
#define G2_PWM_E 0
|
||||||
|
|||||||
@@ -49,7 +49,6 @@ extern volatile uint32_t *SODR_A, *SODR_B, *CODR_A, *CODR_B;
|
|||||||
|
|
||||||
#define PWM_MAP_INIT_ROW(IO,ZZ) { ZZ == 'A' ? SODR_A : SODR_B, ZZ == 'A' ? CODR_A : CODR_B, 1 << _PIN(IO) }
|
#define PWM_MAP_INIT_ROW(IO,ZZ) { ZZ == 'A' ? SODR_A : SODR_B, ZZ == 'A' ? CODR_A : CODR_B, 1 << _PIN(IO) }
|
||||||
|
|
||||||
|
|
||||||
#define PWM_MAP_INIT { PWM_MAP_INIT_ROW(MOTOR_CURRENT_PWM_X_PIN, 'B'), \
|
#define PWM_MAP_INIT { PWM_MAP_INIT_ROW(MOTOR_CURRENT_PWM_X_PIN, 'B'), \
|
||||||
PWM_MAP_INIT_ROW(MOTOR_CURRENT_PWM_Y_PIN, 'B'), \
|
PWM_MAP_INIT_ROW(MOTOR_CURRENT_PWM_Y_PIN, 'B'), \
|
||||||
PWM_MAP_INIT_ROW(MOTOR_CURRENT_PWM_Z_PIN, 'B'), \
|
PWM_MAP_INIT_ROW(MOTOR_CURRENT_PWM_Z_PIN, 'B'), \
|
||||||
|
|||||||
@@ -168,7 +168,6 @@ const G2_PinDescription G2_g_APinDescription[] = {
|
|||||||
{ PIOB, PIO_PB21, ID_PIOB, PIO_OUTPUT_0, PIO_DEFAULT, PIN_ATTR_DIGITAL, NO_ADC, NO_ADC, NOT_ON_PWM, NOT_ON_TIMER }, // PIN 52
|
{ PIOB, PIO_PB21, ID_PIOB, PIO_OUTPUT_0, PIO_DEFAULT, PIN_ATTR_DIGITAL, NO_ADC, NO_ADC, NOT_ON_PWM, NOT_ON_TIMER }, // PIN 52
|
||||||
{ PIOB, PIO_PB14, ID_PIOB, PIO_OUTPUT_0, PIO_DEFAULT, PIN_ATTR_DIGITAL, NO_ADC, NO_ADC, NOT_ON_PWM, NOT_ON_TIMER }, // PIN 53
|
{ PIOB, PIO_PB14, ID_PIOB, PIO_OUTPUT_0, PIO_DEFAULT, PIN_ATTR_DIGITAL, NO_ADC, NO_ADC, NOT_ON_PWM, NOT_ON_TIMER }, // PIN 53
|
||||||
|
|
||||||
|
|
||||||
// 54 .. 65 - Analog pins
|
// 54 .. 65 - Analog pins
|
||||||
// ----------------------
|
// ----------------------
|
||||||
{ PIOA, PIO_PA16X1_AD7, ID_PIOA, PIO_INPUT, PIO_DEFAULT, PIN_ATTR_ANALOG, ADC0, ADC7, NOT_ON_PWM, NOT_ON_TIMER }, // AD0
|
{ PIOA, PIO_PA16X1_AD7, ID_PIOA, PIO_INPUT, PIO_DEFAULT, PIN_ATTR_ANALOG, ADC0, ADC7, NOT_ON_PWM, NOT_ON_TIMER }, // AD0
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
/**
|
||||||
|
* Marlin 3D Printer Firmware
|
||||||
|
* Copyright (c) 2024 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
|
||||||
@@ -68,16 +68,15 @@
|
|||||||
* Usually the hardware SPI pins are only available to the LCD. This makes the DUE hard SPI used at the same time
|
* Usually the hardware SPI pins are only available to the LCD. This makes the DUE hard SPI used at the same time
|
||||||
* as the TMC2130 soft SPI the most common setup.
|
* as the TMC2130 soft SPI the most common setup.
|
||||||
*/
|
*/
|
||||||
#define _IS_HW_SPI(P) (defined(TMC_SPI_##P) && (TMC_SPI_##P == SD_MOSI_PIN || TMC_SPI_##P == SD_MISO_PIN || TMC_SPI_##P == SD_SCK_PIN))
|
|
||||||
|
|
||||||
#if HAS_MEDIA && HAS_DRIVER(TMC2130)
|
#if HAS_MEDIA && HAS_DRIVER(TMC2130)
|
||||||
#if ENABLED(TMC_USE_SW_SPI)
|
#define _IS_HW_SPI(P) (defined(TMC_SPI_##P) && (TMC_SPI_##P == SD_MOSI_PIN || TMC_SPI_##P == SD_MISO_PIN || TMC_SPI_##P == SD_SCK_PIN))
|
||||||
#if DISABLED(DUE_SOFTWARE_SPI) && (_IS_HW_SPI(MOSI) || _IS_HW_SPI(MISO) || _IS_HW_SPI(SCK))
|
#if DISABLED(SOFTWARE_SPI) && ENABLED(TMC_USE_SW_SPI) && (_IS_HW_SPI(MOSI) || _IS_HW_SPI(MISO) || _IS_HW_SPI(SCK))
|
||||||
#error "DUE hardware SPI is required but is incompatible with TMC2130 software SPI. Either disable TMC_USE_SW_SPI or use separate pins for the two SPIs."
|
#error "DUE hardware SPI is required but is incompatible with TMC2130 software SPI. Either disable TMC_USE_SW_SPI or use separate pins for the two SPIs."
|
||||||
#endif
|
#endif
|
||||||
#elif ENABLED(DUE_SOFTWARE_SPI)
|
#if ENABLED(SOFTWARE_SPI) && DISABLED(TMC_USE_SW_SPI)
|
||||||
#error "DUE software SPI is required but is incompatible with TMC2130 hardware SPI. Enable TMC_USE_SW_SPI to fix."
|
#error "DUE software SPI is required but is incompatible with TMC2130 hardware SPI. Enable TMC_USE_SW_SPI to fix."
|
||||||
#endif
|
#endif
|
||||||
|
#undef _IS_HW_SPI
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ENABLED(FAST_PWM_FAN) || SPINDLE_LASER_FREQUENCY
|
#if ENABLED(FAST_PWM_FAN) || SPINDLE_LASER_FREQUENCY
|
||||||
|
|||||||
@@ -64,19 +64,19 @@
|
|||||||
#define NUMBER_PINS_TOTAL PINS_COUNT
|
#define NUMBER_PINS_TOTAL PINS_COUNT
|
||||||
|
|
||||||
#define digitalRead_mod(p) extDigitalRead(p) // AVR digitalRead disabled PWM before it read the pin
|
#define digitalRead_mod(p) extDigitalRead(p) // AVR digitalRead disabled PWM before it read the 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 printPinNameByIndex(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 printPinNumber(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 printPinAnalog(p) do{ sprintf_P(buffer, PSTR(" (A%2d) "), digitalPinToAnalogIndex(pin)); SERIAL_ECHO(buffer); }while(0)
|
||||||
#define GET_ARRAY_PIN(p) pin_array[p].pin
|
#define getPinByIndex(p) pin_array[p].pin
|
||||||
#define GET_ARRAY_IS_DIGITAL(p) pin_array[p].is_digital
|
#define getPinIsDigitalByIndex(p) pin_array[p].is_digital
|
||||||
#define VALID_PIN(pin) (pin >= 0 && pin < int8_t(NUMBER_PINS_TOTAL))
|
#define isValidPin(pin) (pin >= 0 && pin < int8_t(NUMBER_PINS_TOTAL))
|
||||||
#define DIGITAL_PIN_TO_ANALOG_PIN(p) int(p - analogInputToDigitalPin(0))
|
#define digitalPinToAnalogIndex(p) int(p - analogInputToDigitalPin(0))
|
||||||
#define IS_ANALOG(P) WITHIN(P, char(analogInputToDigitalPin(0)), char(analogInputToDigitalPin(NUM_ANALOG_INPUTS - 1)))
|
#define isAnalogPin(P) WITHIN(P, pin_t(analogInputToDigitalPin(0)), pin_t(analogInputToDigitalPin(NUM_ANALOG_INPUTS - 1)))
|
||||||
#define pwm_status(pin) (((g_pinStatus[pin] & 0xF) == PIN_STATUS_PWM) && \
|
#define pwm_status(pin) (((g_pinStatus[pin] & 0xF) == PIN_STATUS_PWM) && \
|
||||||
((g_APinDescription[pin].ulPinAttribute & PIN_ATTR_PWM) == PIN_ATTR_PWM))
|
((g_APinDescription[pin].ulPinAttribute & PIN_ATTR_PWM) == PIN_ATTR_PWM))
|
||||||
#define MULTI_NAME_PAD 14 // space needed to be pretty if not first name assigned to a pin
|
#define MULTI_NAME_PAD 14 // space needed to be pretty if not first name assigned to a pin
|
||||||
|
|
||||||
bool GET_PINMODE(int8_t pin) { // 1: output, 0: input
|
bool getValidPinMode(int8_t pin) { // 1: output, 0: input
|
||||||
volatile Pio* port = g_APinDescription[pin].pPort;
|
volatile Pio* port = g_APinDescription[pin].pPort;
|
||||||
uint32_t mask = g_APinDescription[pin].ulPin;
|
uint32_t mask = g_APinDescription[pin].ulPin;
|
||||||
uint8_t pin_status = g_pinStatus[pin] & 0xF;
|
uint8_t pin_status = g_pinStatus[pin] & 0xF;
|
||||||
@@ -85,14 +85,14 @@ bool GET_PINMODE(int8_t pin) { // 1: output, 0: input
|
|||||||
|| pwm_status(pin));
|
|| pwm_status(pin));
|
||||||
}
|
}
|
||||||
|
|
||||||
void pwm_details(int32_t pin) {
|
void printPinPWM(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_ECHOPGM("PWM = ", PWM_INTERFACE->PWM_CH_NUM[chan].PWM_CDTY);
|
SERIAL_ECHOPGM("PWM = ", PWM_INTERFACE->PWM_CH_NUM[chan].PWM_CDTY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void print_port(const pin_t) {}
|
void printPinPort(const pin_t) {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* DUE Board pin | PORT | Label
|
* DUE Board pin | PORT | Label
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
/**
|
/**
|
||||||
* Define SPI Pins: SCK, MISO, MOSI, SS
|
* Define SPI Pins: SCK, MISO, MOSI, SS
|
||||||
*
|
*
|
||||||
* Available chip select pins for HW SPI are 4 10 52 77
|
* Available chip select pins for HW SPI are 4 10 52 77 87
|
||||||
*/
|
*/
|
||||||
#if SDSS == 4 || SDSS == 10 || SDSS == 52 || SDSS == 77 || SDSS == 87
|
#if SDSS == 4 || SDSS == 10 || SDSS == 52 || SDSS == 77 || SDSS == 87
|
||||||
#if SDSS == 4
|
#if SDSS == 4
|
||||||
@@ -48,7 +48,7 @@
|
|||||||
#define SD_MOSI_PIN 75
|
#define SD_MOSI_PIN 75
|
||||||
#else
|
#else
|
||||||
// defaults
|
// defaults
|
||||||
#define DUE_SOFTWARE_SPI
|
#define SOFTWARE_SPI
|
||||||
#ifndef SD_SCK_PIN
|
#ifndef SD_SCK_PIN
|
||||||
#define SD_SCK_PIN 52
|
#define SD_SCK_PIN 52
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -1,9 +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) 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
|
||||||
|
|||||||
@@ -1,8 +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
|
*
|
||||||
|
* 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
|
||||||
|
|||||||
@@ -0,0 +1,34 @@
|
|||||||
|
/**
|
||||||
|
* Marlin 3D Printer Firmware
|
||||||
|
* Copyright (c) 2023 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
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DUE (SAM3X8E) LCD-specific defines
|
||||||
|
*/
|
||||||
|
|
||||||
|
uint8_t u8g_com_HAL_DUE_sw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr);
|
||||||
|
uint8_t u8g_com_HAL_DUE_shared_hw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr);
|
||||||
|
uint8_t u8g_com_HAL_DUE_ST7920_sw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr);
|
||||||
|
|
||||||
|
#define U8G_COM_HAL_SW_SPI_FN u8g_com_HAL_DUE_sw_spi_fn
|
||||||
|
#define U8G_COM_HAL_HW_SPI_FN u8g_com_HAL_DUE_shared_hw_spi_fn
|
||||||
|
#define U8G_COM_ST7920_HAL_SW_SPI u8g_com_HAL_DUE_ST7920_sw_spi_fn
|
||||||
+6
-6
@@ -66,7 +66,7 @@
|
|||||||
|
|
||||||
#include <U8glib-HAL.h>
|
#include <U8glib-HAL.h>
|
||||||
|
|
||||||
#if ENABLED(FYSETC_MINI_12864)
|
#if U8G_SPI_USE_MODE_3
|
||||||
#define SPISEND_SW_DUE u8g_spiSend_sw_DUE_mode_3
|
#define SPISEND_SW_DUE u8g_spiSend_sw_DUE_mode_3
|
||||||
#else
|
#else
|
||||||
#define SPISEND_SW_DUE u8g_spiSend_sw_DUE_mode_0
|
#define SPISEND_SW_DUE u8g_spiSend_sw_DUE_mode_0
|
||||||
@@ -96,15 +96,15 @@ uint8_t u8g_com_HAL_DUE_sw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case U8G_COM_MSG_CHIP_SELECT:
|
case U8G_COM_MSG_CHIP_SELECT:
|
||||||
#if ENABLED(FYSETC_MINI_12864) // LCD SPI is running mode 3 while SD card is running mode 0
|
#if U8G_SPI_USE_MODE_3 // LCD SPI is running mode 3 while SD card is running mode 0
|
||||||
if (arg_val) { // SCK idle state needs to be set to the proper idle state before
|
if (arg_val) { // SCK idle state needs to be set to the proper idle state before
|
||||||
// the next chip select goes active
|
// the next chip select goes active
|
||||||
u8g_SetPILevel_DUE(u8g, U8G_PI_SCK, 1); //set SCK to mode 3 idle state before CS goes active
|
u8g_SetPILevel_DUE(u8g, U8G_PI_SCK, 1); // Set SCK to mode 3 idle state before CS goes active
|
||||||
u8g_SetPILevel_DUE(u8g, U8G_PI_CS, LOW);
|
u8g_SetPILevel_DUE(u8g, U8G_PI_CS, LOW);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
u8g_SetPILevel_DUE(u8g, U8G_PI_CS, HIGH);
|
u8g_SetPILevel_DUE(u8g, U8G_PI_CS, HIGH);
|
||||||
u8g_SetPILevel_DUE(u8g, U8G_PI_SCK, 0); //set SCK to mode 0 idle state after CS goes inactive
|
u8g_SetPILevel_DUE(u8g, U8G_PI_SCK, 0); // Set SCK to mode 0 idle state after CS goes inactive
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
u8g_SetPILevel_DUE(u8g, U8G_PI_CS, !arg_val);
|
u8g_SetPILevel_DUE(u8g, U8G_PI_CS, !arg_val);
|
||||||
@@ -11,7 +11,7 @@ if pioutil.is_pio_build():
|
|||||||
|
|
||||||
if current_OS == 'Windows':
|
if current_OS == 'Windows':
|
||||||
|
|
||||||
Import("env")
|
env = pioutil.env
|
||||||
|
|
||||||
# Use bossac.exe on Windows
|
# Use bossac.exe on Windows
|
||||||
env.Replace(
|
env.Replace(
|
||||||
|
|||||||
@@ -0,0 +1,29 @@
|
|||||||
|
# USB Files Source Documentation
|
||||||
|
|
||||||
|
## Source
|
||||||
|
|
||||||
|
We sourced the USB files in Marlin from the Atmel ASF (Advanced Software Framework). The framework provides a variety of examples which were utilized in this project.
|
||||||
|
|
||||||
|
Atmel doesn't provide these files in a source repository but they can be extracted from ASF, which can be downloaded from Atmel.
|
||||||
|
|
||||||
|
[Advanced Software Framework](https://www.microchip.com/en-us/tools-resources/develop/libraries/advanced-software-framework)
|
||||||
|
|
||||||
|
## Modifications
|
||||||
|
|
||||||
|
The files are mostly unmodified except for minor cosmetic changes but some more significant changes were needed.
|
||||||
|
|
||||||
|
The changes that prompted the addition of this README file are listed below. Other changes may have been made prior to this.
|
||||||
|
|
||||||
|
1. Modified `uotghs_device_due.c` to resolve race conditions that could leave interrupts asserted when freezing the peripheral clock, resulting in hangs and watchdog resets due to the ensuing interrupt storm.
|
||||||
|
|
||||||
|
## Version Information
|
||||||
|
|
||||||
|
We don't know the exact version of ASF used as the source. However, the copyright information in the files indicates they are from 2015.
|
||||||
|
|
||||||
|
## Upgrade Considerations
|
||||||
|
|
||||||
|
We looked at the ASF 3.52.0 files released in 2022 but saw no immediate benefits to justify an upgrade. It's important to note that the files in Marlin don't follow the same folder structure as the files in ASF, which complicates the process of comparing and applying updated files.
|
||||||
|
|
||||||
|
When these files are updated it's important to carefully compare them to Marlin's versions so any improvements in the Marlin sources are brought forward.
|
||||||
|
|
||||||
|
It would be best to make Marlin's directory structure align with ASF or at least document the source of each file to ease future updates.
|
||||||
@@ -142,7 +142,6 @@
|
|||||||
*/
|
*/
|
||||||
#define COMPILER_PACK_RESET() COMPILER_PRAGMA(pack())
|
#define COMPILER_PACK_RESET() COMPILER_PRAGMA(pack())
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Set aligned boundary.
|
* \brief Set aligned boundary.
|
||||||
*/
|
*/
|
||||||
@@ -283,7 +282,6 @@ typedef double F64; //!< 64-bit floating-point number.
|
|||||||
typedef uint32_t iram_size_t;
|
typedef uint32_t iram_size_t;
|
||||||
//! @}
|
//! @}
|
||||||
|
|
||||||
|
|
||||||
/*! \name Status Types
|
/*! \name Status Types
|
||||||
*/
|
*/
|
||||||
//! @{
|
//! @{
|
||||||
@@ -291,7 +289,6 @@ typedef bool Status_bool_t; //!< Boolean status.
|
|||||||
typedef U8 Status_t; //!< 8-bit-coded status.
|
typedef U8 Status_t; //!< 8-bit-coded status.
|
||||||
//! @}
|
//! @}
|
||||||
|
|
||||||
|
|
||||||
/*! \name Aliasing Aggregate Types
|
/*! \name Aliasing Aggregate Types
|
||||||
*/
|
*/
|
||||||
//! @{
|
//! @{
|
||||||
@@ -462,7 +459,6 @@ typedef struct
|
|||||||
#endif
|
#endif
|
||||||
//! @}
|
//! @}
|
||||||
|
|
||||||
|
|
||||||
#ifndef __ASSEMBLY__ // not for assembling.
|
#ifndef __ASSEMBLY__ // not for assembling.
|
||||||
|
|
||||||
//! \name Optimization Control
|
//! \name Optimization Control
|
||||||
@@ -581,7 +577,6 @@ typedef struct
|
|||||||
|
|
||||||
//! @}
|
//! @}
|
||||||
|
|
||||||
|
|
||||||
/*! \name Zero-Bit Counting
|
/*! \name Zero-Bit Counting
|
||||||
*
|
*
|
||||||
* Under GCC, __builtin_clz and __builtin_ctz behave like macros when
|
* Under GCC, __builtin_clz and __builtin_ctz behave like macros when
|
||||||
@@ -692,7 +687,6 @@ typedef struct
|
|||||||
|
|
||||||
//! @}
|
//! @}
|
||||||
|
|
||||||
|
|
||||||
/*! \name Bit Reversing
|
/*! \name Bit Reversing
|
||||||
*/
|
*/
|
||||||
//! @{
|
//! @{
|
||||||
@@ -732,7 +726,6 @@ typedef struct
|
|||||||
|
|
||||||
//! @}
|
//! @}
|
||||||
|
|
||||||
|
|
||||||
/*! \name Alignment
|
/*! \name Alignment
|
||||||
*/
|
*/
|
||||||
//! @{
|
//! @{
|
||||||
@@ -798,7 +791,6 @@ typedef struct
|
|||||||
*/
|
*/
|
||||||
#define Long_call(addr) ((*(void (*)(void))(addr))())
|
#define Long_call(addr) ((*(void (*)(void))(addr))())
|
||||||
|
|
||||||
|
|
||||||
/*! \name MCU Endianism Handling
|
/*! \name MCU Endianism Handling
|
||||||
* ARM is MCU little endianism.
|
* ARM is MCU little endianism.
|
||||||
*/
|
*/
|
||||||
@@ -868,7 +860,6 @@ typedef struct
|
|||||||
#define CPU_TO_BE32(x) swap32(x)
|
#define CPU_TO_BE32(x) swap32(x)
|
||||||
//! @}
|
//! @}
|
||||||
|
|
||||||
|
|
||||||
/*! \name Endianism Conversion
|
/*! \name Endianism Conversion
|
||||||
*
|
*
|
||||||
* The same considerations as for clz and ctz apply here but GCC's
|
* The same considerations as for clz and ctz apply here but GCC's
|
||||||
@@ -955,7 +946,6 @@ typedef struct
|
|||||||
|
|
||||||
//! @}
|
//! @}
|
||||||
|
|
||||||
|
|
||||||
/*! \name Target Abstraction
|
/*! \name Target Abstraction
|
||||||
*/
|
*/
|
||||||
//! @{
|
//! @{
|
||||||
@@ -997,7 +987,6 @@ typedef U8 Byte; //!< 8-bit unsigned integer.
|
|||||||
|
|
||||||
#endif // #ifndef __ASSEMBLY__
|
#endif // #ifndef __ASSEMBLY__
|
||||||
|
|
||||||
|
|
||||||
#ifdef __ICCARM__
|
#ifdef __ICCARM__
|
||||||
#define SHORTENUM __packed
|
#define SHORTENUM __packed
|
||||||
#elif defined(__GNUC__)
|
#elif defined(__GNUC__)
|
||||||
|
|||||||
@@ -81,7 +81,6 @@
|
|||||||
#define LUN_0_NAME "\"SD/MMC Card\""
|
#define LUN_0_NAME "\"SD/MMC Card\""
|
||||||
//! @}
|
//! @}
|
||||||
|
|
||||||
|
|
||||||
/*! \name Actions Associated with Memory Accesses
|
/*! \name Actions Associated with Memory Accesses
|
||||||
*
|
*
|
||||||
* Write here the action to associate with each memory access.
|
* Write here the action to associate with each memory access.
|
||||||
@@ -112,5 +111,4 @@
|
|||||||
#define GLOBAL_WR_PROTECT false //!< Management of a global write protection.
|
#define GLOBAL_WR_PROTECT false //!< Management of a global write protection.
|
||||||
//! @}
|
//! @}
|
||||||
|
|
||||||
|
|
||||||
#endif // _CONF_ACCESS_H_
|
#endif // _CONF_ACCESS_H_
|
||||||
|
|||||||
@@ -96,5 +96,4 @@
|
|||||||
// - UPLL frequency: 480MHz
|
// - UPLL frequency: 480MHz
|
||||||
// - USB clock: 480 / 1 = 480MHz
|
// - USB clock: 480 / 1 = 480MHz
|
||||||
|
|
||||||
|
|
||||||
#endif /* CONF_CLOCK_H_INCLUDED */
|
#endif /* CONF_CLOCK_H_INCLUDED */
|
||||||
|
|||||||
@@ -88,7 +88,6 @@
|
|||||||
#endif
|
#endif
|
||||||
//@}
|
//@}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* USB Device Callbacks definitions (Optional)
|
* USB Device Callbacks definitions (Optional)
|
||||||
* @{
|
* @{
|
||||||
@@ -150,7 +149,6 @@
|
|||||||
|
|
||||||
//@}
|
//@}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* USB Interface Configuration
|
* USB Interface Configuration
|
||||||
* @{
|
* @{
|
||||||
@@ -210,7 +208,6 @@
|
|||||||
//@}
|
//@}
|
||||||
//@}
|
//@}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Configuration of MSC interface
|
* Configuration of MSC interface
|
||||||
* @{
|
* @{
|
||||||
@@ -245,7 +242,6 @@
|
|||||||
|
|
||||||
//@}
|
//@}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Description of Composite Device
|
* Description of Composite Device
|
||||||
* @{
|
* @{
|
||||||
|
|||||||
@@ -68,7 +68,6 @@
|
|||||||
#endif
|
#endif
|
||||||
#include "ctrl_access.h"
|
#include "ctrl_access.h"
|
||||||
|
|
||||||
|
|
||||||
//_____ D E F I N I T I O N S ______________________________________________
|
//_____ D E F I N I T I O N S ______________________________________________
|
||||||
|
|
||||||
#ifdef FREERTOS_USED
|
#ifdef FREERTOS_USED
|
||||||
@@ -112,7 +111,6 @@ static xSemaphoreHandle ctrl_access_semphr = NULL;
|
|||||||
|
|
||||||
#endif // FREERTOS_USED
|
#endif // FREERTOS_USED
|
||||||
|
|
||||||
|
|
||||||
#if MAX_LUN
|
#if MAX_LUN
|
||||||
|
|
||||||
/*! \brief Initializes an entry of the LUN descriptor table.
|
/*! \brief Initializes an entry of the LUN descriptor table.
|
||||||
@@ -242,17 +240,14 @@ static const struct
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#if GLOBAL_WR_PROTECT == true
|
#if GLOBAL_WR_PROTECT == true
|
||||||
bool g_wr_protect;
|
bool g_wr_protect;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*! \name Control Interface
|
/*! \name Control Interface
|
||||||
*/
|
*/
|
||||||
//! @{
|
//! @{
|
||||||
|
|
||||||
|
|
||||||
#ifdef FREERTOS_USED
|
#ifdef FREERTOS_USED
|
||||||
|
|
||||||
bool ctrl_access_init(void)
|
bool ctrl_access_init(void)
|
||||||
@@ -270,7 +265,6 @@ bool ctrl_access_init(void)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*! \brief Locks accesses to LUNs.
|
/*! \brief Locks accesses to LUNs.
|
||||||
*
|
*
|
||||||
* \return \c true if the access was successfully locked, else \c false.
|
* \return \c true if the access was successfully locked, else \c false.
|
||||||
@@ -288,7 +282,6 @@ static bool ctrl_access_lock(void)
|
|||||||
|
|
||||||
#endif // FREERTOS_USED
|
#endif // FREERTOS_USED
|
||||||
|
|
||||||
|
|
||||||
U8 get_nb_lun(void)
|
U8 get_nb_lun(void)
|
||||||
{
|
{
|
||||||
#if MEM_USB == ENABLE
|
#if MEM_USB == ENABLE
|
||||||
@@ -309,13 +302,11 @@ U8 get_nb_lun(void)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
U8 get_cur_lun(void)
|
U8 get_cur_lun(void)
|
||||||
{
|
{
|
||||||
return LUN_ID_0;
|
return LUN_ID_0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Ctrl_status mem_test_unit_ready(U8 lun)
|
Ctrl_status mem_test_unit_ready(U8 lun)
|
||||||
{
|
{
|
||||||
Ctrl_status status;
|
Ctrl_status status;
|
||||||
@@ -337,7 +328,6 @@ Ctrl_status mem_test_unit_ready(U8 lun)
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Ctrl_status mem_read_capacity(U8 lun, U32 *u32_nb_sector)
|
Ctrl_status mem_read_capacity(U8 lun, U32 *u32_nb_sector)
|
||||||
{
|
{
|
||||||
Ctrl_status status;
|
Ctrl_status status;
|
||||||
@@ -359,7 +349,6 @@ Ctrl_status mem_read_capacity(U8 lun, U32 *u32_nb_sector)
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
U8 mem_sector_size(U8 lun)
|
U8 mem_sector_size(U8 lun)
|
||||||
{
|
{
|
||||||
U8 sector_size;
|
U8 sector_size;
|
||||||
@@ -381,7 +370,6 @@ U8 mem_sector_size(U8 lun)
|
|||||||
return sector_size;
|
return sector_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool mem_unload(U8 lun, bool unload)
|
bool mem_unload(U8 lun, bool unload)
|
||||||
{
|
{
|
||||||
bool unloaded;
|
bool unloaded;
|
||||||
@@ -433,7 +421,6 @@ bool mem_wr_protect(U8 lun)
|
|||||||
return wr_protect;
|
return wr_protect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool mem_removal(U8 lun)
|
bool mem_removal(U8 lun)
|
||||||
{
|
{
|
||||||
bool removal;
|
bool removal;
|
||||||
@@ -458,7 +445,6 @@ bool mem_removal(U8 lun)
|
|||||||
return removal;
|
return removal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const char *mem_name(U8 lun)
|
const char *mem_name(U8 lun)
|
||||||
{
|
{
|
||||||
#if MAX_LUN==0
|
#if MAX_LUN==0
|
||||||
@@ -475,17 +461,14 @@ const char *mem_name(U8 lun)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! @}
|
//! @}
|
||||||
|
|
||||||
|
|
||||||
#if ACCESS_USB == true
|
#if ACCESS_USB == true
|
||||||
|
|
||||||
/*! \name MEM <-> USB Interface
|
/*! \name MEM <-> USB Interface
|
||||||
*/
|
*/
|
||||||
//! @{
|
//! @{
|
||||||
|
|
||||||
|
|
||||||
Ctrl_status memory_2_usb(U8 lun, U32 addr, U16 nb_sector)
|
Ctrl_status memory_2_usb(U8 lun, U32 addr, U16 nb_sector)
|
||||||
{
|
{
|
||||||
Ctrl_status status;
|
Ctrl_status status;
|
||||||
@@ -505,7 +488,6 @@ Ctrl_status memory_2_usb(U8 lun, U32 addr, U16 nb_sector)
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Ctrl_status usb_2_memory(U8 lun, U32 addr, U16 nb_sector)
|
Ctrl_status usb_2_memory(U8 lun, U32 addr, U16 nb_sector)
|
||||||
{
|
{
|
||||||
Ctrl_status status;
|
Ctrl_status status;
|
||||||
@@ -525,19 +507,16 @@ Ctrl_status usb_2_memory(U8 lun, U32 addr, U16 nb_sector)
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! @}
|
//! @}
|
||||||
|
|
||||||
#endif // ACCESS_USB == true
|
#endif // ACCESS_USB == true
|
||||||
|
|
||||||
|
|
||||||
#if ACCESS_MEM_TO_RAM == true
|
#if ACCESS_MEM_TO_RAM == true
|
||||||
|
|
||||||
/*! \name MEM <-> RAM Interface
|
/*! \name MEM <-> RAM Interface
|
||||||
*/
|
*/
|
||||||
//! @{
|
//! @{
|
||||||
|
|
||||||
|
|
||||||
Ctrl_status memory_2_ram(U8 lun, U32 addr, void *ram)
|
Ctrl_status memory_2_ram(U8 lun, U32 addr, void *ram)
|
||||||
{
|
{
|
||||||
Ctrl_status status;
|
Ctrl_status status;
|
||||||
@@ -564,7 +543,6 @@ Ctrl_status memory_2_ram(U8 lun, U32 addr, void *ram)
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Ctrl_status ram_2_memory(U8 lun, U32 addr, const void *ram)
|
Ctrl_status ram_2_memory(U8 lun, U32 addr, const void *ram)
|
||||||
{
|
{
|
||||||
Ctrl_status status;
|
Ctrl_status status;
|
||||||
@@ -591,19 +569,16 @@ Ctrl_status ram_2_memory(U8 lun, U32 addr, const void *ram)
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! @}
|
//! @}
|
||||||
|
|
||||||
#endif // ACCESS_MEM_TO_RAM == true
|
#endif // ACCESS_MEM_TO_RAM == true
|
||||||
|
|
||||||
|
|
||||||
#if ACCESS_STREAM == true
|
#if ACCESS_STREAM == true
|
||||||
|
|
||||||
/*! \name Streaming MEM <-> MEM Interface
|
/*! \name Streaming MEM <-> MEM Interface
|
||||||
*/
|
*/
|
||||||
//! @{
|
//! @{
|
||||||
|
|
||||||
|
|
||||||
#if ACCESS_MEM_TO_MEM == true
|
#if ACCESS_MEM_TO_MEM == true
|
||||||
|
|
||||||
#include "fat.h"
|
#include "fat.h"
|
||||||
@@ -625,21 +600,18 @@ Ctrl_status stream_mem_to_mem(U8 src_lun, U32 src_addr, U8 dest_lun, U32 dest_ad
|
|||||||
|
|
||||||
#endif // ACCESS_MEM_TO_MEM == true
|
#endif // ACCESS_MEM_TO_MEM == true
|
||||||
|
|
||||||
|
|
||||||
Ctrl_status stream_state(U8 id)
|
Ctrl_status stream_state(U8 id)
|
||||||
{
|
{
|
||||||
UNUSED(id);
|
UNUSED(id);
|
||||||
return CTRL_GOOD;
|
return CTRL_GOOD;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
U16 stream_stop(U8 id)
|
U16 stream_stop(U8 id)
|
||||||
{
|
{
|
||||||
UNUSED(id);
|
UNUSED(id);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//! @}
|
//! @}
|
||||||
|
|
||||||
#endif // ACCESS_STREAM
|
#endif // ACCESS_STREAM
|
||||||
|
|||||||
@@ -56,7 +56,6 @@
|
|||||||
* Support and FAQ: visit <a href="https://www.atmel.com/design-support/">Atmel Support</a>
|
* Support and FAQ: visit <a href="https://www.atmel.com/design-support/">Atmel Support</a>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#ifndef _CTRL_ACCESS_H_
|
#ifndef _CTRL_ACCESS_H_
|
||||||
#define _CTRL_ACCESS_H_
|
#define _CTRL_ACCESS_H_
|
||||||
|
|
||||||
@@ -89,7 +88,6 @@ typedef enum
|
|||||||
CTRL_BUSY = FAIL + 2 //!< Memory not initialized or changed.
|
CTRL_BUSY = FAIL + 2 //!< Memory not initialized or changed.
|
||||||
} Ctrl_status;
|
} Ctrl_status;
|
||||||
|
|
||||||
|
|
||||||
// FYI: Each Logical Unit Number (LUN) corresponds to a memory.
|
// FYI: Each Logical Unit Number (LUN) corresponds to a memory.
|
||||||
|
|
||||||
// Check LUN defines.
|
// Check LUN defines.
|
||||||
@@ -136,7 +134,6 @@ typedef enum
|
|||||||
#define LUN_ID_USB (MAX_LUN) //!< First dynamic LUN (USB host mass storage).
|
#define LUN_ID_USB (MAX_LUN) //!< First dynamic LUN (USB host mass storage).
|
||||||
//! @}
|
//! @}
|
||||||
|
|
||||||
|
|
||||||
// Include LUN header files.
|
// Include LUN header files.
|
||||||
#if LUN_0 == ENABLE
|
#if LUN_0 == ENABLE
|
||||||
#include LUN_0_INCLUDE
|
#include LUN_0_INCLUDE
|
||||||
@@ -166,13 +163,11 @@ typedef enum
|
|||||||
#include LUN_USB_INCLUDE
|
#include LUN_USB_INCLUDE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
// Check the configuration of write protection in conf_access.h.
|
// Check the configuration of write protection in conf_access.h.
|
||||||
#ifndef GLOBAL_WR_PROTECT
|
#ifndef GLOBAL_WR_PROTECT
|
||||||
#error GLOBAL_WR_PROTECT must be defined as true or false in conf_access.h
|
#error GLOBAL_WR_PROTECT must be defined as true or false in conf_access.h
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#if GLOBAL_WR_PROTECT == true
|
#if GLOBAL_WR_PROTECT == true
|
||||||
|
|
||||||
//! Write protect.
|
//! Write protect.
|
||||||
@@ -180,7 +175,6 @@ extern bool g_wr_protect;
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*! \name Control Interface
|
/*! \name Control Interface
|
||||||
*/
|
*/
|
||||||
//! @{
|
//! @{
|
||||||
@@ -279,7 +273,6 @@ extern const char *mem_name(U8 lun);
|
|||||||
|
|
||||||
//! @}
|
//! @}
|
||||||
|
|
||||||
|
|
||||||
#if ACCESS_USB == true
|
#if ACCESS_USB == true
|
||||||
|
|
||||||
/*! \name MEM <-> USB Interface
|
/*! \name MEM <-> USB Interface
|
||||||
@@ -310,7 +303,6 @@ extern Ctrl_status usb_2_memory(U8 lun, U32 addr, U16 nb_sector);
|
|||||||
|
|
||||||
#endif // ACCESS_USB == true
|
#endif // ACCESS_USB == true
|
||||||
|
|
||||||
|
|
||||||
#if ACCESS_MEM_TO_RAM == true
|
#if ACCESS_MEM_TO_RAM == true
|
||||||
|
|
||||||
/*! \name MEM <-> RAM Interface
|
/*! \name MEM <-> RAM Interface
|
||||||
@@ -341,7 +333,6 @@ extern Ctrl_status ram_2_memory(U8 lun, U32 addr, const void *ram);
|
|||||||
|
|
||||||
#endif // ACCESS_MEM_TO_RAM == true
|
#endif // ACCESS_MEM_TO_RAM == true
|
||||||
|
|
||||||
|
|
||||||
#if ACCESS_STREAM == true
|
#if ACCESS_STREAM == true
|
||||||
|
|
||||||
/*! \name Streaming MEM <-> MEM Interface
|
/*! \name Streaming MEM <-> MEM Interface
|
||||||
|
|||||||
@@ -57,7 +57,6 @@
|
|||||||
|
|
||||||
#include "preprocessor.h"
|
#include "preprocessor.h"
|
||||||
|
|
||||||
|
|
||||||
//! Maximal number of repetitions supported by MREPEAT.
|
//! Maximal number of repetitions supported by MREPEAT.
|
||||||
#define MREPEAT_LIMIT 256
|
#define MREPEAT_LIMIT 256
|
||||||
|
|
||||||
|
|||||||
@@ -128,7 +128,6 @@ static inline void osc_enable(uint32_t ul_id) {
|
|||||||
pmc_switch_sclk_to_32kxtal(PMC_OSC_BYPASS);
|
pmc_switch_sclk_to_32kxtal(PMC_OSC_BYPASS);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
||||||
case OSC_MAINCK_4M_RC:
|
case OSC_MAINCK_4M_RC:
|
||||||
pmc_switch_mainck_to_fastrc(CKGR_MOR_MOSCRCF_4_MHz);
|
pmc_switch_mainck_to_fastrc(CKGR_MOR_MOSCRCF_4_MHz);
|
||||||
break;
|
break;
|
||||||
@@ -141,7 +140,6 @@ static inline void osc_enable(uint32_t ul_id) {
|
|||||||
pmc_switch_mainck_to_fastrc(CKGR_MOR_MOSCRCF_12_MHz);
|
pmc_switch_mainck_to_fastrc(CKGR_MOR_MOSCRCF_12_MHz);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
||||||
case OSC_MAINCK_XTAL:
|
case OSC_MAINCK_XTAL:
|
||||||
pmc_switch_mainck_to_xtal(PMC_OSC_XTAL/*,
|
pmc_switch_mainck_to_xtal(PMC_OSC_XTAL/*,
|
||||||
pmc_us_to_moscxtst(BOARD_OSC_STARTUP_US,
|
pmc_us_to_moscxtst(BOARD_OSC_STARTUP_US,
|
||||||
|
|||||||
@@ -51,5 +51,4 @@
|
|||||||
#include "stringz.h"
|
#include "stringz.h"
|
||||||
#include "mrepeat.h"
|
#include "mrepeat.h"
|
||||||
|
|
||||||
|
|
||||||
#endif // _PREPROCESSOR_H_
|
#endif // _PREPROCESSOR_H_
|
||||||
|
|||||||
@@ -86,7 +86,6 @@ enum scsi_sbc_mode {
|
|||||||
SCSI_MS_MODE_CACHING = 0x08, //!< Caching mode page
|
SCSI_MS_MODE_CACHING = 0x08, //!< Caching mode page
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
//! \name SBC-2 Device-Specific Parameter
|
//! \name SBC-2 Device-Specific Parameter
|
||||||
//@{
|
//@{
|
||||||
#define SCSI_MS_SBC_WP 0x80 //!< Write Protected
|
#define SCSI_MS_SBC_WP 0x80 //!< Write Protected
|
||||||
|
|||||||
@@ -18,30 +18,30 @@ extern "C" {
|
|||||||
void sd_mmc_spi_mem_init() {
|
void sd_mmc_spi_mem_init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
Ctrl_status sd_mmc_spi_test_unit_ready() {
|
inline bool media_ready() {
|
||||||
#ifdef DISABLE_DUE_SD_MMC
|
return IS_SD_MOUNTED() && IS_SD_INSERTED() && !IS_SD_FILE_OPEN() && !IS_SD_PRINTING();
|
||||||
return CTRL_NO_PRESENT;
|
|
||||||
#endif
|
|
||||||
if (!IS_SD_INSERTED() || IS_SD_PRINTING() || IS_SD_FILE_OPEN() || !card.isMounted())
|
|
||||||
return CTRL_NO_PRESENT;
|
|
||||||
return CTRL_GOOD;
|
|
||||||
}
|
|
||||||
|
|
||||||
// NOTE: This function is defined as returning the address of the last block
|
|
||||||
// in the card, which is cardSize() - 1
|
|
||||||
Ctrl_status sd_mmc_spi_read_capacity(uint32_t *nb_sector) {
|
|
||||||
if (!IS_SD_INSERTED() || IS_SD_PRINTING() || IS_SD_FILE_OPEN() || !card.isMounted())
|
|
||||||
return CTRL_NO_PRESENT;
|
|
||||||
*nb_sector = card.diskIODriver()->cardSize() - 1;
|
|
||||||
return CTRL_GOOD;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool sd_mmc_spi_unload(bool) { return true; }
|
bool sd_mmc_spi_unload(bool) { return true; }
|
||||||
|
|
||||||
bool sd_mmc_spi_wr_protect() { return false; }
|
bool sd_mmc_spi_wr_protect() { return false; }
|
||||||
|
|
||||||
bool sd_mmc_spi_removal() {
|
bool sd_mmc_spi_removal() { return !media_ready(); }
|
||||||
return (!IS_SD_INSERTED() || IS_SD_PRINTING() || IS_SD_FILE_OPEN() || !card.isMounted());
|
|
||||||
|
Ctrl_status sd_mmc_spi_test_unit_ready() {
|
||||||
|
#ifdef DISABLE_DUE_SD_MMC
|
||||||
|
return CTRL_NO_PRESENT;
|
||||||
|
#endif
|
||||||
|
if (sd_mmc_spi_removal()) return CTRL_NO_PRESENT;
|
||||||
|
return CTRL_GOOD;
|
||||||
|
}
|
||||||
|
|
||||||
|
// NOTE: This function is defined as returning the address of the last block
|
||||||
|
// in the card, which is cardSize() - 1
|
||||||
|
Ctrl_status sd_mmc_spi_read_capacity(uint32_t *nb_sector) {
|
||||||
|
if (sd_mmc_spi_removal()) return CTRL_NO_PRESENT;
|
||||||
|
*nb_sector = card.diskIODriver()->cardSize() - 1;
|
||||||
|
return CTRL_GOOD;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if ACCESS_USB == true
|
#if ACCESS_USB == true
|
||||||
@@ -61,8 +61,7 @@ Ctrl_status sd_mmc_spi_usb_read_10(uint32_t addr, uint16_t nb_sector) {
|
|||||||
#ifdef DISABLE_DUE_SD_MMC
|
#ifdef DISABLE_DUE_SD_MMC
|
||||||
return CTRL_NO_PRESENT;
|
return CTRL_NO_PRESENT;
|
||||||
#endif
|
#endif
|
||||||
if (!IS_SD_INSERTED() || IS_SD_PRINTING() || IS_SD_FILE_OPEN() || !card.isMounted())
|
if (sd_mmc_spi_removal()) return CTRL_NO_PRESENT;
|
||||||
return CTRL_NO_PRESENT;
|
|
||||||
|
|
||||||
#ifdef DEBUG_MMC
|
#ifdef DEBUG_MMC
|
||||||
{
|
{
|
||||||
@@ -101,8 +100,7 @@ Ctrl_status sd_mmc_spi_usb_write_10(uint32_t addr, uint16_t nb_sector) {
|
|||||||
#ifdef DISABLE_DUE_SD_MMC
|
#ifdef DISABLE_DUE_SD_MMC
|
||||||
return CTRL_NO_PRESENT;
|
return CTRL_NO_PRESENT;
|
||||||
#endif
|
#endif
|
||||||
if (!IS_SD_INSERTED() || IS_SD_PRINTING() || IS_SD_FILE_OPEN() || !card.isMounted())
|
if (sd_mmc_spi_removal()) return CTRL_NO_PRESENT;
|
||||||
return CTRL_NO_PRESENT;
|
|
||||||
|
|
||||||
#ifdef DEBUG_MMC
|
#ifdef DEBUG_MMC
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -45,7 +45,6 @@
|
|||||||
* Support and FAQ: visit <a href="https://www.atmel.com/design-support/">Atmel Support</a>
|
* Support and FAQ: visit <a href="https://www.atmel.com/design-support/">Atmel Support</a>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#ifndef _SD_MMC_SPI_MEM_H_
|
#ifndef _SD_MMC_SPI_MEM_H_
|
||||||
#define _SD_MMC_SPI_MEM_H_
|
#define _SD_MMC_SPI_MEM_H_
|
||||||
|
|
||||||
@@ -63,22 +62,19 @@
|
|||||||
#error sd_mmc_spi_mem.h is #included although SD_MMC_SPI_MEM is disabled
|
#error sd_mmc_spi_mem.h is #included although SD_MMC_SPI_MEM is disabled
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#include "ctrl_access.h"
|
#include "ctrl_access.h"
|
||||||
|
|
||||||
|
|
||||||
//_____ D E F I N I T I O N S ______________________________________________
|
//_____ D E F I N I T I O N S ______________________________________________
|
||||||
|
|
||||||
#define SD_MMC_REMOVED 0
|
#define SD_MMC_REMOVED 0
|
||||||
#define SD_MMC_INSERTED 1
|
#define SD_MMC_INSERTED 1
|
||||||
#define SD_MMC_REMOVING 2
|
#define SD_MMC_REMOVING 2
|
||||||
|
|
||||||
|
|
||||||
//---- CONTROL FUNCTIONS ----
|
//---- 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.
|
||||||
//!/
|
//!/
|
||||||
extern void sd_mmc_spi_mem_init(void);
|
void sd_mmc_spi_mem_init();
|
||||||
|
|
||||||
//!
|
//!
|
||||||
//! @brief This function tests the state of the SD_MMC memory and sends it to the Host.
|
//! @brief This function tests the state of the SD_MMC memory and sends it to the Host.
|
||||||
@@ -91,7 +87,7 @@ extern void sd_mmc_spi_mem_init(void);
|
|||||||
//! Media not present -> CTRL_NO_PRESENT
|
//! Media not present -> CTRL_NO_PRESENT
|
||||||
//! Media has changed -> CTRL_BUSY
|
//! Media has changed -> CTRL_BUSY
|
||||||
//!/
|
//!/
|
||||||
extern Ctrl_status sd_mmc_spi_test_unit_ready(void);
|
Ctrl_status sd_mmc_spi_test_unit_ready();
|
||||||
|
|
||||||
//!
|
//!
|
||||||
//! @brief This function gives the address of the last valid sector.
|
//! @brief This function gives the address of the last valid sector.
|
||||||
@@ -102,7 +98,7 @@ extern Ctrl_status sd_mmc_spi_test_unit_ready(void);
|
|||||||
//! Media ready -> CTRL_GOOD
|
//! Media ready -> CTRL_GOOD
|
||||||
//! Media not present -> CTRL_NO_PRESENT
|
//! Media not present -> CTRL_NO_PRESENT
|
||||||
//!/
|
//!/
|
||||||
extern Ctrl_status sd_mmc_spi_read_capacity(uint32_t *nb_sector);
|
Ctrl_status sd_mmc_spi_read_capacity(uint32_t *nb_sector);
|
||||||
|
|
||||||
/*! \brief Unload/Load the SD/MMC card selected
|
/*! \brief Unload/Load the SD/MMC card selected
|
||||||
*
|
*
|
||||||
@@ -113,7 +109,7 @@ extern Ctrl_status sd_mmc_spi_read_capacity(uint32_t *nb_sector);
|
|||||||
*
|
*
|
||||||
* \return \c true if unload/load done success.
|
* \return \c true if unload/load done success.
|
||||||
*/
|
*/
|
||||||
extern bool sd_mmc_spi_unload(bool unload);
|
bool sd_mmc_spi_unload(bool unload);
|
||||||
|
|
||||||
//!
|
//!
|
||||||
//! @brief This function returns the write protected status of the memory.
|
//! @brief This function returns the write protected status of the memory.
|
||||||
@@ -124,15 +120,14 @@ extern bool sd_mmc_spi_unload(bool unload);
|
|||||||
//!
|
//!
|
||||||
//! @return false -> the memory is not write-protected (always)
|
//! @return false -> the memory is not write-protected (always)
|
||||||
//!/
|
//!/
|
||||||
extern bool sd_mmc_spi_wr_protect(void);
|
bool sd_mmc_spi_wr_protect();
|
||||||
|
|
||||||
//!
|
//!
|
||||||
//! @brief This function tells if the memory has been removed or not.
|
//! @brief This function tells if the memory has been removed or not.
|
||||||
//!
|
//!
|
||||||
//! @return false -> The memory isn't removed
|
//! @return false -> The memory isn't removed
|
||||||
//!
|
//!
|
||||||
extern bool sd_mmc_spi_removal(void);
|
bool sd_mmc_spi_removal();
|
||||||
|
|
||||||
|
|
||||||
//---- ACCESS DATA FUNCTIONS ----
|
//---- ACCESS DATA FUNCTIONS ----
|
||||||
|
|
||||||
@@ -152,7 +147,7 @@ extern bool sd_mmc_spi_removal(void);
|
|||||||
//! It is ready -> CTRL_GOOD
|
//! It is ready -> CTRL_GOOD
|
||||||
//! A error occur -> CTRL_FAIL
|
//! A error occur -> CTRL_FAIL
|
||||||
//!
|
//!
|
||||||
extern Ctrl_status sd_mmc_spi_usb_read_10(uint32_t addr, uint16_t nb_sector);
|
Ctrl_status sd_mmc_spi_usb_read_10(uint32_t addr, uint16_t nb_sector);
|
||||||
|
|
||||||
//! This function initializes the SD/MMC memory for a write operation
|
//! This function initializes the SD/MMC memory for a write operation
|
||||||
//!
|
//!
|
||||||
@@ -166,7 +161,7 @@ extern Ctrl_status sd_mmc_spi_usb_read_10(uint32_t addr, uint16_t nb_sector);
|
|||||||
//! It is ready -> CTRL_GOOD
|
//! It is ready -> CTRL_GOOD
|
||||||
//! An error occurs -> CTRL_FAIL
|
//! An error occurs -> CTRL_FAIL
|
||||||
//!
|
//!
|
||||||
extern Ctrl_status sd_mmc_spi_usb_write_10(uint32_t addr, uint16_t nb_sector);
|
Ctrl_status sd_mmc_spi_usb_write_10(uint32_t addr, uint16_t nb_sector);
|
||||||
|
|
||||||
#endif // #if ACCESS_USB == true
|
#endif // #if ACCESS_USB == true
|
||||||
|
|
||||||
|
|||||||
@@ -212,7 +212,6 @@ extern "C" {
|
|||||||
#define CONFIG_USBCLK_DIV
|
#define CONFIG_USBCLK_DIV
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
extern void sysclk_enable_usb(void);
|
extern void sysclk_enable_usb(void);
|
||||||
extern void sysclk_disable_usb(void);
|
extern void sysclk_disable_usb(void);
|
||||||
|
|
||||||
|
|||||||
@@ -83,7 +83,6 @@ static usb_iface_desc_t UDC_DESC_STORAGE *udc_ptr_iface;
|
|||||||
|
|
||||||
//! @}
|
//! @}
|
||||||
|
|
||||||
|
|
||||||
//! \name Internal structure to store the USB device main strings
|
//! \name Internal structure to store the USB device main strings
|
||||||
//! @{
|
//! @{
|
||||||
|
|
||||||
|
|||||||
@@ -685,6 +685,4 @@ usb_iface_desc_t UDC_DESC_STORAGE *udc_get_interface_desc(void);
|
|||||||
} \endcode
|
} \endcode
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif // _UDC_H_
|
#endif // _UDC_H_
|
||||||
|
|||||||
@@ -213,7 +213,6 @@ void udd_send_remotewakeup(void);
|
|||||||
*/
|
*/
|
||||||
void udd_set_setup_payload( uint8_t *payload, uint16_t payload_size );
|
void udd_set_setup_payload( uint8_t *payload, uint16_t payload_size );
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \name Endpoint Management
|
* \name Endpoint Management
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -457,7 +457,6 @@ void udi_cdc_data_sof_notify(void)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// ------------------------
|
// ------------------------
|
||||||
//------- Internal routines to control serial line
|
//------- Internal routines to control serial line
|
||||||
|
|
||||||
@@ -520,7 +519,6 @@ static void udi_cdc_ctrl_state_change(uint8_t port, bool b_set, le16_t bit_mask)
|
|||||||
udi_cdc_ctrl_state_notify(port, ep_comm);
|
udi_cdc_ctrl_state_notify(port, ep_comm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void udi_cdc_ctrl_state_notify(uint8_t port, udd_ep_id_t ep)
|
static void udi_cdc_ctrl_state_notify(uint8_t port, udd_ep_id_t ep)
|
||||||
{
|
{
|
||||||
#if UDI_CDC_PORT_NB == 1 // To optimize code
|
#if UDI_CDC_PORT_NB == 1 // To optimize code
|
||||||
@@ -542,7 +540,6 @@ static void udi_cdc_ctrl_state_notify(uint8_t port, 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)
|
static void udi_cdc_serial_state_msg_sent(udd_ep_status_t status, iram_size_t n, udd_ep_id_t ep)
|
||||||
{
|
{
|
||||||
uint8_t port;
|
uint8_t port;
|
||||||
@@ -578,11 +575,9 @@ static void udi_cdc_serial_state_msg_sent(udd_ep_status_t status, iram_size_t n,
|
|||||||
udi_cdc_ctrl_state_notify(port, ep);
|
udi_cdc_ctrl_state_notify(port, ep);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// ------------------------
|
// ------------------------
|
||||||
//------- Internal routines to process data transfer
|
//------- Internal routines to process data transfer
|
||||||
|
|
||||||
|
|
||||||
static bool udi_cdc_rx_start(uint8_t port)
|
static bool udi_cdc_rx_start(uint8_t port)
|
||||||
{
|
{
|
||||||
irqflags_t flags;
|
irqflags_t flags;
|
||||||
@@ -632,7 +627,6 @@ static bool udi_cdc_rx_start(uint8_t port)
|
|||||||
udi_cdc_data_received);
|
udi_cdc_data_received);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void udi_cdc_data_received(udd_ep_status_t status, iram_size_t n, udd_ep_id_t ep)
|
static void udi_cdc_data_received(udd_ep_status_t status, iram_size_t n, udd_ep_id_t ep)
|
||||||
{
|
{
|
||||||
uint8_t buf_sel_trans;
|
uint8_t buf_sel_trans;
|
||||||
@@ -668,7 +662,6 @@ static void udi_cdc_data_received(udd_ep_status_t status, iram_size_t n, udd_ep_
|
|||||||
udi_cdc_rx_start(port);
|
udi_cdc_rx_start(port);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
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)
|
||||||
{
|
{
|
||||||
uint8_t port;
|
uint8_t port;
|
||||||
@@ -700,7 +693,6 @@ static void udi_cdc_data_sent(udd_ep_status_t status, iram_size_t n, udd_ep_id_t
|
|||||||
udi_cdc_tx_send(port);
|
udi_cdc_tx_send(port);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void udi_cdc_tx_send(uint8_t port)
|
static void udi_cdc_tx_send(uint8_t port)
|
||||||
{
|
{
|
||||||
irqflags_t flags;
|
irqflags_t flags;
|
||||||
@@ -780,11 +772,9 @@ static void udi_cdc_tx_send(uint8_t port)
|
|||||||
udi_cdc_data_sent);
|
udi_cdc_data_sent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// ------------------------
|
// ------------------------
|
||||||
//------- Application interface
|
//------- Application interface
|
||||||
|
|
||||||
|
|
||||||
//------- Application interface
|
//------- Application interface
|
||||||
|
|
||||||
void udi_cdc_ctrl_signal_dcd(bool b_set)
|
void udi_cdc_ctrl_signal_dcd(bool b_set)
|
||||||
|
|||||||
@@ -106,7 +106,6 @@ typedef struct {
|
|||||||
usb_ep_desc_t ep_notify;
|
usb_ep_desc_t ep_notify;
|
||||||
} udi_cdc_comm_desc_t;
|
} udi_cdc_comm_desc_t;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Data Class interface descriptor
|
* \brief Data Class interface descriptor
|
||||||
*
|
*
|
||||||
@@ -121,7 +120,6 @@ typedef struct {
|
|||||||
usb_ep_desc_t ep_out;
|
usb_ep_desc_t ep_out;
|
||||||
} udi_cdc_data_desc_t;
|
} udi_cdc_data_desc_t;
|
||||||
|
|
||||||
|
|
||||||
//! CDC communication endpoints size for all speeds
|
//! CDC communication endpoints size for all speeds
|
||||||
#define UDI_CDC_COMM_EP_SIZE 64
|
#define UDI_CDC_COMM_EP_SIZE 64
|
||||||
//! CDC data endpoints size for FS speed (8B, 16B, 32B, 64B)
|
//! CDC data endpoints size for FS speed (8B, 16B, 32B, 64B)
|
||||||
|
|||||||
@@ -109,7 +109,6 @@ UDC_DESC_STORAGE usb_dev_desc_t udc_device_desc = {
|
|||||||
.bNumConfigurations = 1
|
.bNumConfigurations = 1
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#ifdef USB_DEVICE_HS_SUPPORT
|
#ifdef USB_DEVICE_HS_SUPPORT
|
||||||
//! USB Device Qualifier Descriptor for HS
|
//! USB Device Qualifier Descriptor for HS
|
||||||
COMPILER_WORD_ALIGNED
|
COMPILER_WORD_ALIGNED
|
||||||
|
|||||||
@@ -93,7 +93,6 @@ UDC_DESC_STORAGE usb_dev_desc_t udc_device_desc = {
|
|||||||
.bNumConfigurations = 1
|
.bNumConfigurations = 1
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#ifdef USB_DEVICE_HS_SUPPORT
|
#ifdef USB_DEVICE_HS_SUPPORT
|
||||||
//! USB Device Qualifier Descriptor for HS
|
//! USB Device Qualifier Descriptor for HS
|
||||||
COMPILER_WORD_ALIGNED
|
COMPILER_WORD_ALIGNED
|
||||||
@@ -147,7 +146,6 @@ UDC_DESC_STORAGE udc_desc_t udc_desc_hs = {
|
|||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \name UDC structures which contains all USB Device definitions
|
* \name UDC structures which contains all USB Device definitions
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -86,7 +86,6 @@ UDC_DESC_STORAGE udi_api_t udi_api_msc = {
|
|||||||
};
|
};
|
||||||
//@}
|
//@}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \ingroup udi_msc_group
|
* \ingroup udi_msc_group
|
||||||
* \defgroup udi_msc_group_internal Implementation of UDI MSC
|
* \defgroup udi_msc_group_internal Implementation of UDI MSC
|
||||||
@@ -137,7 +136,6 @@ volatile bool udi_msc_b_reset_trans = true;
|
|||||||
|
|
||||||
//@}
|
//@}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \name Internal routines
|
* \name Internal routines
|
||||||
*/
|
*/
|
||||||
@@ -190,7 +188,6 @@ static void udi_msc_cbw_received(udd_ep_status_t status,
|
|||||||
static bool udi_msc_cbw_validate(uint32_t alloc_len, uint8_t dir_flag);
|
static bool udi_msc_cbw_validate(uint32_t alloc_len, uint8_t dir_flag);
|
||||||
//@}
|
//@}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \name Routines to process small data packet
|
* \name Routines to process small data packet
|
||||||
*/
|
*/
|
||||||
@@ -217,7 +214,6 @@ 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);
|
||||||
//@}
|
//@}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \name Routines to process CSW packet
|
* \name Routines to process CSW packet
|
||||||
*/
|
*/
|
||||||
@@ -250,7 +246,6 @@ 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);
|
||||||
//@}
|
//@}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \name Routines manage sense data
|
* \name Routines manage sense data
|
||||||
*/
|
*/
|
||||||
@@ -307,7 +302,6 @@ static void udi_msc_sense_fail_cdb_invalid(void);
|
|||||||
static void udi_msc_sense_command_invalid(void);
|
static void udi_msc_sense_command_invalid(void);
|
||||||
//@}
|
//@}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \name Routines manage SCSI Commands
|
* \name Routines manage SCSI Commands
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -116,6 +116,23 @@
|
|||||||
//#define dbg_print printf
|
//#define dbg_print printf
|
||||||
#define dbg_print(...)
|
#define dbg_print(...)
|
||||||
|
|
||||||
|
// Marlin modification: Redefine the otg_freeze_clock and otg_unfreeze_clock macros
|
||||||
|
// to add memory barriers to ensure that any accesses to USB registers aren't re-ordered
|
||||||
|
// to occur while the clock is frozen.
|
||||||
|
#undef otg_freeze_clock
|
||||||
|
#undef otg_unfreeze_clock
|
||||||
|
|
||||||
|
#define otg_freeze_clock() do { \
|
||||||
|
__DSB(); \
|
||||||
|
Set_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_FRZCLK); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define otg_unfreeze_clock() \
|
||||||
|
do { \
|
||||||
|
Clr_bits(UOTGHS->UOTGHS_CTRL, UOTGHS_CTRL_FRZCLK); \
|
||||||
|
__DSB(); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \ingroup udd_group
|
* \ingroup udd_group
|
||||||
* \defgroup udd_udphs_group USB On-The-Go High-Speed Port for device mode (UOTGHS)
|
* \defgroup udd_udphs_group USB On-The-Go High-Speed Port for device mode (UOTGHS)
|
||||||
@@ -276,7 +293,6 @@
|
|||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \name Power management routine.
|
* \name Power management routine.
|
||||||
*/
|
*/
|
||||||
@@ -293,7 +309,6 @@ static bool udd_b_idle;
|
|||||||
//! State of sleep manager
|
//! State of sleep manager
|
||||||
static bool udd_b_sleep_initialized = false;
|
static bool udd_b_sleep_initialized = false;
|
||||||
|
|
||||||
|
|
||||||
/*! \brief Authorize or not the CPU powerdown mode
|
/*! \brief Authorize or not the CPU powerdown mode
|
||||||
*
|
*
|
||||||
* \param b_enable true to authorize idle mode
|
* \param b_enable true to authorize idle mode
|
||||||
@@ -321,7 +336,6 @@ static void udd_sleep_mode(bool b_idle)
|
|||||||
|
|
||||||
//@}
|
//@}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \name Control endpoint low level management routine.
|
* \name Control endpoint low level management routine.
|
||||||
*
|
*
|
||||||
@@ -393,7 +407,6 @@ static void udd_ctrl_send_zlp_out(void);
|
|||||||
//! \brief Call callback associated to setup request
|
//! \brief Call callback associated to setup request
|
||||||
static void udd_ctrl_endofrequest(void);
|
static void udd_ctrl_endofrequest(void);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Main interrupt routine for control endpoint
|
* \brief Main interrupt routine for control endpoint
|
||||||
*
|
*
|
||||||
@@ -405,7 +418,6 @@ static bool udd_ctrl_interrupt(void);
|
|||||||
|
|
||||||
//@}
|
//@}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \name Management of bulk/interrupt/isochronous endpoints
|
* \name Management of bulk/interrupt/isochronous endpoints
|
||||||
*
|
*
|
||||||
@@ -443,7 +455,6 @@ typedef struct {
|
|||||||
uint8_t stall_requested:1;
|
uint8_t stall_requested:1;
|
||||||
} udd_ep_job_t;
|
} udd_ep_job_t;
|
||||||
|
|
||||||
|
|
||||||
//! Array to register a job on bulk/interrupt/isochronous endpoint
|
//! Array to register a job on bulk/interrupt/isochronous endpoint
|
||||||
static udd_ep_job_t udd_ep_job[USB_DEVICE_MAX_EP];
|
static udd_ep_job_t udd_ep_job[USB_DEVICE_MAX_EP];
|
||||||
|
|
||||||
@@ -505,7 +516,6 @@ static bool udd_ep_interrupt(void);
|
|||||||
#endif // (0!=USB_DEVICE_MAX_EP)
|
#endif // (0!=USB_DEVICE_MAX_EP)
|
||||||
//@}
|
//@}
|
||||||
|
|
||||||
|
|
||||||
// ------------------------
|
// ------------------------
|
||||||
//--- INTERNAL ROUTINES TO MANAGED GLOBAL EVENTS
|
//--- INTERNAL ROUTINES TO MANAGED GLOBAL EVENTS
|
||||||
|
|
||||||
@@ -611,6 +621,18 @@ ISR(UDD_USB_INT_FUN)
|
|||||||
// The wakeup interrupt is automatic acked when a suspend occur
|
// The wakeup interrupt is automatic acked when a suspend occur
|
||||||
udd_disable_wake_up_interrupt();
|
udd_disable_wake_up_interrupt();
|
||||||
udd_enable_suspend_interrupt();
|
udd_enable_suspend_interrupt();
|
||||||
|
|
||||||
|
// Marlin modification: The RESET, SOF, and MSOF interrupts were previously
|
||||||
|
// enabled in udd_attach, which caused a race condition where they could
|
||||||
|
// be raised and unclearable with the clock is frozen. They are now
|
||||||
|
// enabled here, after the clock has been unfrozen in response to the wake
|
||||||
|
// interrupt.
|
||||||
|
udd_enable_reset_interrupt();
|
||||||
|
udd_enable_sof_interrupt();
|
||||||
|
#ifdef USB_DEVICE_HS_SUPPORT
|
||||||
|
udd_enable_msof_interrupt();
|
||||||
|
#endif
|
||||||
|
|
||||||
udd_sleep_mode(true); // Enter in IDLE mode
|
udd_sleep_mode(true); // Enter in IDLE mode
|
||||||
#ifdef UDC_RESUME_EVENT
|
#ifdef UDC_RESUME_EVENT
|
||||||
UDC_RESUME_EVENT();
|
UDC_RESUME_EVENT();
|
||||||
@@ -642,13 +664,11 @@ udd_interrupt_sof_end:
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool udd_include_vbus_monitoring(void)
|
bool udd_include_vbus_monitoring(void)
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void udd_enable(void)
|
void udd_enable(void)
|
||||||
{
|
{
|
||||||
irqflags_t flags;
|
irqflags_t flags;
|
||||||
@@ -735,7 +755,6 @@ void udd_enable(void)
|
|||||||
cpu_irq_restore(flags);
|
cpu_irq_restore(flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void udd_disable(void)
|
void udd_disable(void)
|
||||||
{
|
{
|
||||||
irqflags_t flags;
|
irqflags_t flags;
|
||||||
@@ -776,6 +795,27 @@ void udd_disable(void)
|
|||||||
cpu_irq_restore(flags);
|
cpu_irq_restore(flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Marlin modification: The original implementation did not use a memory
|
||||||
|
// barrier between disabling and clearing interrupts. This sometimes
|
||||||
|
// allowed interrupts to remain raised and unclearable after the clock
|
||||||
|
// was frozen. This helper was added to ensure that memory barriers
|
||||||
|
// are used consistently from all places where interrupts are disabled.
|
||||||
|
static void disable_and_ack_sync_interrupts()
|
||||||
|
{
|
||||||
|
// Disable USB line events
|
||||||
|
udd_disable_reset_interrupt();
|
||||||
|
udd_disable_sof_interrupt();
|
||||||
|
#ifdef USB_DEVICE_HS_SUPPORT
|
||||||
|
udd_disable_msof_interrupt();
|
||||||
|
#endif
|
||||||
|
__DSB();
|
||||||
|
udd_ack_reset();
|
||||||
|
udd_ack_sof();
|
||||||
|
#ifdef USB_DEVICE_HS_SUPPORT
|
||||||
|
udd_ack_msof();
|
||||||
|
#endif
|
||||||
|
__DSB();
|
||||||
|
}
|
||||||
|
|
||||||
void udd_attach(void)
|
void udd_attach(void)
|
||||||
{
|
{
|
||||||
@@ -796,17 +836,16 @@ void udd_attach(void)
|
|||||||
udd_attach_device();
|
udd_attach_device();
|
||||||
|
|
||||||
// Enable USB line events
|
// Enable USB line events
|
||||||
udd_enable_reset_interrupt();
|
|
||||||
udd_enable_suspend_interrupt();
|
udd_enable_suspend_interrupt();
|
||||||
udd_enable_wake_up_interrupt();
|
udd_enable_wake_up_interrupt();
|
||||||
udd_enable_sof_interrupt();
|
|
||||||
#ifdef USB_DEVICE_HS_SUPPORT
|
// Marlin modification: The RESET, SOF, and MSOF interrupts were previously
|
||||||
udd_enable_msof_interrupt();
|
// enabled here, which caused a race condition where they could be raised
|
||||||
#endif
|
// and unclearable with the clock is frozen. They are now enabled in the
|
||||||
// Reset following interrupts flag
|
// wake interrupt handler, after the clock has been unfrozen. They are now
|
||||||
udd_ack_reset();
|
// explicitly disabled here to ensure that they cannot be raised before
|
||||||
udd_ack_sof();
|
// the clock is frozen.
|
||||||
udd_ack_msof();
|
disable_and_ack_sync_interrupts();
|
||||||
|
|
||||||
// The first suspend interrupt must be forced
|
// The first suspend interrupt must be forced
|
||||||
// The first suspend interrupt is not detected else raise it
|
// The first suspend interrupt is not detected else raise it
|
||||||
@@ -817,18 +856,22 @@ void udd_attach(void)
|
|||||||
cpu_irq_restore(flags);
|
cpu_irq_restore(flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void udd_detach(void)
|
void udd_detach(void)
|
||||||
{
|
{
|
||||||
otg_unfreeze_clock();
|
otg_unfreeze_clock();
|
||||||
|
|
||||||
// Detach device from the bus
|
// Detach device from the bus
|
||||||
udd_detach_device();
|
udd_detach_device();
|
||||||
|
|
||||||
|
// Marlin modification: Added the explicit disabling of the RESET, SOF, and
|
||||||
|
// MSOF interrupts here, to ensure that they cannot be raised after the
|
||||||
|
// clock is frozen.
|
||||||
|
disable_and_ack_sync_interrupts();
|
||||||
|
|
||||||
otg_freeze_clock();
|
otg_freeze_clock();
|
||||||
udd_sleep_mode(false);
|
udd_sleep_mode(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool udd_is_high_speed(void)
|
bool udd_is_high_speed(void)
|
||||||
{
|
{
|
||||||
#ifdef USB_DEVICE_HS_SUPPORT
|
#ifdef USB_DEVICE_HS_SUPPORT
|
||||||
@@ -838,7 +881,6 @@ bool udd_is_high_speed(void)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void udd_set_address(uint8_t address)
|
void udd_set_address(uint8_t address)
|
||||||
{
|
{
|
||||||
udd_disable_address();
|
udd_disable_address();
|
||||||
@@ -846,13 +888,11 @@ void udd_set_address(uint8_t address)
|
|||||||
udd_enable_address();
|
udd_enable_address();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
uint8_t udd_getaddress(void)
|
uint8_t udd_getaddress(void)
|
||||||
{
|
{
|
||||||
return udd_get_configured_address();
|
return udd_get_configured_address();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
uint16_t udd_get_frame_number(void)
|
uint16_t udd_get_frame_number(void)
|
||||||
{
|
{
|
||||||
return udd_frame_number();
|
return udd_frame_number();
|
||||||
@@ -875,14 +915,12 @@ void udd_send_remotewakeup(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void udd_set_setup_payload(uint8_t *payload, uint16_t payload_size)
|
void udd_set_setup_payload(uint8_t *payload, uint16_t payload_size)
|
||||||
{
|
{
|
||||||
udd_g_ctrlreq.payload = payload;
|
udd_g_ctrlreq.payload = payload;
|
||||||
udd_g_ctrlreq.payload_size = payload_size;
|
udd_g_ctrlreq.payload_size = payload_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#if (0 != USB_DEVICE_MAX_EP)
|
#if (0 != USB_DEVICE_MAX_EP)
|
||||||
bool udd_ep_alloc(udd_ep_id_t ep, uint8_t bmAttributes,
|
bool udd_ep_alloc(udd_ep_id_t ep, uint8_t bmAttributes,
|
||||||
uint16_t MaxEndpointSize)
|
uint16_t MaxEndpointSize)
|
||||||
@@ -1006,7 +1044,6 @@ bool udd_ep_alloc(udd_ep_id_t ep, uint8_t bmAttributes,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void udd_ep_free(udd_ep_id_t ep)
|
void udd_ep_free(udd_ep_id_t ep)
|
||||||
{
|
{
|
||||||
uint8_t ep_index = ep & USB_EP_ADDR_MASK;
|
uint8_t ep_index = ep & USB_EP_ADDR_MASK;
|
||||||
@@ -1019,14 +1056,12 @@ void udd_ep_free(udd_ep_id_t ep)
|
|||||||
udd_ep_job[ep_index - 1].stall_requested = false;
|
udd_ep_job[ep_index - 1].stall_requested = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool udd_ep_is_halted(udd_ep_id_t ep)
|
bool udd_ep_is_halted(udd_ep_id_t ep)
|
||||||
{
|
{
|
||||||
uint8_t ep_index = ep & USB_EP_ADDR_MASK;
|
uint8_t ep_index = ep & USB_EP_ADDR_MASK;
|
||||||
return Is_udd_endpoint_stall_requested(ep_index);
|
return Is_udd_endpoint_stall_requested(ep_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool udd_ep_set_halt(udd_ep_id_t ep)
|
bool udd_ep_set_halt(udd_ep_id_t ep)
|
||||||
{
|
{
|
||||||
uint8_t ep_index = ep & USB_EP_ADDR_MASK;
|
uint8_t ep_index = ep & USB_EP_ADDR_MASK;
|
||||||
@@ -1067,7 +1102,6 @@ bool udd_ep_set_halt(udd_ep_id_t ep)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool udd_ep_clear_halt(udd_ep_id_t ep)
|
bool udd_ep_clear_halt(udd_ep_id_t ep)
|
||||||
{
|
{
|
||||||
uint8_t ep_index = ep & USB_EP_ADDR_MASK;
|
uint8_t ep_index = ep & USB_EP_ADDR_MASK;
|
||||||
@@ -1108,7 +1142,6 @@ bool udd_ep_clear_halt(udd_ep_id_t ep)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool udd_ep_run(udd_ep_id_t ep, bool b_shortpacket,
|
bool udd_ep_run(udd_ep_id_t ep, bool b_shortpacket,
|
||||||
uint8_t * buf, iram_size_t buf_size,
|
uint8_t * buf, iram_size_t buf_size,
|
||||||
udd_callback_trans_t callback)
|
udd_callback_trans_t callback)
|
||||||
@@ -1175,7 +1208,6 @@ bool udd_ep_run(udd_ep_id_t ep, bool b_shortpacket,
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void udd_ep_abort(udd_ep_id_t ep)
|
void udd_ep_abort(udd_ep_id_t ep)
|
||||||
{
|
{
|
||||||
uint8_t ep_index = ep & USB_EP_ADDR_MASK;
|
uint8_t ep_index = ep & USB_EP_ADDR_MASK;
|
||||||
@@ -1204,7 +1236,6 @@ void udd_ep_abort(udd_ep_id_t ep)
|
|||||||
udd_ep_abort_job(ep);
|
udd_ep_abort_job(ep);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool udd_ep_wait_stall_clear(udd_ep_id_t ep,
|
bool udd_ep_wait_stall_clear(udd_ep_id_t ep,
|
||||||
udd_callback_halt_cleared_t callback)
|
udd_callback_halt_cleared_t callback)
|
||||||
{
|
{
|
||||||
@@ -1239,7 +1270,6 @@ bool udd_ep_wait_stall_clear(udd_ep_id_t ep,
|
|||||||
}
|
}
|
||||||
#endif // (0 != USB_DEVICE_MAX_EP)
|
#endif // (0 != USB_DEVICE_MAX_EP)
|
||||||
|
|
||||||
|
|
||||||
#ifdef USB_DEVICE_HS_SUPPORT
|
#ifdef USB_DEVICE_HS_SUPPORT
|
||||||
|
|
||||||
void udd_test_mode_j(void)
|
void udd_test_mode_j(void)
|
||||||
@@ -1248,20 +1278,17 @@ void udd_test_mode_j(void)
|
|||||||
udd_enable_hs_test_mode_j();
|
udd_enable_hs_test_mode_j();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void udd_test_mode_k(void)
|
void udd_test_mode_k(void)
|
||||||
{
|
{
|
||||||
udd_enable_hs_test_mode();
|
udd_enable_hs_test_mode();
|
||||||
udd_enable_hs_test_mode_k();
|
udd_enable_hs_test_mode_k();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void udd_test_mode_se0_nak(void)
|
void udd_test_mode_se0_nak(void)
|
||||||
{
|
{
|
||||||
udd_enable_hs_test_mode();
|
udd_enable_hs_test_mode();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void udd_test_mode_packet(void)
|
void udd_test_mode_packet(void)
|
||||||
{
|
{
|
||||||
uint8_t i;
|
uint8_t i;
|
||||||
@@ -1305,8 +1332,6 @@ void udd_test_mode_packet(void)
|
|||||||
}
|
}
|
||||||
#endif // USB_DEVICE_HS_SUPPORT
|
#endif // USB_DEVICE_HS_SUPPORT
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// ------------------------
|
// ------------------------
|
||||||
//--- INTERNAL ROUTINES TO MANAGED THE CONTROL ENDPOINT
|
//--- INTERNAL ROUTINES TO MANAGED THE CONTROL ENDPOINT
|
||||||
|
|
||||||
@@ -1356,7 +1381,6 @@ static void udd_ctrl_init(void)
|
|||||||
udd_ep_control_state = UDD_EPCTRL_SETUP;
|
udd_ep_control_state = UDD_EPCTRL_SETUP;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void udd_ctrl_setup_received(void)
|
static void udd_ctrl_setup_received(void)
|
||||||
{
|
{
|
||||||
irqflags_t flags;
|
irqflags_t flags;
|
||||||
@@ -1418,7 +1442,6 @@ static void udd_ctrl_setup_received(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void udd_ctrl_in_sent(void)
|
static void udd_ctrl_in_sent(void)
|
||||||
{
|
{
|
||||||
static bool b_shortpacket = false;
|
static bool b_shortpacket = false;
|
||||||
@@ -1502,7 +1525,6 @@ static void udd_ctrl_in_sent(void)
|
|||||||
cpu_irq_restore(flags);
|
cpu_irq_restore(flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void udd_ctrl_out_received(void)
|
static void udd_ctrl_out_received(void)
|
||||||
{
|
{
|
||||||
irqflags_t flags;
|
irqflags_t flags;
|
||||||
@@ -1593,7 +1615,6 @@ static void udd_ctrl_out_received(void)
|
|||||||
cpu_irq_restore(flags);
|
cpu_irq_restore(flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void udd_ctrl_underflow(void)
|
static void udd_ctrl_underflow(void)
|
||||||
{
|
{
|
||||||
if (Is_udd_out_received(0))
|
if (Is_udd_out_received(0))
|
||||||
@@ -1610,7 +1631,6 @@ static void udd_ctrl_underflow(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void udd_ctrl_overflow(void)
|
static void udd_ctrl_overflow(void)
|
||||||
{
|
{
|
||||||
if (Is_udd_in_send(0))
|
if (Is_udd_in_send(0))
|
||||||
@@ -1626,7 +1646,6 @@ static void udd_ctrl_overflow(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void udd_ctrl_stall_data(void)
|
static void udd_ctrl_stall_data(void)
|
||||||
{
|
{
|
||||||
// Stall all packets on IN & OUT control endpoint
|
// Stall all packets on IN & OUT control endpoint
|
||||||
@@ -1634,7 +1653,6 @@ static void udd_ctrl_stall_data(void)
|
|||||||
udd_enable_stall_handshake(0);
|
udd_enable_stall_handshake(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void udd_ctrl_send_zlp_in(void)
|
static void udd_ctrl_send_zlp_in(void)
|
||||||
{
|
{
|
||||||
irqflags_t flags;
|
irqflags_t flags;
|
||||||
@@ -1652,7 +1670,6 @@ static void udd_ctrl_send_zlp_in(void)
|
|||||||
cpu_irq_restore(flags);
|
cpu_irq_restore(flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void udd_ctrl_send_zlp_out(void)
|
static void udd_ctrl_send_zlp_out(void)
|
||||||
{
|
{
|
||||||
irqflags_t flags;
|
irqflags_t flags;
|
||||||
@@ -1668,7 +1685,6 @@ static void udd_ctrl_send_zlp_out(void)
|
|||||||
cpu_irq_restore(flags);
|
cpu_irq_restore(flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void udd_ctrl_endofrequest(void)
|
static void udd_ctrl_endofrequest(void)
|
||||||
{
|
{
|
||||||
// If a callback is registered then call it
|
// If a callback is registered then call it
|
||||||
@@ -1677,7 +1693,6 @@ static void udd_ctrl_endofrequest(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static bool udd_ctrl_interrupt(void)
|
static bool udd_ctrl_interrupt(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -1728,7 +1743,6 @@ static bool udd_ctrl_interrupt(void)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// ------------------------
|
// ------------------------
|
||||||
//--- INTERNAL ROUTINES TO MANAGED THE BULK/INTERRUPT/ISOCHRONOUS ENDPOINTS
|
//--- INTERNAL ROUTINES TO MANAGED THE BULK/INTERRUPT/ISOCHRONOUS ENDPOINTS
|
||||||
|
|
||||||
@@ -1743,7 +1757,6 @@ static void udd_ep_job_table_reset(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void udd_ep_job_table_kill(void)
|
static void udd_ep_job_table_kill(void)
|
||||||
{
|
{
|
||||||
uint8_t i;
|
uint8_t i;
|
||||||
@@ -1754,7 +1767,6 @@ static void udd_ep_job_table_kill(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void udd_ep_abort_job(udd_ep_id_t ep)
|
static void udd_ep_abort_job(udd_ep_id_t ep)
|
||||||
{
|
{
|
||||||
ep &= USB_EP_ADDR_MASK;
|
ep &= USB_EP_ADDR_MASK;
|
||||||
@@ -1763,7 +1775,6 @@ static void udd_ep_abort_job(udd_ep_id_t ep)
|
|||||||
udd_ep_finish_job(&udd_ep_job[ep - 1], true, ep);
|
udd_ep_finish_job(&udd_ep_job[ep - 1], true, ep);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void udd_ep_finish_job(udd_ep_job_t * ptr_job, bool b_abort, uint8_t ep_num)
|
static void udd_ep_finish_job(udd_ep_job_t * ptr_job, bool b_abort, uint8_t ep_num)
|
||||||
{
|
{
|
||||||
if (ptr_job->busy == false) {
|
if (ptr_job->busy == false) {
|
||||||
@@ -1834,7 +1845,6 @@ static void udd_ep_trans_done(udd_ep_id_t ep)
|
|||||||
udd_dma_ctrl |= UOTGHS_DEVDMACONTROL_END_BUFFIT |
|
udd_dma_ctrl |= UOTGHS_DEVDMACONTROL_END_BUFFIT |
|
||||||
UOTGHS_DEVDMACONTROL_CHANN_ENB;
|
UOTGHS_DEVDMACONTROL_CHANN_ENB;
|
||||||
|
|
||||||
|
|
||||||
// Disable IRQs to have a short sequence
|
// Disable IRQs to have a short sequence
|
||||||
// between read of EOT_STA and DMA enable
|
// between read of EOT_STA and DMA enable
|
||||||
flags = cpu_irq_save();
|
flags = cpu_irq_save();
|
||||||
@@ -2043,6 +2053,12 @@ static bool udd_ep_interrupt(void)
|
|||||||
dbg_print("I ");
|
dbg_print("I ");
|
||||||
udd_disable_in_send_interrupt(ep);
|
udd_disable_in_send_interrupt(ep);
|
||||||
// One bank is free then send a ZLP
|
// One bank is free then send a ZLP
|
||||||
|
|
||||||
|
// Marlin modification: Add a barrier to ensure in_send is disabled
|
||||||
|
// before it is cleared. This was not an observed problem, but
|
||||||
|
// other interrupts were seen to misbehave without this barrier.
|
||||||
|
__DSB();
|
||||||
|
|
||||||
udd_ack_in_send(ep);
|
udd_ack_in_send(ep);
|
||||||
udd_ack_fifocon(ep);
|
udd_ack_fifocon(ep);
|
||||||
udd_ep_finish_job(ptr_job, false, ep);
|
udd_ep_finish_job(ptr_job, false, ep);
|
||||||
|
|||||||
@@ -129,7 +129,6 @@ extern "C" {
|
|||||||
#define Is_udd_vbus_transition() (Tst_bits(UOTGHS->UOTGHS_SR, UOTGHS_SR_VBUSTI))
|
#define Is_udd_vbus_transition() (Tst_bits(UOTGHS->UOTGHS_SR, UOTGHS_SR_VBUSTI))
|
||||||
//! @}
|
//! @}
|
||||||
|
|
||||||
|
|
||||||
//! @name UOTGHS device attach control
|
//! @name UOTGHS device attach control
|
||||||
//! These macros manage the UOTGHS Device attach.
|
//! These macros manage the UOTGHS Device attach.
|
||||||
//! @{
|
//! @{
|
||||||
@@ -141,7 +140,6 @@ extern "C" {
|
|||||||
#define Is_udd_detached() (Tst_bits(UOTGHS->UOTGHS_DEVCTRL, UOTGHS_DEVCTRL_DETACH))
|
#define Is_udd_detached() (Tst_bits(UOTGHS->UOTGHS_DEVCTRL, UOTGHS_DEVCTRL_DETACH))
|
||||||
//! @}
|
//! @}
|
||||||
|
|
||||||
|
|
||||||
//! @name UOTGHS device bus events control
|
//! @name UOTGHS device bus events control
|
||||||
//! These macros manage the UOTGHS Device bus events.
|
//! These macros manage the UOTGHS Device bus events.
|
||||||
//! @{
|
//! @{
|
||||||
@@ -246,7 +244,6 @@ extern "C" {
|
|||||||
#define udd_get_configured_address() (Rd_bitfield(UOTGHS->UOTGHS_DEVCTRL, UOTGHS_DEVCTRL_UADD_Msk))
|
#define udd_get_configured_address() (Rd_bitfield(UOTGHS->UOTGHS_DEVCTRL, UOTGHS_DEVCTRL_UADD_Msk))
|
||||||
//! @}
|
//! @}
|
||||||
|
|
||||||
|
|
||||||
//! @name UOTGHS Device endpoint drivers
|
//! @name UOTGHS Device endpoint drivers
|
||||||
//! These macros manage the common features of the endpoints.
|
//! These macros manage the common features of the endpoints.
|
||||||
//! @{
|
//! @{
|
||||||
@@ -330,7 +327,6 @@ extern "C" {
|
|||||||
#define udd_data_toggle(ep) (Rd_bitfield(UOTGHS_ARRAY(UOTGHS_DEVEPTISR[0], ep), UOTGHS_DEVEPTISR_DTSEQ_Msk))
|
#define udd_data_toggle(ep) (Rd_bitfield(UOTGHS_ARRAY(UOTGHS_DEVEPTISR[0], ep), UOTGHS_DEVEPTISR_DTSEQ_Msk))
|
||||||
//! @}
|
//! @}
|
||||||
|
|
||||||
|
|
||||||
//! @name UOTGHS Device control endpoint
|
//! @name UOTGHS Device control endpoint
|
||||||
//! These macros control the endpoints.
|
//! These macros control the endpoints.
|
||||||
//! @{
|
//! @{
|
||||||
@@ -530,7 +526,6 @@ extern "C" {
|
|||||||
//! Tests if IN sending interrupt is enabled
|
//! Tests if IN sending interrupt is enabled
|
||||||
#define Is_udd_in_send_interrupt_enabled(ep) (Tst_bits(UOTGHS_ARRAY(UOTGHS_DEVEPTIMR[0], ep), UOTGHS_DEVEPTIMR_TXINE))
|
#define Is_udd_in_send_interrupt_enabled(ep) (Tst_bits(UOTGHS_ARRAY(UOTGHS_DEVEPTIMR[0], ep), UOTGHS_DEVEPTIMR_TXINE))
|
||||||
|
|
||||||
|
|
||||||
//! Get 64-, 32-, 16- or 8-bit access to FIFO data register of selected endpoint.
|
//! Get 64-, 32-, 16- or 8-bit access to FIFO data register of selected endpoint.
|
||||||
//! @param ep Endpoint of which to access FIFO data register
|
//! @param ep Endpoint of which to access FIFO data register
|
||||||
//! @param scale Data scale in bits: 64, 32, 16 or 8
|
//! @param scale Data scale in bits: 64, 32, 16 or 8
|
||||||
@@ -652,7 +647,6 @@ typedef struct {
|
|||||||
//! @}
|
//! @}
|
||||||
//! @}
|
//! @}
|
||||||
|
|
||||||
|
|
||||||
/// @cond 0
|
/// @cond 0
|
||||||
/**INDENT-OFF**/
|
/**INDENT-OFF**/
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|||||||
@@ -53,7 +53,6 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
//! \ingroup usb_group
|
//! \ingroup usb_group
|
||||||
//! \defgroup otg_group UOTGHS OTG Driver
|
//! \defgroup otg_group UOTGHS OTG Driver
|
||||||
//! UOTGHS low-level driver for OTG features
|
//! UOTGHS low-level driver for OTG features
|
||||||
@@ -74,7 +73,6 @@ bool otg_dual_enable(void);
|
|||||||
*/
|
*/
|
||||||
void otg_dual_disable(void);
|
void otg_dual_disable(void);
|
||||||
|
|
||||||
|
|
||||||
//! @name UOTGHS OTG ID pin management
|
//! @name UOTGHS OTG ID pin management
|
||||||
//! The ID pin come from the USB OTG connector (A and B receptable) and
|
//! The ID pin come from the USB OTG connector (A and B receptable) and
|
||||||
//! allows to select the USB mode host or device.
|
//! allows to select the USB mode host or device.
|
||||||
|
|||||||
@@ -374,7 +374,6 @@ typedef struct {
|
|||||||
uint8_t bNumDeviceCaps;
|
uint8_t bNumDeviceCaps;
|
||||||
} usb_dev_bos_desc_t;
|
} usb_dev_bos_desc_t;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief USB Device Capabilities - USB 2.0 Extension Descriptor structure
|
* \brief USB Device Capabilities - USB 2.0 Extension Descriptor structure
|
||||||
*
|
*
|
||||||
@@ -411,7 +410,6 @@ typedef struct {
|
|||||||
uint8_t iFunction; //!< Index of string descriptor
|
uint8_t iFunction; //!< Index of string descriptor
|
||||||
} usb_association_desc_t;
|
} usb_association_desc_t;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Standard USB configuration descriptor structure
|
* \brief Standard USB configuration descriptor structure
|
||||||
*/
|
*/
|
||||||
@@ -426,7 +424,6 @@ typedef struct {
|
|||||||
uint8_t bMaxPower;
|
uint8_t bMaxPower;
|
||||||
} usb_conf_desc_t;
|
} usb_conf_desc_t;
|
||||||
|
|
||||||
|
|
||||||
#define USB_CONFIG_ATTR_MUST_SET (1 << 7) //!< Must always be set
|
#define USB_CONFIG_ATTR_MUST_SET (1 << 7) //!< Must always be set
|
||||||
#define USB_CONFIG_ATTR_BUS_POWERED (0 << 6) //!< Bus-powered
|
#define USB_CONFIG_ATTR_BUS_POWERED (0 << 6) //!< Bus-powered
|
||||||
#define USB_CONFIG_ATTR_SELF_POWERED (1 << 6) //!< Self-powered
|
#define USB_CONFIG_ATTR_SELF_POWERED (1 << 6) //!< Self-powered
|
||||||
@@ -475,7 +472,6 @@ typedef struct {
|
|||||||
uint8_t bInterval;
|
uint8_t bInterval;
|
||||||
} usb_ep_desc_t;
|
} usb_ep_desc_t;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief A standard USB string descriptor structure
|
* \brief A standard USB string descriptor structure
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -168,7 +168,6 @@ COMPILER_PACK_SET(1)
|
|||||||
//! \name USB CDC Descriptors
|
//! \name USB CDC Descriptors
|
||||||
//@{
|
//@{
|
||||||
|
|
||||||
|
|
||||||
//! CDC Header Functional Descriptor
|
//! CDC Header Functional Descriptor
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint8_t bFunctionLength;
|
uint8_t bFunctionLength;
|
||||||
@@ -203,7 +202,6 @@ typedef struct {
|
|||||||
uint8_t bSlaveInterface0;
|
uint8_t bSlaveInterface0;
|
||||||
} usb_cdc_union_desc_t;
|
} usb_cdc_union_desc_t;
|
||||||
|
|
||||||
|
|
||||||
//! \name USB CDC Call Management Capabilities
|
//! \name USB CDC Call Management Capabilities
|
||||||
//@{
|
//@{
|
||||||
//! Device handles call management itself
|
//! Device handles call management itself
|
||||||
@@ -278,7 +276,6 @@ typedef struct {
|
|||||||
//@}
|
//@}
|
||||||
//@}
|
//@}
|
||||||
|
|
||||||
|
|
||||||
//! \name USB CDC notification message
|
//! \name USB CDC notification message
|
||||||
//@{
|
//@{
|
||||||
|
|
||||||
|
|||||||
@@ -47,7 +47,6 @@
|
|||||||
#ifndef _USB_PROTOCOL_MSC_H_
|
#ifndef _USB_PROTOCOL_MSC_H_
|
||||||
#define _USB_PROTOCOL_MSC_H_
|
#define _USB_PROTOCOL_MSC_H_
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \ingroup usb_protocol_group
|
* \ingroup usb_protocol_group
|
||||||
* \defgroup usb_msc_protocol USB Mass Storage Class (MSC) protocol definitions
|
* \defgroup usb_msc_protocol USB Mass Storage Class (MSC) protocol definitions
|
||||||
@@ -89,7 +88,6 @@
|
|||||||
#define MSC_PROTOCOL_BULK 0x50 //!< Bulk-only
|
#define MSC_PROTOCOL_BULK 0x50 //!< Bulk-only
|
||||||
//@}
|
//@}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief MSC USB requests (bRequest)
|
* \brief MSC USB requests (bRequest)
|
||||||
*/
|
*/
|
||||||
@@ -98,7 +96,6 @@ enum usb_reqid_msc {
|
|||||||
USB_REQ_MSC_GET_MAX_LUN = 0xFE //!< Get Max LUN
|
USB_REQ_MSC_GET_MAX_LUN = 0xFE //!< Get Max LUN
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
COMPILER_PACK_SET(1)
|
COMPILER_PACK_SET(1)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -122,7 +119,6 @@ struct usb_msc_cbw {
|
|||||||
#define USB_CBW_LEN_MASK 0x1F //!< Valid bits in bCBWCBLength
|
#define USB_CBW_LEN_MASK 0x1F //!< Valid bits in bCBWCBLength
|
||||||
//@}
|
//@}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \name A Command Status Wrapper (CSW).
|
* \name A Command Status Wrapper (CSW).
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -175,7 +175,7 @@ uint8_t MarlinHAL::get_reset_source() { return rtc_get_reset_reason(1); }
|
|||||||
|
|
||||||
void MarlinHAL::reboot() { ESP.restart(); }
|
void MarlinHAL::reboot() { ESP.restart(); }
|
||||||
|
|
||||||
void _delay_ms(int delay_ms) { delay(delay_ms); }
|
void _delay_ms(const int ms) { delay(ms); }
|
||||||
|
|
||||||
// return free memory between end of heap (or end bss) and whatever is current
|
// return free memory between end of heap (or end bss) and whatever is current
|
||||||
int MarlinHAL::freeMemory() { return ESP.getFreeHeap(); }
|
int MarlinHAL::freeMemory() { return ESP.getFreeHeap(); }
|
||||||
@@ -209,16 +209,17 @@ int MarlinHAL::freeMemory() { return ESP.getFreeHeap(); }
|
|||||||
// ADC
|
// ADC
|
||||||
// ------------------------
|
// ------------------------
|
||||||
|
|
||||||
#define ADC1_CHANNEL(pin) ADC1_GPIO ## pin ## _CHANNEL
|
// https://docs.espressif.com/projects/esp-idf/en/release-v4.4/esp32/api-reference/peripherals/adc.html
|
||||||
|
|
||||||
adc1_channel_t get_channel(int pin) {
|
adc1_channel_t get_channel(int pin) {
|
||||||
switch (pin) {
|
switch (pin) {
|
||||||
case 39: return ADC1_CHANNEL(39);
|
case 39: return ADC1_CHANNEL_3;
|
||||||
case 36: return ADC1_CHANNEL(36);
|
case 36: return ADC1_CHANNEL_0;
|
||||||
case 35: return ADC1_CHANNEL(35);
|
case 35: return ADC1_CHANNEL_7;
|
||||||
case 34: return ADC1_CHANNEL(34);
|
case 34: return ADC1_CHANNEL_6;
|
||||||
case 33: return ADC1_CHANNEL(33);
|
case 33: return ADC1_CHANNEL_5;
|
||||||
case 32: return ADC1_CHANNEL(32);
|
case 32: return ADC1_CHANNEL_4;
|
||||||
|
case 37: return ADC1_CHANNEL_1;
|
||||||
|
case 38: return ADC1_CHANNEL_2;
|
||||||
}
|
}
|
||||||
return ADC1_CHANNEL_MAX;
|
return ADC1_CHANNEL_MAX;
|
||||||
}
|
}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user