Compare commits
813 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| d46cf60548 | |||
| e94a1b16c4 | |||
| b44c03c203 | |||
| 67cdaa89cf | |||
| db9763c65f | |||
| 1f84f50fd8 | |||
| 3326c749f8 | |||
| 0269106066 | |||
| 95d38a8e54 | |||
| dca6afc26e | |||
| 19684f23bc | |||
| 52a561399e | |||
| 0683e8a9a3 | |||
| 1bb4a042e2 | |||
| d10861e478 | |||
| cf7c86d581 | |||
| d99e150097 | |||
| 9e88eb6100 | |||
| 71d9a3e1df | |||
| 6575dcc803 | |||
| 2715e5ba1b | |||
| 9a570b23a3 | |||
| 1b091ecb87 | |||
| 0055b6b423 | |||
| ab38abb237 | |||
| 907761e2bb | |||
| a75a5f8b2a | |||
| 80dd02fbdb | |||
| e6755450df | |||
| 9215bf791b | |||
| eba4b1f556 | |||
| 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 | |||
| 30ba2241e3 | |||
| 541bd26cd7 | |||
| 7a4d601f4d | |||
| 6bb17e68c1 | |||
| 7a7f723eb6 | |||
| 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 | |||
| 1daa885dbc | |||
| c995ecb933 | |||
| 901628c53e | |||
| b8229c14d4 | |||
| 8bd0501bdf | |||
| b436a19f23 | |||
| 97179ddad3 | |||
| 57815d2d65 | |||
| 67aa28f0c1 | |||
| 8d4eadefef | |||
| 56a41810d2 | |||
| b5d7f3ef12 | |||
| e0ff391eba | |||
| 8d44b6c427 | |||
| 953ea9f16e | |||
| 59dffb5f1c | |||
| d3704f834a | |||
| 13395db032 | |||
| ebde4ceb35 | |||
| 55cd1f51a4 | |||
| 900464dc72 | |||
| b87f2a86c9 | |||
| 97e0ed7393 | |||
| 7862493991 | |||
| 63e91dc0af | |||
| e713d5ee2b | |||
| 52f1474281 | |||
| a512f6b40a | |||
| 911093a28c | |||
| b05b35ece9 | |||
| 0fa6605b49 | |||
| b007343710 | |||
| 7e02ffb9e9 | |||
| 73c2954ecb | |||
| 1e8f6ba749 | |||
| 99378bfad4 | |||
| 3eb7bc37b8 | |||
| d347e6ab22 | |||
| 793e1c0b1d | |||
| 69c6b0f812 | |||
| fa25cab5ce | |||
| 33afb53201 | |||
| 6dc15e953f | |||
| 19a449cdaa | |||
| 9ebc74c1e7 | |||
| d69b857d8b | |||
| 0a9ea5968a | |||
| 4c90eb0173 | |||
| 7bcfede5b7 | |||
| 7385ce389a | |||
| a1b0bfc23a | |||
| 773a894209 | |||
| d873148f2f | |||
| 0766fcd082 | |||
| f2060b5c34 | |||
| 01479cab84 | |||
| 056db1c3ae | |||
| 57e4fe6381 | |||
| 6531db383c | |||
| 401f5cf1ca | |||
| ab427804ac | |||
| 3a4d705308 | |||
| 56ee00f354 | |||
| f434f368ac | |||
| 1d9cf20d4b | |||
| 313014515c | |||
| 11d9bb4a66 | |||
| 7591c8661f | |||
| 456b0a4011 | |||
| 278c49e9de | |||
| 0ed4727767 | |||
| fcbc6a929c | |||
| 3c9b927291 | |||
| aa3cd470da | |||
| 004fd179d1 | |||
| eab01ba183 | |||
| 42bd6e74a7 | |||
| 67d6f2f877 | |||
| 5e10f6d8d1 | |||
| 3a1f3a4ba3 | |||
| 9697434981 | |||
| 6dec98e54c | |||
| 39201418ce | |||
| 8a30019a18 | |||
| a1c5735d6f | |||
| b02badf25e | |||
| 686fe6fe74 | |||
| 8ece5bcbee | |||
| ae9fe880f8 | |||
| 9c48d93a36 | |||
| fad005fdc2 | |||
| 0cf916ce13 | |||
| 0a54b35981 | |||
| 3b7871005a | |||
| 0bd0b3df80 | |||
| 549619995f | |||
| 47c0dc631c | |||
| 5c39469b94 | |||
| 8ea02e3ede | |||
| a33f7ddc8c | |||
| 462b586c76 | |||
| 1bab76a98a | |||
| 25de1facb5 | |||
| c43d064122 | |||
| 5a9736bfa3 | |||
| 359258701f | |||
| 04f5a42c60 | |||
| 6dc27f6fc0 | |||
| b010d0782f | |||
| 6fd0c3f6a8 | |||
| 8f7735655e | |||
| 5f431c140f | |||
| 23f580bd03 | |||
| 2752234e14 | |||
| c87943cff1 | |||
| 661abff6e6 | |||
| 7e0478c97d | |||
| a0ed4d51bc | |||
| 005019b82d | |||
| 55d943e9d2 | |||
| f3e8919552 | |||
| 2bd9bcf61b | |||
| 3ec124f417 | |||
| c5263830d8 | |||
| 050e0db3a3 | |||
| f8f918590c | |||
| 5d56a71423 | |||
| 93b664182e | |||
| e0990f1b65 | |||
| 0a55425552 | |||
| 47c0c7072a | |||
| beb163a183 | |||
| cd67b87f22 | |||
| e5f087bd98 | |||
| 1fcad0b87c | |||
| bf698efc93 | |||
| f0e950db72 | |||
| 200a3957d9 | |||
| b243c67de2 | |||
| 20d107adf2 | |||
| 5e3c15bd39 | |||
| 05cbeef2c6 | |||
| 2ab4b9bd13 | |||
| 1cc33f318c | |||
| 78e3a829ba | |||
| 60dc55c3bf | |||
| ef12aa5a6c | |||
| b8f90b2d71 | |||
| ee91c915ee | |||
| e7fac26f2b | |||
| e66a2fdbf4 | |||
| f96a4a53ef | |||
| 096c146f16 | |||
| 5111e8d3a3 | |||
| 775850a245 | |||
| 8401c6d267 | |||
| bdeceae5b4 | |||
| c6ace0d4a5 | |||
| e9c9f07b8b | |||
| 8386ae0f4d | |||
| 237ad14388 | |||
| 1c194d4e16 | |||
| fb5ee94263 | |||
| 7bfcba1cf7 | |||
| 147cda7c1d | |||
| 6016ef7ba1 | |||
| a82e3147fd | |||
| fa73edd76a | |||
| 591a42cdd0 | |||
| 6b74e0f142 | |||
| 4cdec14648 | |||
| e4e9f01bf0 | |||
| 01ef9afdd0 | |||
| 21f8741982 | |||
| fa80adf92c | |||
| 9e4cce23d4 | |||
| 868967d08c | |||
| 48dc25407e | |||
| b88833a1cd | |||
| 391a07b2bf | |||
| c8faaca998 | |||
| 01ab324a12 | |||
| 00152be921 | |||
| be5078f8ab | |||
| cacdb2d818 | |||
| 3553ef4c00 | |||
| 64cf8316e1 | |||
| b6ad2db3a9 | |||
| 47222bcdde | |||
| 22f2a8baa7 | |||
| 08b92c3d1c | |||
| 474111f1c9 | |||
| b35125e1a2 | |||
| 3a1646b2e8 | |||
| b99b6250ee | |||
| 947ee4560e | |||
| 11a0186b35 | |||
| db74ac3ce1 | |||
| 2b46761060 | |||
| 97e1768ffe | |||
| 8e83784656 | |||
| 73b0c506e4 | |||
| 4678bb49b9 | |||
| f581502cc4 | |||
| dfc3007326 | |||
| 7f691fc5c1 | |||
| 01e7a5cb76 | |||
| fa72415812 | |||
| 0b6ecbd553 | |||
| de6246f826 | |||
| e813742ae0 | |||
| 46c8204990 | |||
| bdfe4ca4d1 | |||
| adabc63617 | |||
| 6741f5182d | |||
| d8508c5110 | |||
| dae60f4b29 | |||
| e16655a011 | |||
| 0d576bb529 | |||
| 61c3d122c9 | |||
| 123086d14c | |||
| 10fd6df83d | |||
| d40750cde8 | |||
| 489b75ae3c | |||
| 378fc12628 | |||
| 0cedad36d1 | |||
| 07b2480d30 | |||
| dd88eb56ee | |||
| fc77afd93e | |||
| 26af3e70bc | |||
| 0c15e8e751 | |||
| 639a2dc0b3 | |||
| 91a094d8cb | |||
| 66efa0b09b | |||
| e1c5f8418d | |||
| 4a0769ec1b | |||
| 991f21c74c | |||
| 9ebf358b8a | |||
| 70c26fd4ca | |||
| 9e66a87122 | |||
| f177bd32eb | |||
| 8df38008ef | |||
| ec5d623c93 | |||
| aca3184ce4 | |||
| 7cda9dbf84 | |||
| 71d530e594 | |||
| 24e8499ef6 | |||
| 0821c72d39 | |||
| 2abf5f0ad8 | |||
| 5c59a3d7c7 | |||
| a9e7df859c | |||
| f6a48f82aa | |||
| c0f0964329 | |||
| 0322dfd76e | |||
| 2d651fc785 | |||
| bd967ba7a2 | |||
| cc1a4f5f70 | |||
| d43c557404 | |||
| c4ba4600dc | |||
| 0bbc122475 | |||
| 1868db82aa | |||
| 23091e566b | |||
| 0ac94f6a2f | |||
| 3d804bd314 | |||
| e0de16f3a8 | |||
| 7421731eed | |||
| 43bc8c3865 | |||
| c13d290934 | |||
| 49eb72816e | |||
| ec0c72e2f0 | |||
| ff221cdacd | |||
| af177e719e | |||
| c713b14143 | |||
| 44c21f477e | |||
| 9f2e0238df | |||
| fd72d771e6 | |||
| dc1a4080db | |||
| 1e3cd5ca8b | |||
| 09f1c97c6e | |||
| 13b16b4062 | |||
| 7f5f9724de | |||
| 92a7943d4e | |||
| 448abd5de2 | |||
| 37f4924ac1 | |||
| 1c269eda1e | |||
| d8573b97eb | |||
| 5a94a8e1c0 | |||
| e067dc4713 | |||
| 1f6da0c1b4 | |||
| 8bb4484af5 | |||
| 6cc524dd50 | |||
| 728539bb23 | |||
| a67b346523 | |||
| 4b767d7623 | |||
| 7e149b2532 | |||
| 3b7b4b48d8 | |||
| 49fd9bdb77 | |||
| 5bcf64f17c | |||
| a3e960c251 | |||
| a7696f32fd | |||
| b4d3f03a26 | |||
| 42c6324f68 | |||
| 4d15eb94e4 | |||
| 3d688fc324 | |||
| 58e54f6746 | |||
| bf7a48ed31 | |||
| dc52c64424 | |||
| 0e29cd8cc5 | |||
| 844fe9b24d | |||
| 2b19dc3232 | |||
| f41c78d178 | |||
| 6270df927e | |||
| cbcc1bc084 | |||
| ab1d124bf9 | |||
| 5b7215df43 | |||
| b589cac5ff | |||
| 44aaa4f042 | |||
| afef0b9dec | |||
| f7767be8a5 | |||
| 2f5e28dd66 | |||
| 0397d384d2 | |||
| 212dfb4050 | |||
| 59ff070dba | |||
| c7af93b39f | |||
| 794ea13ae8 | |||
| 227f014fb5 | |||
| e22408f3f9 | |||
| 9e8e1c1113 | |||
| 1427290e84 | |||
| 1c7b232d05 | |||
| 005dad193a | |||
| 88f502cac5 | |||
| 0cc286757b | |||
| d843e2be2b | |||
| cede5b22c9 | |||
| 43f996d68a | |||
| bd426d40cd | |||
| 099c329238 | |||
| 3db4452d28 | |||
| 385bab2f36 | |||
| 1fab2ef94f | |||
| 102c43dcd5 | |||
| 5284f45c62 | |||
| 9aaa7b1100 | |||
| ef661cd295 | |||
| d068769f2c | |||
| a6c4c5a3f7 | |||
| 78c57f2847 | |||
| 90b0be5e12 | |||
| c24456353f | |||
| ec7a4eb69e | |||
| 4f62ae9764 | |||
| 0cc6955ab7 | |||
| 86d2d5d0a8 | |||
| 5a994f0c9a | |||
| 39ee694856 | |||
| 10a16c8c75 | |||
| aa2763442e | |||
| f44a11f5ff | |||
| 7748fa84dd | |||
| cb506ec639 | |||
| 5e4f7516c1 | |||
| 6443790c6f | |||
| 9a238fa7f9 | |||
| 723fc88e78 | |||
| 4b4a4ba163 | |||
| 57250c8340 | |||
| 6bf069d1ab | |||
| 1921015d1f | |||
| 24f3400c46 | |||
| b8c9e823ca | |||
| 3801d831d4 | |||
| 6f4b2ce4a2 | |||
| ef85eeed2a | |||
| cd98d0cf5c | |||
| 6f57a7311c | |||
| dc19c60a0e | |||
| 38c79a4585 | |||
| 541e074f97 | |||
| 2a01b8ea62 | |||
| 38fd3782f9 | |||
| f5cfc65c1d | |||
| 00f3397cad | |||
| 8e6f5f90c5 | |||
| db0b14d97e | |||
| 84158b912b | |||
| 21f8c8d7f8 | |||
| e2363dc64c | |||
| 1f439cd89a | |||
| f3ddc1f8b6 | |||
| 223971c47f | |||
| c2eeda01de | |||
| 5ea4241ea3 | |||
| 04845c80e9 | |||
| 8194b7f5fc | |||
| e735948969 | |||
| 634ddeef7e | |||
| ea78c6bf61 | |||
| b52168e37c | |||
| ba7368ce3a | |||
| 69d06dd872 | |||
| a92b627d00 | |||
| b9aa338c19 | |||
| 27e105b890 | |||
| 494a9a90bb | |||
| d876e6b80a | |||
| 97da6e97b9 | |||
| 671ab75bce | |||
| 6a98f4e1be | |||
| dd86d60a32 | |||
| 706260d39f | |||
| bae9d18ee9 | |||
| df31aa486e | |||
| 9a4d0fec6c | |||
| b1f96cf4f7 | |||
| 916aaa4881 | |||
| 4a4820d84f | |||
| 8eeea354cd | |||
| b26e53156f | |||
| ce46fafd92 | |||
| 7d9ee39285 | |||
| bf8074c108 | |||
| dd82d2d217 | |||
| 1ee599a2ba | |||
| 8adb58c266 | |||
| 173b0f8bd1 | |||
| e77f6d855b | |||
| 23ce68436a | |||
| 6e15859ce2 | |||
| e76f769690 | |||
| 0a2ba2fadf | |||
| 37d5f55396 | |||
| eca2080a3f | |||
| d2fc1daf50 | |||
| 782fe78ea0 | |||
| 084c45a6ee | |||
| 94d8fc8e8a | |||
| 491d82f93e | |||
| 49fd0950ee | |||
| 06425bf4b7 | |||
| e9660aeed7 | |||
| 6480f0939d | |||
| d0e9c21aff | |||
| 63d1ae1021 | |||
| 5a4b2ba5c5 | |||
| a80c371340 | |||
| 6d39a6fc55 | |||
| 02fe3a6818 | |||
| be44105ae9 | |||
| 10e5d92dec | |||
| 2e11485da4 | |||
| d305f0a14b | |||
| 5f30e9fe1c | |||
| 80c8218d94 | |||
| bed2bfdc24 | |||
| 6f2967a8dc | |||
| 6496cedc17 | |||
| 7b01993bbc | |||
| 07a1b00a25 | |||
| 7325d66de5 | |||
| 865737345f | |||
| dfa6c2f4f1 | |||
| 0a2f0cca93 | |||
| dbbdf11d75 | |||
| 6430489e21 | |||
| 04d4fca75d | |||
| 486cf92c5c | |||
| 820aff4e7c | |||
| 120da68133 | |||
| 747e21ee3e | |||
| 53e8c005b7 | |||
| ef01aecd47 | |||
| 6ff92f3215 | |||
| ba5bab1a3a | |||
| af0b39982b | |||
| 680135583a | |||
| bdc256c048 | |||
| 0948c589d6 | |||
| fbf069ebe0 | |||
| 160f8ef0bc | |||
| 93ecbfa88c | |||
| 19d004b342 | |||
| 8b67e72afc | |||
| 9c863b1c67 | |||
| e4c4acbcc5 | |||
| 7dd2fe3f6c | |||
| a399028c77 | |||
| 840beb78be | |||
| 1181724b2b | |||
| 227aac34a2 | |||
| ecb6e215c5 | |||
| 8f09db27bd | |||
| 39e4ae2d7a | |||
| 8c181685d2 | |||
| 4f2730b6f8 | |||
| bc12ada74d | |||
| 7e97639e38 | |||
| c217fd3e66 | |||
| 6f69a30435 | |||
| 96d880e745 | |||
| d768f875ac | |||
| 02d54b9ce7 | |||
| 7070628ef9 | |||
| 1a89a43532 | |||
| 25faa304ee | |||
| 18a0f68ac0 | |||
| 7262ad3fc4 | |||
| b456959b97 | |||
| d20182aa91 | |||
| dc86dd9fae | |||
| e887033c0d | |||
| d786ba1773 | |||
| 3f0a4cfe25 | |||
| 442327d92e | |||
| 345ac6e8fe | |||
| 1b47fe8c64 | |||
| 67e9ee7bf2 | |||
| 7aecff2ba6 | |||
| 2e6d7308f6 | |||
| 9c5ee355e8 | |||
| 656946a0ff | |||
| 48e02a3210 | |||
| 6891ef5d00 | |||
| c392e6bf07 | |||
| de564f9b0a | |||
| c9aab13192 | |||
| 9ba9f654c4 | |||
| a13ebba41a | |||
| b1153cff1e | |||
| 9aa0004de6 | |||
| 3a9f043c58 | |||
| 80123bfdf2 | |||
| 923ce8e1d8 | |||
| c72fc3eaec | |||
| 3aa0763f26 | |||
| 96bee60be9 | |||
| b5df47bdf7 | |||
| c27474f396 | |||
| 6af2c36c50 | |||
| 577ebc6ba4 | |||
| 4b0135c022 | |||
| 27e95f2aab | |||
| 247385e94e | |||
| aafa3af088 | |||
| 12e230ca30 | |||
| 225a89004b | |||
| 0b6aa3cb2d | |||
| e7d3e67dc4 | |||
| 8fd37402a3 | |||
| 7cf72d5867 | |||
| a348c3caa9 | |||
| 6f5430f00a | |||
| 63821d87f9 | |||
| b5f447f144 | |||
| 4a56689801 | |||
| 50f10fc57f | |||
| 12180f20e5 | |||
| f5dc8d73ee | |||
| 00e3806613 | |||
| 7296538849 | |||
| 6c4e3e9215 | |||
| 4f050e8dc9 | |||
| e50e446676 | |||
| b795860c5a | |||
| b97b2b9df8 | |||
| c6bdb2cd95 | |||
| f409cf8c87 | |||
| fbb75f41c2 | |||
| d560a493b2 | |||
| 0395b7563e | |||
| ebd414b3d5 | |||
| 0c8bafba38 | |||
| 65d5c57957 | |||
| b1d667c04a | |||
| ee8ea7a0b5 | |||
| 89ac692bcc | |||
| 88410b3cfe | |||
| 60eb467bfe | |||
| 1c3407ed62 | |||
| 82064d2341 | |||
| 16b7cffe0f | |||
| 638bac84cf | |||
| 9d3ad76d50 | |||
| 6edb31f58c | |||
| 01297cab24 | |||
| 80fa195db3 | |||
| 052b4387d3 | |||
| dd5481b001 | |||
| 59e1371f89 | |||
| 4fdcae6677 | |||
| 1c3dcae659 | |||
| ec425de694 | |||
| 29899e6fe8 | |||
| f7eaa32bc9 | |||
| 508dc26394 | |||
| 600d5922da | |||
| a2efee8b7b | |||
| 239e4737a8 | |||
| c8577bc673 | |||
| 3bd2ed7310 | |||
| 79414a1398 |
@@ -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
|
|
||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
#
|
#
|
||||||
# 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:
|
||||||
@@ -27,7 +27,7 @@ on:
|
|||||||
|
|
||||||
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
|
||||||
@@ -152,7 +152,7 @@ jobs:
|
|||||||
uses: actions/checkout@v4
|
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') }}
|
||||||
@@ -160,13 +160,13 @@ 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.9
|
- name: Select Python 3.9
|
||||||
uses: actions/setup-python@v4
|
uses: actions/setup-python@v5
|
||||||
with:
|
with:
|
||||||
python-version: '3.9'
|
python-version: '3.9'
|
||||||
architecture: 'x64'
|
architecture: 'x64'
|
||||||
@@ -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
|
||||||
@@ -32,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,7 +17,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/stale@v8
|
- uses: actions/stale@v9
|
||||||
with:
|
with:
|
||||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
stale-issue-message: |
|
stale-issue-message: |
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -5,13 +5,19 @@ CONTAINER_IMAGE := marlin-dev
|
|||||||
|
|
||||||
help:
|
help:
|
||||||
@echo "Tasks for local development:"
|
@echo "Tasks for local development:"
|
||||||
@echo "* format-pins: Reformat all pins files"
|
@echo "make marlin : Build marlin for the configured board"
|
||||||
@echo "* tests-single-ci: Run a single test from inside the CI"
|
@echo "make format-pins : Reformat all pins files"
|
||||||
@echo "* tests-single-local: Run a single test locally"
|
@echo "make tests-single-ci : Run a single test from inside the CI"
|
||||||
@echo "* tests-single-local-docker: Run a single test locally, using docker"
|
@echo "make tests-single-local : Run a single test locally"
|
||||||
@echo "* tests-all-local: Run all tests locally"
|
@echo "make tests-single-local-docker : Run a single test locally, using docker"
|
||||||
@echo "* tests-all-local-docker: Run all tests locally, using docker"
|
@echo "make tests-all-local : Run all tests locally"
|
||||||
@echo "* setup-local-docker: Build the local docker image"
|
@echo "make tests-all-local-docker : Run all tests locally, using docker"
|
||||||
|
# @echo "make unit-test-single-ci : Run a single code test from inside the CI"
|
||||||
|
# @echo "make unit-test-single-local : Run a single code test locally"
|
||||||
|
# @echo "make unit-test-single-local-docker : Run a single code test locally, using docker-compose"
|
||||||
|
@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-compose"
|
||||||
|
@echo "make setup-local-docker : Setup local docker-compose"
|
||||||
@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"
|
||||||
@@ -24,46 +30,62 @@ help:
|
|||||||
@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:
|
||||||
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 $$($(SCRIPTS_DIR)/get_test_targets.py) ; do echo "Running tests for $$TEST_TARGET" ; run_tests . $$TEST_TARGET ; done
|
||||||
.PHONY: tests-all-local
|
|
||||||
|
|
||||||
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-ci:
|
||||||
|
# export GIT_RESET_HARD=true
|
||||||
|
# $(MAKE) unit-test-single-local TEST_TARGET=$(TEST_TARGET)
|
||||||
|
|
||||||
|
# TODO: How can we limit tests with ONLY_TEST with platformio?
|
||||||
|
#unit-test-single-local:
|
||||||
|
# @if ! test -n "$(TEST_TARGET)" ; then echo "***ERROR*** Set TEST_TARGET=<your-module> or use make unit-test-all-local" ; return 1; fi
|
||||||
|
# platformio run -t marlin_$(TEST_TARGET)
|
||||||
|
|
||||||
|
#unit-test-single-local-docker:
|
||||||
|
# @if ! test -n "$(TEST_TARGET)" ; then echo "***ERROR*** Set TEST_TARGET=<your-module> or use make unit-test-all-local-docker" ; return 1; 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 unit-test-single-local TEST_TARGET=$(TEST_TARGET) ONLY_TEST="$(ONLY_TEST)"
|
||||||
|
|
||||||
|
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')
|
PINS := $(shell find Marlin/src/pins -mindepth 2 -name '*.h')
|
||||||
|
|
||||||
.PHONY: $(PINS)
|
|
||||||
|
|
||||||
$(PINS): %:
|
$(PINS): %:
|
||||||
@echo "Formatting $@" && node buildroot/share/scripts/pinsformat.js $@
|
@echo "Formatting $@" && node $(SCRIPTS_DIR)/pinsformat.js $@
|
||||||
|
|
||||||
format-pins: $(PINS)
|
format-pins: $(PINS)
|
||||||
|
|||||||
+1897
-636
File diff suppressed because it is too large
Load Diff
+502
-470
File diff suppressed because it is too large
Load Diff
+1
-1
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
Marlin Firmware
|
Marlin Firmware
|
||||||
|
|
||||||
(c) 2011-2023 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
|
||||||
|
|
||||||
|
|||||||
+162
-10
@@ -16,7 +16,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
@@ -28,25 +28,177 @@
|
|||||||
/**
|
/**
|
||||||
* Marlin release version identifier
|
* Marlin release version identifier
|
||||||
*/
|
*/
|
||||||
//#define SHORT_BUILD_VERSION "bugfix-2.1.x"
|
#define SHORT_BUILD_VERSION "DW7.4.9"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Verbose version identifier which should contain a reference to the location
|
* Verbose version identifier which should contain a reference to the location
|
||||||
* from where the binary was downloaded or the source code was compiled.
|
* from where the binary was downloaded or the source code was compiled.
|
||||||
*/
|
*/
|
||||||
//#define DETAILED_BUILD_VERSION SHORT_BUILD_VERSION
|
|
||||||
|
#if(ENABLED(MachineMini))
|
||||||
|
#define VerChar1 "M"
|
||||||
|
#elif(ENABLED(MachineEnder2))
|
||||||
|
#define VerChar1 "E2"
|
||||||
|
#elif(ENABLED(MachineEnder2Pro))
|
||||||
|
#define VerChar1 "E2P"
|
||||||
|
#elif(ENABLED(MachineEnder3))
|
||||||
|
#define VerChar1 "E3"
|
||||||
|
#elif ENABLED(MachineEnder3V2)
|
||||||
|
#define VerChar1 "E3V2"
|
||||||
|
#elif ENABLED(MachineEnder3S1)
|
||||||
|
#define VerChar1 "E3S1"
|
||||||
|
#elif ENABLED(MachineEnder3Max)
|
||||||
|
#define VerChar1 "E3M"
|
||||||
|
#elif(ENABLED(MachineEnder4))
|
||||||
|
#define VerChar1 "E4"
|
||||||
|
#elif(ENABLED(MachineEnder5))
|
||||||
|
#define VerChar1 "E5"
|
||||||
|
#elif(ENABLED(MachineEnder6))
|
||||||
|
#define VerChar1 "E6"
|
||||||
|
#elif(ENABLED(MachineEnder7))
|
||||||
|
#define VerChar1 "E7"
|
||||||
|
#elif(ENABLED(MachineSermoonD1))
|
||||||
|
#define VerChar1 "D1"
|
||||||
|
#elif(ENABLED(MachineEnder5Plus))
|
||||||
|
#define VerChar1 "E5P"
|
||||||
|
#elif(ENABLED(MachineCR20))
|
||||||
|
#define VerChar1 "2"
|
||||||
|
#elif(ENABLED(MachineCR10Orig))
|
||||||
|
#define VerChar1 "O"
|
||||||
|
#elif(ENABLED(MachineCR10Std))
|
||||||
|
#define VerChar1 "S"
|
||||||
|
#elif(ENABLED(MachineCRX))
|
||||||
|
#define VerChar1 "X"
|
||||||
|
#elif(ENABLED(MachineCR6))
|
||||||
|
#define VerChar1 "CR6"
|
||||||
|
#elif(ENABLED(MachineCR5))
|
||||||
|
#define VerChar1 "CR5"
|
||||||
|
#elif(ENABLED(MachineCR6Max))
|
||||||
|
#define VerChar1 "CR6M"
|
||||||
|
#elif(ENABLED(MachineS4))
|
||||||
|
#define VerChar1 "4"
|
||||||
|
#elif(ENABLED(MachineS5) || ENABLED(MachineCR10Max))
|
||||||
|
#define VerChar1 "5"
|
||||||
|
#elif ENABLED(MachineCR2020)
|
||||||
|
#define VerChar1 "20"
|
||||||
|
#elif(ENABLED(MachineCR30))
|
||||||
|
#define VerChar1 "CR30"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if(ENABLED(HotendStock))
|
||||||
|
#define VerChar2 "S"
|
||||||
|
#elif(ENABLED(HotendE3D))
|
||||||
|
#define VerChar2 "E"
|
||||||
|
#elif ENABLED(HotendMosquito)
|
||||||
|
#define VerChar2 "M"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if(ENABLED(HotendAllMetal))
|
||||||
|
#define VerChar3 "M"
|
||||||
|
#else
|
||||||
|
#define VerChar3 "S"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if(ENABLED(BedAC))
|
||||||
|
#define VerChar4 "A"
|
||||||
|
#elif(ENABLED(BedDC))
|
||||||
|
#define VerChar4 "D"
|
||||||
|
#else
|
||||||
|
#define VerChar4 "N"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if(ENABLED(ABL_EZABL))
|
||||||
|
#define VerChar5 "A"
|
||||||
|
#elif(ENABLED(ABL_BLTOUCH))
|
||||||
|
#define VerChar5 "B"
|
||||||
|
#else
|
||||||
|
#define VerChar5 "N"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if(ENABLED(ABL_UBL))
|
||||||
|
#define VerChar6 "U"
|
||||||
|
#elif(ENABLED(ABL_BI))
|
||||||
|
#define VerChar6 "B"
|
||||||
|
#else
|
||||||
|
#define VerChar6 "N"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define DETAILED_BUILD_VERSION SHORT_BUILD_VERSION " TM3D " VerChar1 VerChar2 VerChar3 VerChar4 VerChar5 VerChar6
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The STRING_DISTRIBUTION_DATE represents when the binary file was built,
|
* The STRING_DISTRIBUTION_DATE represents when the binary file was built,
|
||||||
* 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 "2024-01-09"
|
#define STRING_DISTRIBUTION_DATE "2024-04-08"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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.
|
||||||
*/
|
*/
|
||||||
//#define MACHINE_NAME "3D Printer"
|
#if(ENABLED(MachineMini))
|
||||||
|
#define CUSTOM_MACHINE_NAME "Mini SuPeR"
|
||||||
|
#elif(ENABLED(MachineCR10Smart))
|
||||||
|
#define CUSTOM_MACHINE_NAME "TM3D CR10Smart"
|
||||||
|
#elif(ENABLED(MachineCR10SmartPro))
|
||||||
|
#define CUSTOM_MACHINE_NAME "TM3D CR10SmartPro"
|
||||||
|
#elif(ENABLED(MachineEnder2))
|
||||||
|
#define CUSTOM_MACHINE_NAME "TM3D Ender2"
|
||||||
|
#elif(ENABLED(MachineEnder2Pro))
|
||||||
|
#define CUSTOM_MACHINE_NAME "TM3D Ender2 Pro"
|
||||||
|
#elif(ENABLED(MachineEnder3))
|
||||||
|
#define CUSTOM_MACHINE_NAME "TM3D Ender3"
|
||||||
|
#elif(ENABLED(MachineEnder3Max))
|
||||||
|
#define CUSTOM_MACHINE_NAME "TM3D E3Max"
|
||||||
|
#elif(ENABLED(MachineEnder6))
|
||||||
|
#define CUSTOM_MACHINE_NAME "TM3D Ender6"
|
||||||
|
#elif(ENABLED(MachineEnder7))
|
||||||
|
#define CUSTOM_MACHINE_NAME "TM3D Ender7"
|
||||||
|
#elif(ENABLED(MachineEnder3V2))
|
||||||
|
#define CUSTOM_MACHINE_NAME "TM3D Ender3V2"
|
||||||
|
#elif(ENABLED(MachineEnder3S1))
|
||||||
|
#define CUSTOM_MACHINE_NAME "TM3D Ender3S1"
|
||||||
|
#elif(ENABLED(MachineEnder4))
|
||||||
|
#define CUSTOM_MACHINE_NAME "TM3D Ender4"
|
||||||
|
#elif(ENABLED(MachineEnder5))
|
||||||
|
#define CUSTOM_MACHINE_NAME "TM3D Ender5"
|
||||||
|
#elif(ENABLED(MachineEnder5Plus))
|
||||||
|
#define CUSTOM_MACHINE_NAME "TM3D E5 Plus"
|
||||||
|
#elif(ENABLED(MachineCR20))
|
||||||
|
#define CUSTOM_MACHINE_NAME "SuPeR CR-20"
|
||||||
|
#elif(ENABLED(MachineCR10Orig))
|
||||||
|
#define CUSTOM_MACHINE_NAME "SuPeR CR-10"
|
||||||
|
#elif(ENABLED(MachineCRX))
|
||||||
|
#define CUSTOM_MACHINE_NAME "TM3D CR-X"
|
||||||
|
#elif ENABLED(MachineCR10SProV2)
|
||||||
|
#define CUSTOM_MACHINE_NAME "TM3D 10SProV2"
|
||||||
|
#elif(ENABLED(MachineCR10SPro))
|
||||||
|
#define CUSTOM_MACHINE_NAME "TM3D 10S Pro"
|
||||||
|
#elif(ENABLED(MachineCR10Max))
|
||||||
|
#define CUSTOM_MACHINE_NAME "TM3D Max"
|
||||||
|
#elif(ENABLED(MachineCR10SV3))
|
||||||
|
#define CUSTOM_MACHINE_NAME "TM3D CR10V3"
|
||||||
|
#elif(ENABLED(MachineCR10SV2))
|
||||||
|
#define CUSTOM_MACHINE_NAME "TM3D CR10V2"
|
||||||
|
#elif(ENABLED(MachineCR10Std))
|
||||||
|
#define CUSTOM_MACHINE_NAME "300 SuPeR"
|
||||||
|
#elif(ENABLED(MachineS4))
|
||||||
|
#define CUSTOM_MACHINE_NAME "400 SuPeR"
|
||||||
|
#elif(ENABLED(MachineS5))
|
||||||
|
#define CUSTOM_MACHINE_NAME "500 SuPeR"
|
||||||
|
#elif ENABLED(MachineCR2020)
|
||||||
|
#define CUSTOM_MACHINE_NAME "TM3D 2020"
|
||||||
|
#elif ENABLED(MachineSermoonD1)
|
||||||
|
#define CUSTOM_MACHINE_NAME "SermoonD1"
|
||||||
|
#elif ENABLED(MachineCR5)
|
||||||
|
#define CUSTOM_MACHINE_NAME "CR5 Pro"
|
||||||
|
#elif ENABLED(MachineCR6)
|
||||||
|
#define CUSTOM_MACHINE_NAME "CR6"
|
||||||
|
#elif ENABLED(MachineCR6Max)
|
||||||
|
#define CUSTOM_MACHINE_NAME "CR6 Max"
|
||||||
|
#elif ENABLED(MachineCR30)
|
||||||
|
#define CUSTOM_MACHINE_NAME "CR30 Printmill"
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The SOURCE_CODE_URL is the location where users will find the Marlin Source
|
* The SOURCE_CODE_URL is the location where users will find the Marlin Source
|
||||||
@@ -54,7 +206,7 @@
|
|||||||
* has a distinct Github fork— the Source Code URL should just be the main
|
* has a distinct Github fork— the Source Code URL should just be the main
|
||||||
* Marlin repository.
|
* Marlin repository.
|
||||||
*/
|
*/
|
||||||
//#define SOURCE_CODE_URL "github.com/MarlinFirmware/Marlin"
|
#define SOURCE_CODE_URL "https://github.com/InsanityAutomation/Marlin/tree/CrealityDwin_2.0"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default generic printer UUID.
|
* Default generic printer UUID.
|
||||||
@@ -65,12 +217,12 @@
|
|||||||
* The WEBSITE_URL is the location where users can get more information such as
|
* The WEBSITE_URL is the location where users can get more information such as
|
||||||
* documentation about a specific Marlin release.
|
* documentation about a specific Marlin release.
|
||||||
*/
|
*/
|
||||||
//#define WEBSITE_URL "marlinfw.org"
|
#define WEBSITE_URL "tinymachines3d.com"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the vendor info the serial USB interface, if changable
|
* Set the vendor info the serial USB interface, if changable
|
||||||
* Currently only supported by DUE platform
|
* Currently only supported by DUE platform
|
||||||
*/
|
*/
|
||||||
//#define USB_DEVICE_VENDOR_ID 0x0000
|
//#define USB_DEVICE_VENDOR_ID 0x0000
|
||||||
//#define USB_DEVICE_PRODUCT_ID 0x0000
|
//#define USB_DEVICE_PRODUCT_ID 0x0000
|
||||||
//#define USB_DEVICE_MANUFACTURE_NAME WEBSITE_URL
|
//#define USB_DEVICE_MANUFACTURE_NAME WEBSITE_URL
|
||||||
+58
-68
@@ -29,75 +29,65 @@
|
|||||||
* - http://www.marlinfw.org/tools/u8glib/converter.html
|
* - http://www.marlinfw.org/tools/u8glib/converter.html
|
||||||
* - http://www.digole.com/tools/PicturetoC_Hex_converter.php
|
* - http://www.digole.com/tools/PicturetoC_Hex_converter.php
|
||||||
*/
|
*/
|
||||||
#include <avr/pgmspace.h>
|
|
||||||
|
|
||||||
#define CUSTOM_BOOTSCREEN_TIMEOUT 2500
|
#define CUSTOM_BOOTSCREEN_TIMEOUT 2500
|
||||||
#define CUSTOM_BOOTSCREEN_BMPWIDTH 60
|
#define CUSTOM_BOOTSCREEN_BMPWIDTH 128
|
||||||
#define CUSTOM_BOOTSCREEN_BMPHEIGHT 64
|
#define CUSTOM_BOOTSCREEN_INVERTED
|
||||||
|
|
||||||
const unsigned char custom_start_bmp[574] PROGMEM = {
|
const unsigned char custom_start_bmp[] PROGMEM = {
|
||||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
B11111101,B01010101,B01010101,B01010101,B01010101,B01010101,B01011111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,
|
||||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
B11111110,B00000000,B00000000,B00000000,B00000000,B00000000,B00111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,
|
||||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
B11111101,B00000000,B00000000,B00000111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,
|
||||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
B11111110,B00000111,B11000000,B00000101,B01010101,B01010101,B01010101,B01010101,B01010101,B01011111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,
|
||||||
0x0, 0x0, 0x0, 0xc, 0x0, 0x0, 0x0, 0x0,
|
B11111100,B00001010,B00100000,B00000110,B00000000,B00000000,B00000000,B00000000,B00000000,B00111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,
|
||||||
0x0, 0x0, 0x0, 0xc, 0x0, 0x0, 0x0, 0x0,
|
B11111110,B00010100,B00010000,B00000101,B00000000,B00000000,B00000111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,
|
||||||
0x0, 0x0, 0x0, 0x12, 0x0, 0x0, 0x0, 0x0,
|
B11111100,B00101000,B00001000,B00000110,B00000111,B11000000,B00000101,B01010101,B01010101,B01010101,B01010101,B01010101,B01011111,B11111111,B11111111,B11111111,
|
||||||
0x0, 0x0, 0x0, 0x23, 0x0, 0x0, 0x0, 0x0,
|
B11111110,B01010100,B00000100,B00000100,B00001010,B00100000,B00000110,B00000000,B00000000,B00000000,B00000000,B00000000,B00111111,B11111111,B11111111,B11111111,
|
||||||
0x0, 0x0, 0x0, 0x21, 0x0, 0x0, 0x0, 0x0,
|
B11111100,B01100000,B00000100,B00000110,B00010100,B00010000,B00000101,B00000000,B00000000,B00000111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,
|
||||||
0x0, 0x0, 0x0, 0x4c, 0x80, 0x0, 0x0, 0x0,
|
B11111110,B01010000,B00000100,B00000100,B00101000,B00001000,B00000110,B00000111,B11000000,B00000101,B01010101,B01010101,B01010101,B01010101,B01010101,B01011111,
|
||||||
0x0, 0x0, 0x0, 0x5e, 0x80, 0x0, 0x0, 0x0,
|
B11111100,B01100000,B00000100,B00000110,B01010100,B00000100,B00000100,B00001010,B00100000,B00000110,B00000000,B00000000,B00000000,B00000000,B00000000,B00111111,
|
||||||
0x0, 0x0, 0x0, 0x92, 0x40, 0x0, 0x0, 0x0,
|
B11111110,B01010100,B00000100,B00011100,B01100000,B00000100,B00000110,B00010100,B00010000,B00000101,B00000000,B00000000,B00000000,B00000000,B00000000,B00011111,
|
||||||
0x0, 0x0, 0x0, 0xa1, 0x40, 0x0, 0x0, 0x0,
|
B11111100,B00101000,B00001000,B00101110,B01010000,B00000100,B00000100,B00101000,B00001000,B00000110,B00000111,B11000000,B00000000,B00000001,B11110000,B00111111,
|
||||||
0x0, 0x0, 0x1, 0x21, 0x20, 0x0, 0x0, 0x0,
|
B11111110,B00010100,B00010000,B01010100,B01100000,B00000100,B00000110,B01010100,B00000100,B00000100,B00001010,B00100000,B00000000,B00000010,B00001000,B00011111,
|
||||||
0x0, 0x0, 0x2, 0x7f, 0x90, 0x0, 0x0, 0x0,
|
B11111100,B00001010,B00100000,B01100110,B01010100,B00000100,B00011100,B01100000,B00000100,B00000110,B00010100,B00010000,B00000000,B00000101,B00000100,B00111111,
|
||||||
0x0, 0x0, 0x2, 0x0, 0x10, 0x0, 0x0, 0x0,
|
B11111110,B00000111,B11000000,B01010100,B00101000,B00001000,B00101110,B01010000,B00000100,B00000100,B00101000,B00001000,B00000000,B00001010,B00000010,B00011111,
|
||||||
0x0, 0x0, 0x7, 0xff, 0xf8, 0x0, 0x0, 0x0,
|
B11111100,B00000000,B00000000,B00101110,B00010100,B00010000,B01010100,B01100000,B00000100,B00000110,B01010100,B00000100,B00000000,B00010101,B00000001,B00111111,
|
||||||
0x0, 0x0, 0x4, 0x0, 0x8, 0x0, 0x0, 0x0,
|
B11111110,B00000000,B00000000,B00011100,B00001010,B00100000,B01100110,B01010100,B00000100,B00011100,B01100000,B00000100,B00000000,B00011000,B00000001,B00011111,
|
||||||
0x0, 0x0, 0x8, 0x0, 0x4, 0x0, 0x0, 0x0,
|
B11111100,B00000000,B00000000,B00000110,B00000111,B11000000,B01010100,B00101000,B00001000,B00101110,B01010000,B00000100,B00000000,B00010100,B00000001,B00111111,
|
||||||
0x0, 0x0, 0x8, 0x0, 0x6, 0x0, 0x0, 0x0,
|
B11111110,B00000000,B00000000,B00000100,B00000000,B00000000,B00101110,B00010100,B00010000,B01010100,B01100000,B00000100,B00000000,B00011000,B00000001,B00011111,
|
||||||
0x0, 0x0, 0x10, 0x0, 0x2, 0x0, 0x0, 0x0,
|
B11111100,B11111111,B11111111,B11111110,B00000000,B00000000,B00011100,B00001010,B00100000,B01100110,B01010100,B00000100,B00011100,B00010101,B00000001,B00111111,
|
||||||
0x0, 0x0, 0x30, 0x1e, 0x1, 0x0, 0x0, 0x0,
|
B11111110,B11010101,B01010101,B01010100,B00000000,B00000000,B00000110,B00000111,B11000000,B01010100,B00101000,B00001000,B00101010,B00001010,B00000010,B00011111,
|
||||||
0x0, 0x0, 0x20, 0x7f, 0x81, 0x0, 0x0, 0x0,
|
B11111100,B10000100,B00010000,B01000110,B00000000,B00000000,B00000100,B00000000,B00000000,B00101110,B00010100,B00010000,B01010001,B00000101,B00000100,B00111111,
|
||||||
0x0, 0x0, 0x41, 0xff, 0xe0, 0x80, 0x0, 0x0,
|
B11111110,B11000100,B00010000,B01000100,B11111111,B11111111,B11111110,B00000000,B00000000,B00011100,B00001010,B00100000,B01100001,B00000010,B10001000,B00011111,
|
||||||
0x0, 0x0, 0x43, 0xfc, 0xf0, 0x80, 0x0, 0x0,
|
B11111100,B10000100,B00010000,B01000110,B11010101,B01010101,B01010100,B00000000,B00000000,B00000110,B00000111,B11000000,B01010001,B00000001,B11110000,B00111111,
|
||||||
0x0, 0x0, 0x87, 0x3b, 0x78, 0x40, 0x0, 0x0,
|
B11111110,B10000100,B00010000,B01000100,B10000100,B00010000,B01000110,B00000000,B00000000,B00000100,B00000000,B00000000,B00101010,B00000000,B00000000,B00011111,
|
||||||
0x0, 0x1, 0x8e, 0xdb, 0xfc, 0x60, 0x0, 0x0,
|
B11111100,B11000100,B00010000,B01000110,B11000100,B00010000,B01000100,B11111111,B11111111,B11111110,B00000000,B00000000,B00011100,B00000000,B00000000,B00111111,
|
||||||
0x0, 0x1, 0xf, 0xeb, 0xcc, 0x20, 0x0, 0x0,
|
B11111110,B10000100,B00010000,B01000100,B10000100,B00010000,B01000110,B11010101,B01010101,B01010100,B00000000,B00000000,B00000000,B00000000,B00000000,B00011111,
|
||||||
0x0, 0x2, 0x1f, 0xed, 0xb6, 0x10, 0x0, 0x0,
|
B11111100,B11010101,B01010101,B01010110,B10000100,B00010000,B01000100,B10000100,B00010000,B01000110,B00000000,B00000000,B00000000,B00000000,B00000000,B00111111,
|
||||||
0x0, 0x2, 0x1f, 0xde, 0xb6, 0x10, 0x0, 0x0,
|
B11111100,B11111111,B11111111,B11111100,B11000100,B00010000,B01000110,B11000100,B00010000,B01000100,B11111111,B11111111,B11111111,B11111111,B11111111,B10011111,
|
||||||
0x0, 0x4, 0x39, 0xcd, 0x7f, 0x8, 0x0, 0x0,
|
B11111110,B00000000,B00000000,B00000110,B10000100,B00010000,B01000100,B10000100,B00010000,B01000110,B11010101,B01010101,B01010101,B01010101,B01010101,B10111111,
|
||||||
0x0, 0x4, 0x36, 0xe0, 0xff, 0x8, 0x0, 0x0,
|
B11111101,B01010101,B01010101,B01010100,B11010101,B01010101,B01010110,B10000100,B00010000,B01000100,B10000100,B00010000,B01000001,B00000100,B00010000,B10011111,
|
||||||
0x0, 0x8, 0x7e, 0xc0, 0xbb, 0x84, 0x0, 0x0,
|
B11111111,B11111111,B11111111,B11111100,B11111111,B11111111,B11111100,B11000100,B00010000,B01000110,B11000100,B00010000,B01000001,B00000100,B00010001,B10111111,
|
||||||
0x0, 0x18, 0x7f, 0x0, 0x5d, 0x86, 0x0, 0x0,
|
B11111111,B11111111,B11111111,B11111110,B00000000,B00000000,B00000110,B10000100,B00010000,B01000100,B10000100,B00010000,B01000001,B00000100,B00010000,B10011111,
|
||||||
0x0, 0x10, 0x7f, 0xc0, 0xed, 0x82, 0x0, 0x0,
|
B11111111,B11111111,B11111111,B11111101,B01010101,B01010101,B01010100,B11010101,B01010101,B01010110,B10000100,B00010000,B01000001,B00000100,B00010000,B10011111,
|
||||||
0x0, 0x20, 0x3c, 0xc0, 0x73, 0x1, 0x0, 0x0,
|
B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111100,B11111111,B11111111,B11111100,B11000100,B00010000,B01000001,B00000100,B00010001,B10111111,
|
||||||
0x0, 0x20, 0x3b, 0x33, 0x7f, 0x1, 0x0, 0x0,
|
B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111110,B00000000,B00000000,B00000110,B10000100,B00010000,B01000001,B00000100,B00010000,B10011111,
|
||||||
0x0, 0x70, 0x1b, 0xe7, 0x7e, 0x3, 0x80, 0x0,
|
B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111101,B01010101,B01010101,B01010100,B11010101,B01010101,B01010101,B01010101,B01010101,B10111111,
|
||||||
0x0, 0xc8, 0x1d, 0xee, 0xde, 0x4, 0xc0, 0x0,
|
B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111100,B11111111,B11111111,B11111111,B11111111,B11111111,B10011111,
|
||||||
0x0, 0x88, 0xf, 0xde, 0xdc, 0x4, 0x40, 0x0,
|
B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111110,B00000000,B00000000,B00000000,B00000000,B00000000,B00111111,
|
||||||
0x1, 0x24, 0xf, 0xdf, 0x3c, 0x9, 0x20, 0x0,
|
B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111101,B01010101,B01010101,B01010101,B01010101,B01010101,B01011111,
|
||||||
0x1, 0x26, 0x7, 0xdb, 0xf8, 0x19, 0x20, 0x0,
|
B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,
|
||||||
0x2, 0x72, 0x3, 0xe7, 0xf0, 0x13, 0x90, 0x0,
|
B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,
|
||||||
0x2, 0x51, 0x1, 0xff, 0xe0, 0x22, 0x90, 0x0,
|
B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,
|
||||||
0x4, 0x89, 0x0, 0x7f, 0x80, 0x24, 0x48, 0x0,
|
B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,
|
||||||
0x9, 0x4, 0x80, 0x1e, 0x0, 0x48, 0x24, 0x0,
|
B11100000,B00101110,B11111011,B01111101,B11111011,B11111011,B11001111,B11000001,B11011111,B10111011,B00111110,B11000000,B11100001,B11111110,B00111100,B00011111,
|
||||||
0xb, 0xfe, 0x40, 0x0, 0x0, 0xdf, 0xf4, 0x0,
|
B11111101,B11101110,B01111011,B00111001,B11111001,B11110011,B11001111,B10011110,B11011111,B10111011,B00111110,B11011111,B11011110,B11111100,B11011101,B11100111,
|
||||||
0x10, 0x0, 0x40, 0x0, 0x0, 0x80, 0x2, 0x0,
|
B11111101,B11101110,B00111011,B10111011,B11111001,B11101011,B11010111,B10111111,B01011111,B10111011,B01011110,B11011111,B11011110,B11111101,B11101101,B11110111,
|
||||||
0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x0,
|
B11111101,B11101110,B10111011,B11010011,B11111010,B11101011,B10110111,B00111111,B11011111,B10111011,B01001110,B11011111,B11011111,B11111111,B11001101,B11110011,
|
||||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
B11111101,B11101110,B11011011,B11000111,B11111010,B11101011,B10111011,B01111111,B11000000,B00111011,B01101110,B11000000,B11100011,B11111111,B00011101,B11110011,
|
||||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
B11111101,B11101110,B11001011,B11101111,B11111010,B11011011,B10111011,B01111111,B11011111,B10111011,B01100110,B11011111,B11111000,B11111111,B11001101,B11110011,
|
||||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
B11111101,B11101110,B11101011,B11101111,B11111011,B01011011,B00000011,B00111111,B01011111,B10111011,B01110110,B11011111,B11111110,B01111111,B11101101,B11110011,
|
||||||
0x10, 0x22, 0x10, 0x3c, 0x3c, 0xe, 0x1f, 0x0,
|
B11111101,B11101110,B11110011,B11101111,B11111011,B01011011,B01111001,B10111110,B11011111,B10111011,B01111010,B11011111,B11011110,B01111101,B11101101,B11110111,
|
||||||
0x10, 0x22, 0x10, 0x4, 0x22, 0x11, 0x4, 0x0,
|
B11111101,B11101110,B11110011,B11101111,B11111011,B10111010,B11111101,B10011110,B11011111,B10111011,B01111100,B11011111,B11011110,B11111101,B11001101,B11100111,
|
||||||
0x10, 0x22, 0x10, 0x8, 0x22, 0x11, 0x4, 0x0,
|
B11111101,B11101110,B11111011,B11101111,B11111011,B10111010,B11111101,B11000001,B11011111,B10111011,B01111110,B11000000,B11100000,B11111110,B00011100,B00011111
|
||||||
0x10, 0x22, 0x10, 0x8, 0x3c, 0x11, 0x4, 0x0,
|
|
||||||
0x10, 0x22, 0x10, 0x10, 0x22, 0x11, 0x4, 0x0,
|
|
||||||
0x10, 0x22, 0x10, 0x20, 0x22, 0x11, 0x4, 0x0,
|
|
||||||
0x1e, 0x1c, 0x1e, 0x3c, 0x3c, 0xe, 0x4, 0x0,
|
|
||||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
|
||||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
|
||||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
|
||||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
|
||||||
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -0,0 +1,74 @@
|
|||||||
|
/**
|
||||||
|
* Marlin 3D Printer Firmware
|
||||||
|
* Copyright (C) 2016 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 <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Custom Status Screen bitmap
|
||||||
|
*
|
||||||
|
* Place this file in the root with your configuration files
|
||||||
|
* and enable CUSTOM_STATUS_SCREEN_IMAGE in Configuration.h.
|
||||||
|
*
|
||||||
|
* Use the Marlin Bitmap Converter to make your own:
|
||||||
|
* http://marlinfw.org/tools/u8glib/converter.html
|
||||||
|
*/
|
||||||
|
|
||||||
|
//
|
||||||
|
// Status Screen Logo bitmap
|
||||||
|
//
|
||||||
|
#define STATUS_LOGO_Y 3
|
||||||
|
#define STATUS_LOGO_WIDTH 24
|
||||||
|
|
||||||
|
const unsigned char status_logo_bmp[] PROGMEM = {
|
||||||
|
B11111111,B11111111,B11111111,
|
||||||
|
B10000000,B00000000,B00000001,
|
||||||
|
B10001110,B00000000,B11100001,
|
||||||
|
B10011111,B00000001,B11110001,
|
||||||
|
B10010011,B10000001,B00111001,
|
||||||
|
B10011111,B10000001,B11111001,
|
||||||
|
B10011111,B10000001,B11111001,
|
||||||
|
B10011111,B10111001,B11111001,
|
||||||
|
B10001111,B00101000,B11110001,
|
||||||
|
B10000000,B00111000,B00000001,
|
||||||
|
B10000000,B00000000,B00000001,
|
||||||
|
B10011111,B11111111,B11111001,
|
||||||
|
B10010001,B01110100,B10011001,
|
||||||
|
B10011011,B00000110,B10101001,
|
||||||
|
B10011011,B01010100,B10101001,
|
||||||
|
B10011011,B01010110,B10101001,
|
||||||
|
B10011011,B01010100,B10011001,
|
||||||
|
B10011111,B11111111,B11111001,
|
||||||
|
B11111111,B11111111,B11111111
|
||||||
|
};
|
||||||
|
|
||||||
|
//
|
||||||
|
// Use default bitmaps
|
||||||
|
//
|
||||||
|
#define STATUS_HOTEND_ANIM
|
||||||
|
#define STATUS_BED_ANIM
|
||||||
|
#if HOTENDS < 2
|
||||||
|
#define STATUS_LOGO_X 8
|
||||||
|
#define STATUS_HEATERS_X 40
|
||||||
|
#define STATUS_BED_X 72
|
||||||
|
#else
|
||||||
|
#define STATUS_LOGO_X 0
|
||||||
|
#define STATUS_HEATERS_X 32
|
||||||
|
#define STATUS_BED_X 80
|
||||||
|
#endif
|
||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -141,8 +141,8 @@ 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 HAS_DGUS_LCD || ENABLED(DGUS_LCD_UI_CREALITY_TOUCH) || ENABLED(EXTENSIBLE_UI)
|
||||||
#define LCD_SERIAL_TX_BUFFER_FREE() LCD_SERIAL.get_tx_buffer_free()
|
#define SERIAL_GET_TX_BUFFER_FREE() LCD_SERIAL.get_tx_buffer_free()
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
// ------------------------
|
// ------------------------
|
||||||
|
|||||||
@@ -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 HAS_DGUS_LCD || ENABLED(DGUS_LCD_UI_CREALITY_TOUCH) || ENABLED(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.
|
||||||
|
|||||||
@@ -205,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 HAS_DGUS_LCD || ENABLED(DGUS_LCD_UI_CREALITY_TOUCH) || ENABLED(EXTENSIBLE_UI)
|
||||||
static ring_buffer_pos_t get_tx_buffer_free();
|
static ring_buffer_pos_t get_tx_buffer_free();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -276,7 +276,7 @@
|
|||||||
static constexpr bool DROPPED_RX = false;
|
static constexpr bool DROPPED_RX = false;
|
||||||
static constexpr bool RX_FRAMING_ERRORS = false;
|
static constexpr bool RX_FRAMING_ERRORS = false;
|
||||||
static constexpr bool MAX_RX_QUEUED = false;
|
static constexpr bool MAX_RX_QUEUED = false;
|
||||||
static constexpr bool RX_OVERRUNS = ALL(HAS_DGUS_LCD, SERIAL_STATS_RX_BUFFER_OVERRUNS);
|
static constexpr bool RX_OVERRUNS = (ANY(HAS_DGUS_LCD, SERIAL_STATS_RX_BUFFER_OVERRUNS) || ENABLED(DWINOS_4));
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef Serial1Class< MarlinSerial< LCDSerialCfg<LCD_SERIAL_PORT> > > MSerialLCD;
|
typedef Serial1Class< MarlinSerial< LCDSerialCfg<LCD_SERIAL_PORT> > > MSerialLCD;
|
||||||
|
|||||||
@@ -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)) {
|
||||||
|
|||||||
@@ -679,7 +679,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.
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -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])
|
||||||
|
|||||||
@@ -120,7 +120,6 @@ void u8g_spiSend_sw_AVR_mode_3(uint8_t val) {
|
|||||||
U8G_ATOMIC_END();
|
U8G_ATOMIC_END();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#if ENABLED(FYSETC_MINI_12864)
|
#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
|
||||||
|
|||||||
@@ -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> >;
|
||||||
|
|||||||
@@ -958,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);
|
||||||
@@ -984,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++;
|
||||||
|
|||||||
@@ -36,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);
|
||||||
@@ -62,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++;
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -72,10 +72,10 @@
|
|||||||
|
|
||||||
#if HAS_MEDIA && HAS_DRIVER(TMC2130)
|
#if HAS_MEDIA && HAS_DRIVER(TMC2130)
|
||||||
#if ENABLED(TMC_USE_SW_SPI)
|
#if ENABLED(TMC_USE_SW_SPI)
|
||||||
#if DISABLED(DUE_SOFTWARE_SPI) && (_IS_HW_SPI(MOSI) || _IS_HW_SPI(MISO) || _IS_HW_SPI(SCK))
|
#if DISABLED(SOFTWARE_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)
|
#elif ENABLED(SOFTWARE_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
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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,17 +62,14 @@
|
|||||||
#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.
|
||||||
@@ -133,7 +129,6 @@ extern bool sd_mmc_spi_wr_protect(void);
|
|||||||
//!
|
//!
|
||||||
extern bool sd_mmc_spi_removal(void);
|
extern bool sd_mmc_spi_removal(void);
|
||||||
|
|
||||||
|
|
||||||
//---- ACCESS DATA FUNCTIONS ----
|
//---- ACCESS DATA FUNCTIONS ----
|
||||||
|
|
||||||
#if ACCESS_USB == true
|
#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
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -293,7 +293,6 @@ do { \
|
|||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \name Power management routine.
|
* \name Power management routine.
|
||||||
*/
|
*/
|
||||||
@@ -310,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
|
||||||
@@ -338,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.
|
||||||
*
|
*
|
||||||
@@ -410,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
|
||||||
*
|
*
|
||||||
@@ -422,7 +418,6 @@ static bool udd_ctrl_interrupt(void);
|
|||||||
|
|
||||||
//@}
|
//@}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \name Management of bulk/interrupt/isochronous endpoints
|
* \name Management of bulk/interrupt/isochronous endpoints
|
||||||
*
|
*
|
||||||
@@ -460,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];
|
||||||
|
|
||||||
@@ -522,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
|
||||||
|
|
||||||
@@ -671,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;
|
||||||
@@ -764,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;
|
||||||
@@ -866,7 +856,6 @@ 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();
|
||||||
@@ -883,7 +872,6 @@ void udd_detach(void)
|
|||||||
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
|
||||||
@@ -893,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();
|
||||||
@@ -901,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();
|
||||||
@@ -930,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)
|
||||||
@@ -1061,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;
|
||||||
@@ -1074,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;
|
||||||
@@ -1122,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;
|
||||||
@@ -1163,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)
|
||||||
@@ -1230,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;
|
||||||
@@ -1259,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)
|
||||||
{
|
{
|
||||||
@@ -1294,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)
|
||||||
@@ -1303,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;
|
||||||
@@ -1360,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
|
||||||
|
|
||||||
@@ -1411,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;
|
||||||
@@ -1473,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;
|
||||||
@@ -1557,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;
|
||||||
@@ -1648,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))
|
||||||
@@ -1665,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))
|
||||||
@@ -1681,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
|
||||||
@@ -1689,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;
|
||||||
@@ -1707,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;
|
||||||
@@ -1723,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
|
||||||
@@ -1732,7 +1693,6 @@ static void udd_ctrl_endofrequest(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static bool udd_ctrl_interrupt(void)
|
static bool udd_ctrl_interrupt(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -1783,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
|
||||||
|
|
||||||
@@ -1798,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;
|
||||||
@@ -1809,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;
|
||||||
@@ -1818,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) {
|
||||||
@@ -1889,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();
|
||||||
|
|||||||
@@ -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).
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -31,24 +31,28 @@
|
|||||||
#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() { return EEPROM.begin(MARLIN_EEPROM_SIZE); }
|
bool PersistentStore::access_start() { return EEPROM.begin(MARLIN_EEPROM_SIZE); }
|
||||||
bool PersistentStore::access_finish() { EEPROM.end(); return true; }
|
bool PersistentStore::access_finish() { EEPROM.end(); 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) {
|
||||||
for (size_t i = 0; i < size; i++) {
|
for (size_t i = 0; i < size; i++) {
|
||||||
EEPROM.write(pos++, value[i]);
|
const int p = REAL_EEPROM_ADDR(pos);
|
||||||
|
EEPROM.write(p, value[i]);
|
||||||
crc16(crc, &value[i], 1);
|
crc16(crc, &value[i], 1);
|
||||||
|
++pos;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
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*/) {
|
||||||
for (size_t i = 0; i < size; i++) {
|
for (size_t i = 0; i < size; i++) {
|
||||||
uint8_t c = EEPROM.read(pos++);
|
const int p = REAL_EEPROM_ADDR(pos);
|
||||||
|
uint8_t c = EEPROM.read(p);
|
||||||
if (writing) value[i] = c;
|
if (writing) value[i] = c;
|
||||||
crc16(crc, &c, 1);
|
crc16(crc, &c, 1);
|
||||||
|
++pos;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -123,6 +123,11 @@ void MarlinHAL::init() {
|
|||||||
|
|
||||||
// Register min serial
|
// Register min serial
|
||||||
TERN_(POSTMORTEM_DEBUGGING, install_min_serial());
|
TERN_(POSTMORTEM_DEBUGGING, install_min_serial());
|
||||||
|
|
||||||
|
// warn if low memory after init
|
||||||
|
if (freeMemory() < 1024) {
|
||||||
|
SERIAL_WARN_MSG("HAL: low memory after init!\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MarlinHAL::init_board() {}
|
void MarlinHAL::init_board() {}
|
||||||
@@ -147,7 +152,31 @@ void MarlinHAL::delay_ms(const int ms) {
|
|||||||
delay(ms);
|
delay(ms);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MarlinHAL::idletask() {}
|
void MarlinHAL::idletask() {
|
||||||
|
#if ENABLED(MARLIN_DEV_MODE)
|
||||||
|
// check & print serial RX errors
|
||||||
|
MSerialT *serials[] = { &MSerial1, &MSerial2 };
|
||||||
|
for (int serial = 0; serial < 2; serial++) {
|
||||||
|
usart_receive_error_t err = serials[serial]->getReceiveError();
|
||||||
|
if (err != usart_receive_error_t::None) {
|
||||||
|
// "Warning: MSerial[n] RX [Framing|Parity|Overrun] Error"
|
||||||
|
SERIAL_WARN_START();
|
||||||
|
SERIAL_ECHOPGM(" MSerial");
|
||||||
|
SERIAL_ECHO(serial + 1);
|
||||||
|
SERIAL_ECHOPGM(" RX ");
|
||||||
|
switch(err) {
|
||||||
|
case usart_receive_error_t::FramingError: SERIAL_ECHOPGM("Framing"); break;
|
||||||
|
case usart_receive_error_t::ParityError: SERIAL_ECHOPGM("Parity"); break;
|
||||||
|
case usart_receive_error_t::OverrunError: SERIAL_ECHOPGM("Overrun"); break;
|
||||||
|
case usart_receive_error_t::RxDataDropped: SERIAL_ECHOPGM("DataDropped"); break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
SERIAL_ECHOPGM(" Error");
|
||||||
|
SERIAL_EOL();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
uint8_t MarlinHAL::get_reset_source() {
|
uint8_t MarlinHAL::get_reset_source() {
|
||||||
// Query reset cause from RMU
|
// Query reset cause from RMU
|
||||||
|
|||||||
@@ -27,7 +27,7 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Not every MarlinSerial instance should handle emergency parsing, as
|
* Not every MarlinSerial instance should handle emergency parsing, as
|
||||||
* it would not make sense to parse GCode from TMC responses
|
* it would not make sense to parse G-Code from TMC responses
|
||||||
*/
|
*/
|
||||||
constexpr bool serial_handles_emergency(int port) {
|
constexpr bool serial_handles_emergency(int port) {
|
||||||
return false
|
return false
|
||||||
@@ -46,14 +46,34 @@ constexpr bool serial_handles_emergency(int port) {
|
|||||||
//
|
//
|
||||||
// Define serial ports
|
// Define serial ports
|
||||||
//
|
//
|
||||||
#define DEFINE_HWSERIAL_MARLIN(name, n) \
|
|
||||||
|
// serial port where RX and TX use IRQs
|
||||||
|
#define DEFINE_IRQ_SERIAL_MARLIN(name, n) \
|
||||||
MSerialT name(serial_handles_emergency(n), \
|
MSerialT name(serial_handles_emergency(n), \
|
||||||
&USART##n##_config, \
|
&USART##n##_config, \
|
||||||
BOARD_USART##n##_TX_PIN, \
|
BOARD_USART##n##_TX_PIN, \
|
||||||
BOARD_USART##n##_RX_PIN);
|
BOARD_USART##n##_RX_PIN);
|
||||||
|
|
||||||
DEFINE_HWSERIAL_MARLIN(MSerial1, 1);
|
// serial port where RX uses DMA and TX uses IRQs
|
||||||
DEFINE_HWSERIAL_MARLIN(MSerial2, 2);
|
// all serial ports use DMA1
|
||||||
|
// since there are 4 USARTs and 4 DMA channels, we can use the USART number as the DMA channel
|
||||||
|
#define DEFINE_DMA_SERIAL_MARLIN(name, n) \
|
||||||
|
MSerialT name(serial_handles_emergency(n), \
|
||||||
|
&USART##n##_config, \
|
||||||
|
BOARD_USART##n##_TX_PIN, \
|
||||||
|
BOARD_USART##n##_RX_PIN, \
|
||||||
|
M4_DMA1, \
|
||||||
|
((en_dma_channel_t)(n - 1))); // map USART1 to DMA channel 0, USART2 to DMA channel 1, etc.
|
||||||
|
|
||||||
|
#define DEFINE_SERIAL_MARLIN(name, n) TERN(SERIAL_DMA, DEFINE_DMA_SERIAL_MARLIN(name, n), DEFINE_IRQ_SERIAL_MARLIN(name, n))
|
||||||
|
|
||||||
|
DEFINE_SERIAL_MARLIN(MSerial1, 1);
|
||||||
|
DEFINE_SERIAL_MARLIN(MSerial2, 2);
|
||||||
|
|
||||||
|
// TODO: remove this warning when SERIAL_DMA has been tested some more
|
||||||
|
#if ENABLED(SERIAL_DMA)
|
||||||
|
#warning "SERIAL_DMA may be unstable on HC32F460."
|
||||||
|
#endif
|
||||||
|
|
||||||
//
|
//
|
||||||
// Serial port assertions
|
// Serial port assertions
|
||||||
|
|||||||
@@ -25,17 +25,42 @@
|
|||||||
#include <drivers/usart/Usart.h>
|
#include <drivers/usart/Usart.h>
|
||||||
|
|
||||||
// Optionally set uart IRQ priority to reduce overflow errors
|
// Optionally set uart IRQ priority to reduce overflow errors
|
||||||
// #define UART_IRQ_PRIO 1
|
//#define UART_RX_IRQ_PRIO 1
|
||||||
|
//#define UART_TX_IRQ_PRIO 1
|
||||||
|
//#define UART_RX_DMA_IRQ_PRIO 1
|
||||||
|
|
||||||
struct MarlinSerial : public Usart {
|
struct MarlinSerial : public Usart {
|
||||||
MarlinSerial(struct usart_config_t *usart_device, gpio_pin_t tx_pin, gpio_pin_t rx_pin) : Usart(usart_device, tx_pin, rx_pin) {}
|
MarlinSerial(
|
||||||
|
struct usart_config_t *usart_device,
|
||||||
|
gpio_pin_t tx_pin,
|
||||||
|
gpio_pin_t rx_pin
|
||||||
|
#if ENABLED(SERIAL_DMA)
|
||||||
|
, M4_DMA_TypeDef *dma_unit = nullptr,
|
||||||
|
en_dma_channel_t rx_dma_channel = DmaCh0
|
||||||
|
#endif
|
||||||
|
) : Usart(usart_device, tx_pin, rx_pin) {
|
||||||
|
#if ENABLED(SERIAL_DMA)
|
||||||
|
if (dma_unit != nullptr) {
|
||||||
|
enableRxDma(dma_unit, rx_dma_channel);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef UART_IRQ_PRIO
|
#if defined(UART_RX_IRQ_PRIO) || defined(UART_TX_IRQ_PRIO) || defined(UART_RX_DMA_IRQ_PRIO)
|
||||||
void setPriority() {
|
void setPriority() {
|
||||||
NVIC_SetPriority(c_dev()->interrupts.rx_data_available.interrupt_number, UART_IRQ_PRIO);
|
#if defined(UART_RX_IRQ_PRIO)
|
||||||
NVIC_SetPriority(c_dev()->interrupts.rx_error.interrupt_number, UART_IRQ_PRIO);
|
NVIC_SetPriority(c_dev()->interrupts.rx_data_available.interrupt_number, UART_RX_IRQ_PRIO);
|
||||||
NVIC_SetPriority(c_dev()->interrupts.tx_buffer_empty.interrupt_number, UART_IRQ_PRIO);
|
NVIC_SetPriority(c_dev()->interrupts.rx_error.interrupt_number, UART_RX_IRQ_PRIO);
|
||||||
NVIC_SetPriority(c_dev()->interrupts.tx_complete.interrupt_number, UART_IRQ_PRIO);
|
#endif
|
||||||
|
|
||||||
|
#if defined(UART_TX_IRQ_PRIO)
|
||||||
|
NVIC_SetPriority(c_dev()->interrupts.tx_buffer_empty.interrupt_number, UART_TX_IRQ_PRIO);
|
||||||
|
NVIC_SetPriority(c_dev()->interrupts.tx_complete.interrupt_number, UART_TX_IRQ_PRIO);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(UART_RX_DMA_IRQ_PRIO) && ENABLED(SERIAL_DMA)
|
||||||
|
NVIC_SetPriority(c_dev()->dma.rx.rx_data_available_dma_btc.interrupt_number, UART_RX_DMA_IRQ_PRIO);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void begin(uint32_t baud) {
|
void begin(uint32_t baud) {
|
||||||
@@ -47,7 +72,12 @@ struct MarlinSerial : public Usart {
|
|||||||
Usart::begin(baud, config);
|
Usart::begin(baud, config);
|
||||||
setPriority();
|
setPriority();
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
void begin(uint32_t baud, const stc_usart_uart_init_t *config, const bool rxNoiseFilter = true) {
|
||||||
|
Usart::begin(baud, config, rxNoiseFilter);
|
||||||
|
setPriority();
|
||||||
|
}
|
||||||
|
#endif // UART_RX_IRQ_PRIO || UART_TX_IRQ_PRIO || UART_RX_DMA_IRQ_PRIO
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef Serial1Class<MarlinSerial> MSerialT;
|
typedef Serial1Class<MarlinSerial> MSerialT;
|
||||||
|
|||||||
@@ -0,0 +1,70 @@
|
|||||||
|
/**
|
||||||
|
* app_config.h is included by the hc32f460 arduino build script for every source file.
|
||||||
|
* it is used to configure the arduino core (and ddl) automatically according
|
||||||
|
* to the settings in Configuration.h and Configuration_adv.h.
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
#ifndef _HC32_APP_CONFIG_H_
|
||||||
|
#define _HC32_APP_CONFIG_H_
|
||||||
|
|
||||||
|
#include "../../inc/MarlinConfigPre.h"
|
||||||
|
|
||||||
|
//
|
||||||
|
// dev mode
|
||||||
|
//
|
||||||
|
#if ENABLED(MARLIN_DEV_MODE)
|
||||||
|
#define __DEBUG 1
|
||||||
|
#define __CORE_DEBUG 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//
|
||||||
|
// Fault Handlers and Panic
|
||||||
|
//
|
||||||
|
|
||||||
|
#if ENABLED(POSTMORTEM_DEBUGGING)
|
||||||
|
// disable arduino core fault handler, as we define our own
|
||||||
|
#define CORE_DISABLE_FAULT_HANDLER 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// force-enable panic handler so that we can use our custom one (in MinSerial)
|
||||||
|
#define PANIC_ENABLE 1
|
||||||
|
|
||||||
|
// use short filenames in ddl debug and core panic output
|
||||||
|
#define __DEBUG_SHORT_FILENAMES 1
|
||||||
|
#define __PANIC_SHORT_FILENAMES 1
|
||||||
|
|
||||||
|
// omit panic messages in core panic output
|
||||||
|
#define __OMIT_PANIC_MESSAGE 1
|
||||||
|
|
||||||
|
//
|
||||||
|
// Usart
|
||||||
|
//
|
||||||
|
|
||||||
|
// disable serial globals (Serial1, Serial2, ...), as we define our own
|
||||||
|
#define DISABLE_SERIAL_GLOBALS 1
|
||||||
|
|
||||||
|
// increase the size of the Usart buffers (both RX and TX)
|
||||||
|
// NOTE:
|
||||||
|
// the heap usage will increase by (SERIAL_BUFFER_SIZE - 64) * "number of serial ports used"
|
||||||
|
// if running out of heap, the system may become unstable
|
||||||
|
//#define SERIAL_BUFFER_SIZE 256
|
||||||
|
|
||||||
|
// enable support for Usart Clock Divider / Oversampling auto config
|
||||||
|
#define USART_AUTO_CLKDIV_OS_CONFIG 1
|
||||||
|
|
||||||
|
// enable USART_RX_DMA_SUPPORT core option when SERIAL_DMA is enabled
|
||||||
|
#if ENABLED(SERIAL_DMA)
|
||||||
|
#define USART_RX_DMA_SUPPORT 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//
|
||||||
|
// Misc.
|
||||||
|
//
|
||||||
|
|
||||||
|
// redirect printf to host serial
|
||||||
|
#define REDIRECT_PRINTF_TO_SERIAL 1
|
||||||
|
|
||||||
|
// FIXME override F_CPU to PCLK1, as marlin freaks out otherwise
|
||||||
|
#define F_CPU (SYSTEM_CLOCK_FREQUENCIES.pclk1)
|
||||||
|
|
||||||
|
#endif // _HC32_APP_CONFIG_H_
|
||||||
@@ -37,7 +37,7 @@
|
|||||||
#error "MARLIN_EEPROM_SIZE is required for IIC_BL24CXX_EEPROM."
|
#error "MARLIN_EEPROM_SIZE is required for IIC_BL24CXX_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() {
|
bool PersistentStore::access_start() {
|
||||||
eeprom_init();
|
eeprom_init();
|
||||||
@@ -49,7 +49,7 @@ 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) {
|
||||||
while (size--) {
|
while (size--) {
|
||||||
uint8_t v = *value;
|
uint8_t v = *value;
|
||||||
uint8_t *const p = (uint8_t *const)pos;
|
uint8_t * const p = (uint8_t * const)REAL_EEPROM_ADDR(pos);
|
||||||
|
|
||||||
// EEPROM has only ~100,000 write cycles,
|
// EEPROM has only ~100,000 write cycles,
|
||||||
// so only write bytes that have changed!
|
// so only write bytes that have changed!
|
||||||
@@ -70,16 +70,10 @@ bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, ui
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool PersistentStore::read_data(int &pos, uint8_t *value, size_t size,
|
bool PersistentStore::read_data(int &pos, uint8_t *value, size_t size, uint16_t *crc, const bool writing /*=true*/) {
|
||||||
uint16_t *crc, const bool writing /*=true*/) {
|
|
||||||
do {
|
do {
|
||||||
uint8_t *const p = (uint8_t *const)pos;
|
const uint8_t c = eeprom_read_byte((uint8_t*)REAL_EEPROM_ADDR(pos));
|
||||||
uint8_t c = eeprom_read_byte(p);
|
if (writing) *value = c;
|
||||||
if (writing)
|
|
||||||
{
|
|
||||||
*value = c;
|
|
||||||
}
|
|
||||||
|
|
||||||
crc16(crc, &c, 1);
|
crc16(crc, &c, 1);
|
||||||
pos++;
|
pos++;
|
||||||
value++;
|
value++;
|
||||||
|
|||||||
@@ -38,9 +38,7 @@
|
|||||||
#define MARLIN_EEPROM_SIZE 0x1000 // 4KB
|
#define MARLIN_EEPROM_SIZE 0x1000 // 4KB
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
size_t PersistentStore::capacity() {
|
size_t PersistentStore::capacity() { return MARLIN_EEPROM_SIZE - eeprom_exclude_size; }
|
||||||
return MARLIN_EEPROM_SIZE;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define _ALIGN(x) __attribute__((aligned(x)))
|
#define _ALIGN(x) __attribute__((aligned(x)))
|
||||||
static char _ALIGN(4) HAL_eeprom_data[MARLIN_EEPROM_SIZE];
|
static char _ALIGN(4) HAL_eeprom_data[MARLIN_EEPROM_SIZE];
|
||||||
@@ -85,11 +83,10 @@ bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, ui
|
|||||||
|
|
||||||
bool PersistentStore::read_data(int &pos, uint8_t *value, const size_t size, uint16_t *crc, const bool writing /*=true*/) {
|
bool PersistentStore::read_data(int &pos, uint8_t *value, const size_t size, uint16_t *crc, const bool writing /*=true*/) {
|
||||||
for (size_t i = 0; i < size; i++) {
|
for (size_t i = 0; i < size; i++) {
|
||||||
uint8_t c = HAL_eeprom_data[pos + i];
|
const uint8_t c = HAL_eeprom_data[pos + i];
|
||||||
if (writing) value[i] = c;
|
if (writing) value[i] = c;
|
||||||
crc16(crc, &c, 1);
|
crc16(crc, &c, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
pos += size;
|
pos += size;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,7 +35,7 @@
|
|||||||
#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_finish() { return true; }
|
bool PersistentStore::access_finish() { return true; }
|
||||||
|
|
||||||
@@ -56,7 +56,7 @@ bool PersistentStore::access_start() {
|
|||||||
|
|
||||||
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) {
|
||||||
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;
|
||||||
// EEPROM has only ~100,000 write cycles,
|
// EEPROM has only ~100,000 write cycles,
|
||||||
// so only write bytes that have changed!
|
// so only write bytes that have changed!
|
||||||
@@ -77,10 +77,8 @@ 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) {
|
if (writing && value) *value = c;
|
||||||
*value = c;
|
|
||||||
}
|
|
||||||
|
|
||||||
crc16(crc, &c, 1);
|
crc16(crc, &c, 1);
|
||||||
pos++;
|
pos++;
|
||||||
|
|||||||
@@ -40,9 +40,15 @@ void endstopIRQHandler() {
|
|||||||
CHECK(X_MAX);
|
CHECK(X_MAX);
|
||||||
CHECK(X_MIN);
|
CHECK(X_MIN);
|
||||||
|
|
||||||
|
CHECK(X2_MAX);
|
||||||
|
CHECK(X2_MIN);
|
||||||
|
|
||||||
CHECK(Y_MAX);
|
CHECK(Y_MAX);
|
||||||
CHECK(Y_MIN);
|
CHECK(Y_MIN);
|
||||||
|
|
||||||
|
CHECK(Y2_MAX);
|
||||||
|
CHECK(Y2_MIN);
|
||||||
|
|
||||||
CHECK(Z_MAX);
|
CHECK(Z_MAX);
|
||||||
CHECK(Z_MIN);
|
CHECK(Z_MIN);
|
||||||
|
|
||||||
@@ -52,6 +58,9 @@ void endstopIRQHandler() {
|
|||||||
CHECK(Z3_MAX);
|
CHECK(Z3_MAX);
|
||||||
CHECK(Z3_MIN);
|
CHECK(Z3_MIN);
|
||||||
|
|
||||||
|
CHECK(Z4_MAX);
|
||||||
|
CHECK(Z4_MIN);
|
||||||
|
|
||||||
CHECK(Z_MIN_PROBE);
|
CHECK(Z_MIN_PROBE);
|
||||||
|
|
||||||
// Update endstops
|
// Update endstops
|
||||||
@@ -69,9 +78,15 @@ void setup_endstop_interrupts() {
|
|||||||
SETUP(X_MAX);
|
SETUP(X_MAX);
|
||||||
SETUP(X_MIN);
|
SETUP(X_MIN);
|
||||||
|
|
||||||
|
SETUP(X2_MAX);
|
||||||
|
SETUP(X2_MIN);
|
||||||
|
|
||||||
SETUP(Y_MAX);
|
SETUP(Y_MAX);
|
||||||
SETUP(Y_MIN);
|
SETUP(Y_MIN);
|
||||||
|
|
||||||
|
SETUP(Y2_MAX);
|
||||||
|
SETUP(Y2_MIN);
|
||||||
|
|
||||||
SETUP(Z_MAX);
|
SETUP(Z_MAX);
|
||||||
SETUP(Z_MIN);
|
SETUP(Z_MIN);
|
||||||
|
|
||||||
@@ -81,6 +96,9 @@ void setup_endstop_interrupts() {
|
|||||||
SETUP(Z3_MAX);
|
SETUP(Z3_MAX);
|
||||||
SETUP(Z3_MIN);
|
SETUP(Z3_MIN);
|
||||||
|
|
||||||
|
SETUP(Z4_MAX);
|
||||||
|
SETUP(Z4_MIN);
|
||||||
|
|
||||||
SETUP(Z_MIN_PROBE);
|
SETUP(Z_MIN_PROBE);
|
||||||
|
|
||||||
#undef SETUP
|
#undef SETUP
|
||||||
@@ -88,7 +106,7 @@ void setup_endstop_interrupts() {
|
|||||||
|
|
||||||
// Ensure 1 - 10 IRQs are registered
|
// Ensure 1 - 10 IRQs are registered
|
||||||
// Disable some endstops if you encounter this error
|
// Disable some endstops if you encounter this error
|
||||||
#define ENDSTOPS_INTERRUPTS_COUNT COUNT_ENABLED(USE_X_MAX, USE_X_MIN, USE_Y_MAX, USE_Y_MIN, USE_Z_MAX, USE_Z_MIN, USE_Z2_MAX, USE_Z2_MIN, USE_Z3_MAX, USE_Z3_MIN, USE_Z_MIN_PROBE)
|
#define ENDSTOPS_INTERRUPTS_COUNT COUNT_ENABLED(USE_X_MAX, USE_X_MIN, USE_X2_MAX, USE_X2_MIN, USE_Y_MAX, USE_Y_MIN, USE_Y2_MAX, USE_Y2_MIN, USE_Z_MAX, USE_Z_MIN, USE_Z2_MAX, USE_Z2_MIN, USE_Z3_MAX, USE_Z3_MIN, USE_Z4_MAX, USE_Z4_MIN, USE_Z_MIN_PROBE)
|
||||||
#if ENDSTOPS_INTERRUPTS_COUNT > 10
|
#if ENDSTOPS_INTERRUPTS_COUNT > 10
|
||||||
#error "Too many endstop interrupts! HC32F460 only supports 10 endstop interrupts."
|
#error "Too many endstop interrupts! HC32F460 only supports 10 endstop interrupts."
|
||||||
#elif ENDSTOPS_INTERRUPTS_COUNT == 0
|
#elif ENDSTOPS_INTERRUPTS_COUNT == 0
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -20,6 +20,20 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
#include <core_util.h>
|
||||||
|
|
||||||
|
#if !defined(ARDUINO_CORE_VERSION_INT) || !defined(GET_VERSION_INT)
|
||||||
|
// version macros were introduced in arduino core version 1.1.0
|
||||||
|
// below that version, we polyfill them
|
||||||
|
#define GET_VERSION_INT(major, minor, patch) ((major * 100000) + (minor * 1000) + patch)
|
||||||
|
#define ARDUINO_CORE_VERSION_INT GET_VERSION_INT(1, 0, 0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if ARDUINO_CORE_VERSION_INT < GET_VERSION_INT(1, 1, 0)
|
||||||
|
// because we use app_config.h introduced in arduino core version 1.1.0, the
|
||||||
|
// HAL is not compatible with older versions
|
||||||
|
#error "The HC32 HAL is not compatible with Arduino Core versions < 1.1.0. Consider updating the Arduino Core."
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef BOARD_XTAL_FREQUENCY
|
#ifndef BOARD_XTAL_FREQUENCY
|
||||||
#error "BOARD_XTAL_FREQUENCY is required for HC32F460."
|
#error "BOARD_XTAL_FREQUENCY is required for HC32F460."
|
||||||
@@ -58,11 +72,9 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if TEMP_SENSOR_SOC
|
#if TEMP_SENSOR_SOC
|
||||||
#if !defined(TEMP_SOC_PIN)
|
#ifndef TEMP_SOC_PIN
|
||||||
#error "TEMP_SOC_PIN must be defined to use TEMP_SENSOR_SOC."
|
#error "TEMP_SOC_PIN must be defined to use TEMP_SENSOR_SOC."
|
||||||
#endif
|
#elif IS_GPIO_PIN(TEMP_SOC_PIN)
|
||||||
|
|
||||||
#if defined(TEMP_SOC_PIN) && IS_GPIO_PIN(TEMP_SOC_PIN)
|
|
||||||
#error "TEMP_SOC_PIN must not be a valid GPIO pin to avoid conflicts."
|
#error "TEMP_SOC_PIN must not be a valid GPIO pin to avoid conflicts."
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
@@ -76,3 +88,18 @@
|
|||||||
#error "HC32 HAL uses a custom panic handler. Do not define PANIC_USARTx_TX_PIN."
|
#error "HC32 HAL uses a custom panic handler. Do not define PANIC_USARTx_TX_PIN."
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if ENABLED(SERIAL_DMA)
|
||||||
|
#if !defined(USART_RX_DMA_SUPPORT)
|
||||||
|
#error "SERIAL_DMA requires USART_RX_DMA_SUPPORT to be enabled in the arduino core."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// USART_RX_DMA_SUPPORT does not implement core_hook_usart_rx_irq, which is required for the emergency parser
|
||||||
|
#if ENABLED(EMERGENCY_PARSER)
|
||||||
|
#error "EMERGENCY_PARSER is not supported with SERIAL_DMA. Please disable either SERIAL_DMA or EMERGENCY_PARSER."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if ARDUINO_CORE_VERSION_INT < GET_VERSION_INT(1, 1, 0)
|
||||||
|
#error "SERIAL_DMA is not supported with arduino core version < 1.1.0."
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
#ifdef ARDUINO_ARCH_HC32
|
#ifdef ARDUINO_ARCH_HC32
|
||||||
#ifdef REDIRECT_PRINTF_TO_SERIAL
|
#ifdef REDIRECT_PRINTF_TO_SERIAL
|
||||||
|
|
||||||
#if !defined(__GNUC__)
|
#ifndef __GNUC__
|
||||||
#error "only GCC is supported"
|
#error "only GCC is supported"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -54,7 +54,7 @@
|
|||||||
fn \
|
fn \
|
||||||
}
|
}
|
||||||
|
|
||||||
stc_sd_handle_t *handle;
|
stc_sd_handle_t *handle = nullptr;
|
||||||
|
|
||||||
bool SDIO_Init() {
|
bool SDIO_Init() {
|
||||||
// Configure SDIO pins
|
// Configure SDIO pins
|
||||||
@@ -66,36 +66,45 @@ bool SDIO_Init() {
|
|||||||
GPIO_SetFunc(BOARD_SDIO_CMD, Func_Sdio);
|
GPIO_SetFunc(BOARD_SDIO_CMD, Func_Sdio);
|
||||||
GPIO_SetFunc(BOARD_SDIO_DET, Func_Sdio);
|
GPIO_SetFunc(BOARD_SDIO_DET, Func_Sdio);
|
||||||
|
|
||||||
|
// If a handle is already initialized, free it before creating a new one
|
||||||
|
// otherwise, we will leak memory, which will eventually crash the system
|
||||||
|
if (handle != nullptr) {
|
||||||
|
delete handle->pstcDmaInitCfg;
|
||||||
|
delete handle->pstcCardInitCfg;
|
||||||
|
delete handle;
|
||||||
|
handle = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
// Create DMA configuration
|
// Create DMA configuration
|
||||||
stc_sdcard_dma_init_t *dmaConf = new stc_sdcard_dma_init_t;
|
stc_sdcard_dma_init_t *dmaConf = new stc_sdcard_dma_init_t;
|
||||||
dmaConf->DMAx = SDIO_DMA_PERIPHERAL;
|
dmaConf->DMAx = SDIO_DMA_PERIPHERAL;
|
||||||
dmaConf->enDmaCh = SDIO_DMA_CHANNEL;
|
dmaConf->enDmaCh = SDIO_DMA_CHANNEL;
|
||||||
|
|
||||||
|
// Create card configuration
|
||||||
|
// This should be a fairly safe configuration for most cards
|
||||||
|
stc_sdcard_init_t *cardConf = new stc_sdcard_init_t;
|
||||||
|
cardConf->enBusWidth = SdiocBusWidth4Bit;
|
||||||
|
cardConf->enClkFreq = SdiocClk400K;
|
||||||
|
cardConf->enSpeedMode = SdiocNormalSpeedMode;
|
||||||
|
cardConf->pstcInitCfg = nullptr;
|
||||||
|
|
||||||
// Create handle in DMA mode
|
// Create handle in DMA mode
|
||||||
handle = new stc_sd_handle_t;
|
handle = new stc_sd_handle_t;
|
||||||
handle->SDIOCx = SDIO_PERIPHERAL;
|
handle->SDIOCx = SDIO_PERIPHERAL;
|
||||||
handle->enDevMode = SdCardDmaMode;
|
handle->enDevMode = SdCardDmaMode;
|
||||||
handle->pstcDmaInitCfg = dmaConf;
|
handle->pstcDmaInitCfg = dmaConf;
|
||||||
|
//handle->pstcCardInitCfg = cardConf; // assigned in SDCARD_Init
|
||||||
// Create card configuration
|
|
||||||
// This should be a fairly safe configuration for most cards
|
|
||||||
stc_sdcard_init_t cardConf = {
|
|
||||||
.enBusWidth = SdiocBusWidth4Bit,
|
|
||||||
.enClkFreq = SdiocClk400K,
|
|
||||||
.enSpeedMode = SdiocNormalSpeedMode,
|
|
||||||
//.pstcInitCfg = NULL,
|
|
||||||
};
|
|
||||||
|
|
||||||
// Initialize sd card
|
// Initialize sd card
|
||||||
en_result_t rc = SDCARD_Init(handle, &cardConf);
|
en_result_t rc = SDCARD_Init(handle, cardConf);
|
||||||
if (rc != Ok) printf("SDIO_Init() error (rc=%u)\n", rc);
|
if (rc != Ok) printf("SDIO_Init() error (rc=%u)\n", rc);
|
||||||
|
|
||||||
return rc == Ok;
|
return rc == Ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SDIO_ReadBlock(uint32_t block, uint8_t *dst) {
|
bool SDIO_ReadBlock(uint32_t block, uint8_t *dst) {
|
||||||
CORE_ASSERT(handle != NULL, "SDIO not initialized");
|
CORE_ASSERT(handle != nullptr, "SDIO not initialized", return false);
|
||||||
CORE_ASSERT(dst != NULL, "SDIO_ReadBlock dst is NULL");
|
CORE_ASSERT(dst != nullptr, "SDIO_ReadBlock dst is NULL", return false);
|
||||||
|
|
||||||
WITH_RETRY(SDIO_READ_RETRIES, {
|
WITH_RETRY(SDIO_READ_RETRIES, {
|
||||||
en_result_t rc = SDCARD_ReadBlocks(handle, block, 1, dst, SDIO_READ_TIMEOUT);
|
en_result_t rc = SDCARD_ReadBlocks(handle, block, 1, dst, SDIO_READ_TIMEOUT);
|
||||||
@@ -107,8 +116,8 @@ bool SDIO_ReadBlock(uint32_t block, uint8_t *dst) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool SDIO_WriteBlock(uint32_t block, const uint8_t *src) {
|
bool SDIO_WriteBlock(uint32_t block, const uint8_t *src) {
|
||||||
CORE_ASSERT(handle != NULL, "SDIO not initialized");
|
CORE_ASSERT(handle != nullptr, "SDIO not initialized", return false);
|
||||||
CORE_ASSERT(src != NULL, "SDIO_WriteBlock src is NULL");
|
CORE_ASSERT(src != nullptr, "SDIO_WriteBlock src is NULL", return false);
|
||||||
|
|
||||||
WITH_RETRY(SDIO_WRITE_RETRIES, {
|
WITH_RETRY(SDIO_WRITE_RETRIES, {
|
||||||
en_result_t rc = SDCARD_WriteBlocks(handle, block, 1, (uint8_t *)src, SDIO_WRITE_TIMEOUT);
|
en_result_t rc = SDCARD_WriteBlocks(handle, block, 1, (uint8_t *)src, SDIO_WRITE_TIMEOUT);
|
||||||
@@ -120,12 +129,12 @@ bool SDIO_WriteBlock(uint32_t block, const uint8_t *src) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool SDIO_IsReady() {
|
bool SDIO_IsReady() {
|
||||||
CORE_ASSERT(handle != NULL, "SDIO not initialized");
|
CORE_ASSERT(handle != nullptr, "SDIO not initialized", return false);
|
||||||
return bool(handle->stcCardStatus.READY_FOR_DATA);
|
return bool(handle->stcCardStatus.READY_FOR_DATA);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t SDIO_GetCardSize() {
|
uint32_t SDIO_GetCardSize() {
|
||||||
CORE_ASSERT(handle != NULL, "SDIO not initialized");
|
CORE_ASSERT(handle != nullptr, "SDIO not initialized", return 0);
|
||||||
|
|
||||||
// Multiply number of blocks with block size to get size in bytes
|
// Multiply number of blocks with block size to get size in bytes
|
||||||
const uint64_t cardSizeBytes = uint64_t(handle->stcSdCardInfo.u32LogBlockNbr) * uint64_t(handle->stcSdCardInfo.u32LogBlockSize);
|
const uint64_t cardSizeBytes = uint64_t(handle->stcSdCardInfo.u32LogBlockNbr) * uint64_t(handle->stcSdCardInfo.u32LogBlockSize);
|
||||||
|
|||||||
@@ -35,7 +35,7 @@
|
|||||||
uint8_t buffer[MARLIN_EEPROM_SIZE];
|
uint8_t buffer[MARLIN_EEPROM_SIZE];
|
||||||
char filename[] = "eeprom.dat";
|
char filename[] = "eeprom.dat";
|
||||||
|
|
||||||
size_t PersistentStore::capacity() { return MARLIN_EEPROM_SIZE; }
|
size_t PersistentStore::capacity() { return MARLIN_EEPROM_SIZE - eeprom_exclude_size; }
|
||||||
|
|
||||||
bool PersistentStore::access_start() {
|
bool PersistentStore::access_start() {
|
||||||
const char eeprom_erase_value = 0xFF;
|
const char eeprom_erase_value = 0xFF;
|
||||||
|
|||||||
@@ -37,7 +37,10 @@ Timer::Timer() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Timer::~Timer() {
|
Timer::~Timer() {
|
||||||
timer_delete(timerid);
|
if (timerid != 0) {
|
||||||
|
timer_delete(timerid);
|
||||||
|
timerid = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Timer::init(uint32_t sig_id, uint32_t sim_freq, callback_fn* fn) {
|
void Timer::init(uint32_t sig_id, uint32_t sim_freq, callback_fn* fn) {
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -21,6 +21,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef __PLAT_LINUX__
|
#ifdef __PLAT_LINUX__
|
||||||
|
#ifndef UNIT_TEST
|
||||||
|
|
||||||
//#define GPIO_LOGGING // Full GPIO and Positional Logging
|
//#define GPIO_LOGGING // Full GPIO and Positional Logging
|
||||||
|
|
||||||
@@ -135,4 +136,5 @@ int main() {
|
|||||||
read_serial.join();
|
read_serial.join();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif // UNIT_TEST
|
||||||
#endif // __PLAT_LINUX__
|
#endif // __PLAT_LINUX__
|
||||||
|
|||||||
@@ -60,7 +60,6 @@
|
|||||||
|
|
||||||
#define INVALID_SERVO 255 // flag indicating an invalid servo index
|
#define INVALID_SERVO 255 // flag indicating an invalid servo index
|
||||||
|
|
||||||
|
|
||||||
// Types
|
// Types
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|||||||
@@ -21,9 +21,6 @@
|
|||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "../../core/macros.h"
|
|
||||||
#include "../../inc/MarlinConfigPre.h"
|
|
||||||
|
|
||||||
#if ALL(HAS_MARLINUI_U8GLIB, HAS_MEDIA) && (LCD_PINS_D4 == SD_SCK_PIN || LCD_PINS_EN == SD_MOSI_PIN || DOGLCD_SCK == SD_SCK_PIN || DOGLCD_MOSI == SD_MOSI_PIN)
|
#if ALL(HAS_MARLINUI_U8GLIB, HAS_MEDIA) && (LCD_PINS_D4 == SD_SCK_PIN || LCD_PINS_EN == SD_MOSI_PIN || DOGLCD_SCK == SD_SCK_PIN || DOGLCD_MOSI == SD_MOSI_PIN)
|
||||||
#define SOFTWARE_SPI // If the SD card and LCD adapter share the same SPI pins, then software SPI is currently
|
#define SOFTWARE_SPI // If the SD card and LCD adapter share the same SPI pins, then software SPI is currently
|
||||||
// needed due to the speed and mode required for communicating with each device being different.
|
// needed due to the speed and mode required for communicating with each device being different.
|
||||||
|
|||||||
@@ -111,6 +111,12 @@ void MarlinHAL::init() {
|
|||||||
#if HAS_SERVO_3
|
#if HAS_SERVO_3
|
||||||
INIT_SERVO(3);
|
INIT_SERVO(3);
|
||||||
#endif
|
#endif
|
||||||
|
#if HAS_SERVO_4
|
||||||
|
INIT_SERVO(4);
|
||||||
|
#endif
|
||||||
|
#if HAS_SERVO_5
|
||||||
|
INIT_SERVO(5);
|
||||||
|
#endif
|
||||||
|
|
||||||
//debug_frmwrk_init();
|
//debug_frmwrk_init();
|
||||||
//_DBG("\n\nDebug running\n");
|
//_DBG("\n\nDebug running\n");
|
||||||
|
|||||||
@@ -100,7 +100,7 @@ extern DefaultSerial1 USBSerial;
|
|||||||
#else
|
#else
|
||||||
#error "LCD_SERIAL_PORT must be from 0 to 3. You can also use -1 if the board supports Native USB."
|
#error "LCD_SERIAL_PORT must be from 0 to 3. You can also use -1 if the board supports Native USB."
|
||||||
#endif
|
#endif
|
||||||
#if HAS_DGUS_LCD
|
#if HAS_DGUS_LCD || ENABLED(DWINOS_4)
|
||||||
#define LCD_SERIAL_TX_BUFFER_FREE() LCD_SERIAL.available()
|
#define LCD_SERIAL_TX_BUFFER_FREE() LCD_SERIAL.available()
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ static uint8_t ram_eeprom[MARLIN_EEPROM_SIZE] __attribute__((aligned(4))) = {0};
|
|||||||
static bool eeprom_dirty = false;
|
static bool eeprom_dirty = false;
|
||||||
static int current_slot = 0;
|
static int current_slot = 0;
|
||||||
|
|
||||||
size_t PersistentStore::capacity() { return MARLIN_EEPROM_SIZE; }
|
size_t PersistentStore::capacity() { return MARLIN_EEPROM_SIZE - eeprom_exclude_size; }
|
||||||
|
|
||||||
bool PersistentStore::access_start() {
|
bool PersistentStore::access_start() {
|
||||||
uint32_t first_nblank_loc, first_nblank_val;
|
uint32_t first_nblank_loc, first_nblank_val;
|
||||||
@@ -112,7 +112,8 @@ bool PersistentStore::access_finish() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
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) {
|
||||||
for (size_t i = 0; i < size; i++) ram_eeprom[pos + i] = value[i];
|
const int p = REAL_EEPROM_ADDR(pos);
|
||||||
|
for (size_t i = 0; i < size; i++) ram_eeprom[p + i] = value[i];
|
||||||
eeprom_dirty = true;
|
eeprom_dirty = true;
|
||||||
crc16(crc, value, size);
|
crc16(crc, value, size);
|
||||||
pos += size;
|
pos += size;
|
||||||
@@ -120,8 +121,9 @@ 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*/) {
|
||||||
|
const int p = REAL_EEPROM_ADDR(pos);
|
||||||
const uint8_t * const buff = writing ? &value[0] : &ram_eeprom[pos];
|
const uint8_t * const buff = writing ? &value[0] : &ram_eeprom[pos];
|
||||||
if (writing) for (size_t i = 0; i < size; i++) value[i] = ram_eeprom[pos + i];
|
if (writing) for (size_t i = 0; i < size; i++) value[i] = ram_eeprom[p + i];
|
||||||
crc16(crc, buff, size);
|
crc16(crc, buff, size);
|
||||||
pos += size;
|
pos += size;
|
||||||
return false; // return true for any error
|
return false; // return true for any error
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ bool eeprom_file_open = false;
|
|||||||
#define MARLIN_EEPROM_SIZE size_t(0x1000) // 4KiB of Emulated EEPROM
|
#define MARLIN_EEPROM_SIZE size_t(0x1000) // 4KiB of Emulated EEPROM
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
size_t PersistentStore::capacity() { return MARLIN_EEPROM_SIZE; }
|
size_t PersistentStore::capacity() { return MARLIN_EEPROM_SIZE - eeprom_exclude_size; }
|
||||||
|
|
||||||
bool PersistentStore::access_start() {
|
bool PersistentStore::access_start() {
|
||||||
const char eeprom_erase_value = 0xFF;
|
const char eeprom_erase_value = 0xFF;
|
||||||
|
|||||||
@@ -36,7 +36,7 @@
|
|||||||
#ifndef MARLIN_EEPROM_SIZE
|
#ifndef MARLIN_EEPROM_SIZE
|
||||||
#define MARLIN_EEPROM_SIZE 0x8000 // 32K
|
#define MARLIN_EEPROM_SIZE 0x8000 // 32K
|
||||||
#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; }
|
||||||
@@ -45,7 +45,7 @@ bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, ui
|
|||||||
uint16_t written = 0;
|
uint16_t written = 0;
|
||||||
while (size--) {
|
while (size--) {
|
||||||
uint8_t v = *value;
|
uint8_t v = *value;
|
||||||
uint8_t * const p = (uint8_t * const)pos;
|
uint8_t * const p = (uint8_t * const)REAL_EEPROM_ADDR(pos);
|
||||||
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);
|
||||||
if (++written & 0x7F) delay(2); else safe_delay(2); // Avoid triggering watchdog during long EEPROM writes
|
if (++written & 0x7F) delay(2); else safe_delay(2); // Avoid triggering watchdog during long EEPROM writes
|
||||||
@@ -64,7 +64,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 {
|
||||||
// Read from external EEPROM
|
// Read from external EEPROM
|
||||||
const 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++;
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -21,9 +21,7 @@
|
|||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "../../core/macros.h"
|
#if ALL(HAS_MARLINUI_U8GLIB, HAS_MEDIA) && (LCD_PINS_D4 == SD_SCK_PIN || LCD_PINS_EN == SD_MOSI_PIN || DOGLCD_SCK == SD_SCK_PIN || DOGLCD_MOSI == SD_MOSI_PIN)
|
||||||
|
|
||||||
#if ALL(HAS_MEDIA, HAS_MARLINUI_U8GLIB) && (LCD_PINS_D4 == SD_SCK_PIN || LCD_PINS_EN == SD_MOSI_PIN || DOGLCD_SCK == SD_SCK_PIN || DOGLCD_MOSI == SD_MOSI_PIN)
|
|
||||||
#define SOFTWARE_SPI // If the SD card and LCD adapter share the same SPI pins, then software SPI is currently
|
#define SOFTWARE_SPI // If the SD card and LCD adapter share the same SPI pins, then software SPI is currently
|
||||||
// needed due to the speed and mode required for communicating with each device being different.
|
// needed due to the speed and mode required for communicating with each device being different.
|
||||||
// This requirement can be removed if the SPI access to these devices is updated to use
|
// This requirement can be removed if the SPI access to these devices is updated to use
|
||||||
|
|||||||
@@ -8,14 +8,12 @@ DriverVer =04/14/2008, 5.1.2600.5512
|
|||||||
[Manufacturer]
|
[Manufacturer]
|
||||||
%PROVIDER%=DeviceList,ntamd64
|
%PROVIDER%=DeviceList,ntamd64
|
||||||
|
|
||||||
|
|
||||||
[DeviceList]
|
[DeviceList]
|
||||||
%DESCRIPTION%=LPC1768USB, USB\VID_1D50&PID_6029&MI_00
|
%DESCRIPTION%=LPC1768USB, USB\VID_1D50&PID_6029&MI_00
|
||||||
|
|
||||||
[DeviceList.ntamd64]
|
[DeviceList.ntamd64]
|
||||||
%DESCRIPTION%=LPC1768USB, USB\VID_1D50&PID_6029&MI_00
|
%DESCRIPTION%=LPC1768USB, USB\VID_1D50&PID_6029&MI_00
|
||||||
|
|
||||||
|
|
||||||
[LPC1768USB]
|
[LPC1768USB]
|
||||||
include=mdmcpq.inf
|
include=mdmcpq.inf
|
||||||
CopyFiles=FakeModemCopyFileSection
|
CopyFiles=FakeModemCopyFileSection
|
||||||
@@ -28,7 +26,6 @@ AddService=usbser, 0x00000002, LowerFilter_Service_Inst
|
|||||||
[SerialPropPageAddReg]
|
[SerialPropPageAddReg]
|
||||||
HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider"
|
HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider"
|
||||||
|
|
||||||
|
|
||||||
[Strings]
|
[Strings]
|
||||||
PROVIDER = "marlinfw.org"
|
PROVIDER = "marlinfw.org"
|
||||||
DRIVER.SVC = "Marlin USB Driver"
|
DRIVER.SVC = "Marlin USB Driver"
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -61,7 +61,6 @@
|
|||||||
|
|
||||||
#define INVALID_SERVO 255 // flag indicating an invalid servo index
|
#define INVALID_SERVO 255 // flag indicating an invalid servo index
|
||||||
|
|
||||||
|
|
||||||
// Types
|
// Types
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|||||||
@@ -21,9 +21,6 @@
|
|||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "../../core/macros.h"
|
|
||||||
#include "../../inc/MarlinConfigPre.h"
|
|
||||||
|
|
||||||
#if ALL(HAS_MARLINUI_U8GLIB, HAS_MEDIA) && (LCD_PINS_D4 == SD_SCK_PIN || LCD_PINS_EN == SD_MOSI_PIN || DOGLCD_SCK == SD_SCK_PIN || DOGLCD_MOSI == SD_MOSI_PIN)
|
#if ALL(HAS_MARLINUI_U8GLIB, HAS_MEDIA) && (LCD_PINS_D4 == SD_SCK_PIN || LCD_PINS_EN == SD_MOSI_PIN || DOGLCD_SCK == SD_SCK_PIN || DOGLCD_MOSI == SD_MOSI_PIN)
|
||||||
#define SOFTWARE_SPI // If the SD card and LCD adapter share the same SPI pins, then software SPI is currently
|
#define SOFTWARE_SPI // If the SD card and LCD adapter share the same SPI pins, then software SPI is currently
|
||||||
// needed due to the speed and mode required for communicating with each device being different.
|
// needed due to the speed and mode required for communicating with each device being different.
|
||||||
|
|||||||
@@ -31,7 +31,6 @@
|
|||||||
* resulted in using about about 25% of the CPU's time.
|
* resulted in using about about 25% of the CPU's time.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -40,8 +40,6 @@
|
|||||||
DefaultSerial3 MSerial2(false, Serial2);
|
DefaultSerial3 MSerial2(false, Serial2);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define WDT_CONFIG_PER_7_Val 0x9u
|
#define WDT_CONFIG_PER_7_Val 0x9u
|
||||||
#define WDT_CONFIG_PER_Pos 0
|
#define WDT_CONFIG_PER_Pos 0
|
||||||
#define WDT_CONFIG_PER_7 (WDT_CONFIG_PER_7_Val << WDT_CONFIG_PER_Pos)
|
#define WDT_CONFIG_PER_7 (WDT_CONFIG_PER_7_Val << WDT_CONFIG_PER_Pos)
|
||||||
@@ -165,7 +163,6 @@ void MarlinHAL::adc_init() {
|
|||||||
ADC->REFCTRL.reg = ADC_REFCTRL_REFSEL_INTVCC1;
|
ADC->REFCTRL.reg = ADC_REFCTRL_REFSEL_INTVCC1;
|
||||||
ADC->AVGCTRL.reg = ADC_AVGCTRL_SAMPLENUM_32| ADC_AVGCTRL_ADJRES(4);;
|
ADC->AVGCTRL.reg = ADC_AVGCTRL_SAMPLENUM_32| ADC_AVGCTRL_ADJRES(4);;
|
||||||
|
|
||||||
|
|
||||||
ADC->CTRLB.reg = ADC_CTRLB_PRESCALER_DIV128 |
|
ADC->CTRLB.reg = ADC_CTRLB_PRESCALER_DIV128 |
|
||||||
ADC_CTRLB_RESSEL_16BIT |
|
ADC_CTRLB_RESSEL_16BIT |
|
||||||
ADC_CTRLB_FREERUN;
|
ADC_CTRLB_FREERUN;
|
||||||
|
|||||||
@@ -47,7 +47,6 @@ typedef ForwardSerial1Class< decltype(Serial2) > DefaultSerial3;
|
|||||||
extern DefaultSerial2 MSerial0;
|
extern DefaultSerial2 MSerial0;
|
||||||
extern DefaultSerial3 MSerial1;
|
extern DefaultSerial3 MSerial1;
|
||||||
|
|
||||||
|
|
||||||
#define __MSERIAL(X) MSerial##X
|
#define __MSERIAL(X) MSerial##X
|
||||||
#define _MSERIAL(X) __MSERIAL(X)
|
#define _MSERIAL(X) __MSERIAL(X)
|
||||||
#define MSERIAL(X) _MSERIAL(INCREMENT(X))
|
#define MSERIAL(X) _MSERIAL(INCREMENT(X))
|
||||||
|
|||||||
@@ -57,8 +57,6 @@
|
|||||||
: (P == 3 && WITHIN(B, 20, 21)) ? 10 + (B) - 20 \
|
: (P == 3 && WITHIN(B, 20, 21)) ? 10 + (B) - 20 \
|
||||||
: -1)
|
: -1)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define A2_AIN 3
|
#define A2_AIN 3
|
||||||
#define A3_AIN 4
|
#define A3_AIN 4
|
||||||
#define A4_AIN 5
|
#define A4_AIN 5
|
||||||
|
|||||||
@@ -55,7 +55,6 @@
|
|||||||
#define TIMER_TCCHANNEL(t) ((t) & 1)
|
#define TIMER_TCCHANNEL(t) ((t) & 1)
|
||||||
#define TC_COUNTER_START_VAL 0xFFFF
|
#define TC_COUNTER_START_VAL 0xFFFF
|
||||||
|
|
||||||
|
|
||||||
static volatile int8_t currentServoIndex[_Nbr_16timers]; // index for the servo being pulsed for each timer (or -1 if refresh interval)
|
static volatile int8_t currentServoIndex[_Nbr_16timers]; // index for the servo being pulsed for each timer (or -1 if refresh interval)
|
||||||
|
|
||||||
FORCE_INLINE static uint16_t getTimerCount() {
|
FORCE_INLINE static uint16_t getTimerCount() {
|
||||||
|
|||||||
@@ -37,19 +37,24 @@ static const uint8_t flashdata[TOTAL_FLASH_SIZE] __attribute__((__aligned__(256
|
|||||||
|
|
||||||
#include "../shared/eeprom_api.h"
|
#include "../shared/eeprom_api.h"
|
||||||
|
|
||||||
size_t PersistentStore::capacity() {
|
size_t PersistentStore::capacity() { return MARLIN_EEPROM_SIZE - eeprom_exclude_size; }
|
||||||
return MARLIN_EEPROM_SIZE;
|
|
||||||
/* const uint8_t psz = NVMCTRL->SEESTAT.bit.PSZ,
|
/*
|
||||||
|
size_t PersistentStore::capacity() { return MARLIN_EEPROM_SIZE - eeprom_exclude_size; }
|
||||||
|
const uint8_t psz = NVMCTRL->SEESTAT.bit.PSZ,
|
||||||
sblk = NVMCTRL->SEESTAT.bit.SBLK;
|
sblk = NVMCTRL->SEESTAT.bit.SBLK;
|
||||||
|
|
||||||
return (!psz && !sblk) ? 0
|
return (
|
||||||
: (psz <= 2) ? (0x200 << psz)
|
(!psz && !sblk) ? 0
|
||||||
: (sblk == 1 || psz == 3) ? 4096
|
: (psz <= 2) ? (0x200 << psz)
|
||||||
: (sblk == 2 || psz == 4) ? 8192
|
: (sblk == 1 || psz == 3) ? 4096
|
||||||
: (sblk <= 4 || psz == 5) ? 16384
|
: (sblk == 2 || psz == 4) ? 8192
|
||||||
: (sblk >= 9 && psz == 7) ? 65536
|
: (sblk <= 4 || psz == 5) ? 16384
|
||||||
: 32768;*/
|
: (sblk >= 9 && psz == 7) ? 65536
|
||||||
|
: 32768
|
||||||
|
) - eeprom_exclude_size;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
uint32_t PAGE_SIZE;
|
uint32_t PAGE_SIZE;
|
||||||
uint32_t ROW_SIZE;
|
uint32_t ROW_SIZE;
|
||||||
@@ -99,8 +104,7 @@ bool PersistentStore::access_finish() {
|
|||||||
volatile uint32_t *dst_addr = (volatile uint32_t *) &flashdata;
|
volatile uint32_t *dst_addr = (volatile uint32_t *) &flashdata;
|
||||||
|
|
||||||
uint32_t *pointer = (uint32_t *) buffer;
|
uint32_t *pointer = (uint32_t *) buffer;
|
||||||
for (uint32_t i = 0; i < TOTAL_FLASH_SIZE; i+=4) {
|
for (uint32_t i = 0; i < TOTAL_FLASH_SIZE; i += 4) {
|
||||||
|
|
||||||
*dst_addr = (uint32_t) *pointer;
|
*dst_addr = (uint32_t) *pointer;
|
||||||
pointer++;
|
pointer++;
|
||||||
dst_addr ++;
|
dst_addr ++;
|
||||||
@@ -120,19 +124,19 @@ bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, ui
|
|||||||
if (!hasWritten) {
|
if (!hasWritten) {
|
||||||
// init temp buffer
|
// init temp buffer
|
||||||
buffer = (uint8_t *) malloc(MARLIN_EEPROM_SIZE);
|
buffer = (uint8_t *) malloc(MARLIN_EEPROM_SIZE);
|
||||||
hasWritten=true;
|
hasWritten = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy(buffer+pos,value,size);
|
memcpy(buffer + REAL_EEPROM_ADDR(pos), value, size);
|
||||||
pos += size;
|
pos += size;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
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*/) {
|
||||||
volatile uint8_t *dst_addr = (volatile uint8_t *) &flashdata;
|
volatile uint8_t *dst_addr = (volatile uint8_t *) &flashdata;
|
||||||
dst_addr += pos;
|
dst_addr += REAL_EEPROM_ADDR(pos);
|
||||||
|
|
||||||
memcpy(value,(const void *) dst_addr,size);
|
memcpy(value, (const void *)dst_addr, size);
|
||||||
pos += size;
|
pos += size;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,7 +38,7 @@
|
|||||||
|
|
||||||
static bool initialized;
|
static bool initialized;
|
||||||
|
|
||||||
size_t PersistentStore::capacity() { return qspi.size(); }
|
size_t PersistentStore::capacity() { return qspi.size() - eeprom_exclude_size; }
|
||||||
|
|
||||||
bool PersistentStore::access_start() {
|
bool PersistentStore::access_start() {
|
||||||
if (!initialized) {
|
if (!initialized) {
|
||||||
@@ -56,7 +56,7 @@ bool PersistentStore::access_finish() {
|
|||||||
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) {
|
||||||
while (size--) {
|
while (size--) {
|
||||||
const uint8_t v = *value;
|
const uint8_t v = *value;
|
||||||
qspi.writeByte(pos, v);
|
qspi.writeByte(REAL_EEPROM_ADDR(pos), v);
|
||||||
crc16(crc, &v, 1);
|
crc16(crc, &v, 1);
|
||||||
pos++;
|
pos++;
|
||||||
value++;
|
value++;
|
||||||
@@ -66,7 +66,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*/) {
|
||||||
while (size--) {
|
while (size--) {
|
||||||
uint8_t c = qspi.readByte(pos);
|
const uint8_t c = qspi.readByte(REAL_EEPROM_ADDR(pos));
|
||||||
if (writing) *value = c;
|
if (writing) *value = c;
|
||||||
crc16(crc, &c, 1);
|
crc16(crc, &c, 1);
|
||||||
pos++;
|
pos++;
|
||||||
|
|||||||
@@ -42,7 +42,7 @@
|
|||||||
#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; }
|
||||||
@@ -51,7 +51,7 @@ bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, ui
|
|||||||
uint16_t written = 0;
|
uint16_t written = 0;
|
||||||
while (size--) {
|
while (size--) {
|
||||||
const uint8_t v = *value;
|
const uint8_t v = *value;
|
||||||
uint8_t * const p = (uint8_t * const)pos;
|
uint8_t * const p = (uint8_t * const)REAL_EEPROM_ADDR(pos);
|
||||||
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);
|
||||||
if (++written & 0x7F) delay(2); else safe_delay(2); // Avoid triggering watchdog during long EEPROM writes
|
if (++written & 0x7F) delay(2); else safe_delay(2); // Avoid triggering watchdog during long EEPROM writes
|
||||||
@@ -69,7 +69,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*/) {
|
||||||
while (size--) {
|
while (size--) {
|
||||||
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++;
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user