Update rust, stm32-eth, hal, smoltcp versions

master
linuswck 2024-03-22 17:44:06 +08:00
parent f8abfd4300
commit af68b0e90a
13 changed files with 249 additions and 144 deletions

205
Cargo.lock generated
View File

@ -177,9 +177,9 @@ checksum = "7059fff8937831a9ae6f0fe4d658ffabf58f2ca96aa9dec1c889f936f705f216"
[[package]] [[package]]
name = "defmt" name = "defmt"
version = "0.3.5" version = "0.3.6"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a8a2d011b2fee29fb7d659b83c43fce9a2cb4df453e16d441a51448e448f3f98" checksum = "3939552907426de152b3c2c6f51ed53f98f448babd26f28694c95f5906194595"
dependencies = [ dependencies = [
"bitflags", "bitflags",
"defmt-macros", "defmt-macros",
@ -187,35 +187,44 @@ dependencies = [
[[package]] [[package]]
name = "defmt-macros" name = "defmt-macros"
version = "0.3.6" version = "0.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "54f0216f6c5acb5ae1a47050a6645024e6edafc2ee32d421955eccfef12ef92e" checksum = "18bdc7a7b92ac413e19e95240e75d3a73a8d8e78aa24a594c22cbb4d44b4bbda"
dependencies = [ dependencies = [
"defmt-parser", "defmt-parser",
"proc-macro-error", "proc-macro-error",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.48", "syn 2.0.53",
] ]
[[package]] [[package]]
name = "defmt-parser" name = "defmt-parser"
version = "0.3.3" version = "0.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "269924c02afd7f94bc4cecbfa5c379f6ffcf9766b3408fe63d22c728654eccd0" checksum = "ff4a5fefe330e8d7f31b16a318f9ce81000d8e35e69b93eae154d16d2278f70f"
dependencies = [ dependencies = [
"thiserror", "thiserror",
] ]
[[package]] [[package]]
name = "deranged" name = "deranged"
version = "0.3.10" version = "0.3.11"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8eb30d70a07a3b04884d2677f06bec33509dc67ca60d92949e5535352d3191dc" checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4"
dependencies = [ dependencies = [
"powerfmt", "powerfmt",
] ]
[[package]]
name = "document-features"
version = "0.2.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ef5282ad69563b5fc40319526ba27e0e7363d552a896f0297d54f767717f9b95"
dependencies = [
"litrs",
]
[[package]] [[package]]
name = "embedded-dma" name = "embedded-dma"
version = "0.2.0" version = "0.2.0"
@ -237,10 +246,17 @@ dependencies = [
[[package]] [[package]]
name = "embedded-hal" name = "embedded-hal"
version = "1.0.0-alpha.8" version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c3babfc7fd332142a0b11aebf592992f211f4e01b6222fb04b03aba1bd80018d" checksum = "361a90feb7004eca4019fb28352a9465666b24f840f5c3cddf0ff13920590b89"
[[package]]
name = "embedded-hal-nb"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fba4268c14288c828995299e59b12babdbe170f6c6d73731af1b4648142e8605"
dependencies = [ dependencies = [
"embedded-hal 1.0.0",
"nb 1.1.0", "nb 1.1.0",
] ]
@ -263,9 +279,9 @@ dependencies = [
[[package]] [[package]]
name = "embedded-storage" name = "embedded-storage"
version = "0.2.0" version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "723dce4e9f25b6e6c5f35628e144794e5b459216ed7da97b7c4b66cdb3fa82ca" checksum = "a21dea9854beb860f3062d10228ce9b976da520a73474aed3171ec276bc0c032"
[[package]] [[package]]
name = "embedded-time" name = "embedded-time"
@ -276,6 +292,26 @@ dependencies = [
"num", "num",
] ]
[[package]]
name = "enumflags2"
version = "0.7.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3278c9d5fb675e0a51dabcf4c0d355f692b064171535ba72361be1528a9d8e8d"
dependencies = [
"enumflags2_derive",
]
[[package]]
name = "enumflags2_derive"
version = "0.7.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c785274071b1b420972453b306eeca06acf4633829db4223b58a2a8c5953bc4"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.53",
]
[[package]] [[package]]
name = "fugit" name = "fugit"
version = "0.3.7" version = "0.3.7"
@ -347,6 +383,15 @@ dependencies = [
"byteorder", "byteorder",
] ]
[[package]]
name = "hash32"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606"
dependencies = [
"byteorder",
]
[[package]] [[package]]
name = "heapless" name = "heapless"
version = "0.5.6" version = "0.5.6"
@ -374,6 +419,16 @@ dependencies = [
"stable_deref_trait", "stable_deref_trait",
] ]
[[package]]
name = "heapless"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad"
dependencies = [
"hash32 0.3.1",
"stable_deref_trait",
]
[[package]] [[package]]
name = "ieee802_3_miim" name = "ieee802_3_miim"
version = "0.8.0" version = "0.8.0"
@ -425,6 +480,12 @@ version = "0.2.8"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058"
[[package]]
name = "litrs"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b4ce301924b7887e9d637144fdade93f9dfff9b60981d4ac161db09720d39aa5"
[[package]] [[package]]
name = "lock_api" name = "lock_api"
version = "0.4.11" version = "0.4.11"
@ -437,9 +498,9 @@ dependencies = [
[[package]] [[package]]
name = "log" name = "log"
version = "0.4.20" version = "0.4.21"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c"
[[package]] [[package]]
name = "managed" name = "managed"
@ -472,7 +533,7 @@ checksum = "89f46d25f40e41f552d76b8eb9e225fe493ebf978a5c3f42b7599e45cfe6b4e3"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.48", "syn 2.0.53",
] ]
[[package]] [[package]]
@ -535,20 +596,25 @@ dependencies = [
] ]
[[package]] [[package]]
name = "num-integer" name = "num-conv"
version = "0.1.45" version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9"
[[package]]
name = "num-integer"
version = "0.1.46"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f"
dependencies = [ dependencies = [
"autocfg",
"num-traits", "num-traits",
] ]
[[package]] [[package]]
name = "num-iter" name = "num-iter"
version = "0.1.43" version = "0.1.44"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" checksum = "d869c01cc0c455284163fd0092f1f93835385ccab5a98a0dcc497b2f8bf055a9"
dependencies = [ dependencies = [
"autocfg", "autocfg",
"num-integer", "num-integer",
@ -568,9 +634,9 @@ dependencies = [
[[package]] [[package]]
name = "num-traits" name = "num-traits"
version = "0.2.17" version = "0.2.18"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a"
dependencies = [ dependencies = [
"autocfg", "autocfg",
"libm", "libm",
@ -593,7 +659,7 @@ checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.48", "syn 2.0.53",
] ]
[[package]] [[package]]
@ -602,6 +668,12 @@ version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "de96540e0ebde571dc55c73d60ef407c653844e6f9a1e2fdbd40c07b9252d812" checksum = "de96540e0ebde571dc55c73d60ef407c653844e6f9a1e2fdbd40c07b9252d812"
[[package]]
name = "portable-atomic"
version = "1.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0"
[[package]] [[package]]
name = "postcard" name = "postcard"
version = "0.5.2" version = "0.5.2"
@ -651,9 +723,9 @@ dependencies = [
[[package]] [[package]]
name = "proc-macro2" name = "proc-macro2"
version = "1.0.78" version = "1.0.79"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" checksum = "e835ff2298f5721608eb1a980ecaee1aef2c132bf95ecc026a11b7bf3c01c02e"
dependencies = [ dependencies = [
"unicode-ident", "unicode-ident",
] ]
@ -698,14 +770,14 @@ version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
dependencies = [ dependencies = [
"semver 1.0.20", "semver 1.0.22",
] ]
[[package]] [[package]]
name = "ryu" name = "ryu"
version = "1.0.16" version = "1.0.17"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1"
[[package]] [[package]]
name = "scopeguard" name = "scopeguard"
@ -724,9 +796,9 @@ dependencies = [
[[package]] [[package]]
name = "semver" name = "semver"
version = "1.0.20" version = "1.0.22"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca"
[[package]] [[package]]
name = "semver-parser" name = "semver-parser"
@ -736,9 +808,9 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
[[package]] [[package]]
name = "serde" name = "serde"
version = "1.0.196" version = "1.0.197"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "870026e60fa08c69f064aa766c10f10b1d62db9ccd4d0abb206472bee0ce3b32" checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2"
dependencies = [ dependencies = [
"serde_derive", "serde_derive",
] ]
@ -756,13 +828,13 @@ dependencies = [
[[package]] [[package]]
name = "serde_derive" name = "serde_derive"
version = "1.0.196" version = "1.0.197"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "33c85360c95e7d137454dc81d9a4ed2b8efd8fbe19cee57357b32b9771fccb67" checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.48", "syn 2.0.53",
] ]
[[package]] [[package]]
@ -798,14 +870,14 @@ dependencies = [
[[package]] [[package]]
name = "smoltcp" name = "smoltcp"
version = "0.10.0" version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8d2e3a36ac8fea7b94e666dfa3871063d6e0a5c9d5d4fec9a1a6b7b6760f0229" checksum = "5a1a996951e50b5971a2c8c0fa05a381480d70a933064245c4a223ddc87ccc97"
dependencies = [ dependencies = [
"bitflags", "bitflags",
"byteorder", "byteorder",
"cfg-if", "cfg-if",
"heapless 0.7.17", "heapless 0.8.0",
"log", "log",
"managed", "managed",
] ]
@ -827,9 +899,9 @@ checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
[[package]] [[package]]
name = "stm32-eth" name = "stm32-eth"
version = "0.5.2" version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "114ecd655ee196c97dc4b3ff63b48046f2e2e2a7b3f53cc5114b9599606c093b" checksum = "97b858953e04ae990830500e70363d336609814ebb014c3e73dc7c1736aea65f"
dependencies = [ dependencies = [
"aligned", "aligned",
"cortex-m", "cortex-m",
@ -855,18 +927,20 @@ dependencies = [
[[package]] [[package]]
name = "stm32f4xx-hal" name = "stm32f4xx-hal"
version = "0.14.0" version = "0.20.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dbb045e607d0946eca27523141d192d7ee91aea0dff9736be100b8fc0c186abf" checksum = "10c41454f262c0be0c35b8cfc0d971e598281f7a9be32e894dc97a0b21deadfe"
dependencies = [ dependencies = [
"bare-metal 1.0.0", "bare-metal 1.0.0",
"bitflags",
"cortex-m", "cortex-m",
"cortex-m-rt", "cortex-m-rt",
"document-features",
"embedded-dma", "embedded-dma",
"embedded-hal 0.2.7", "embedded-hal 0.2.7",
"embedded-hal 1.0.0-alpha.8", "embedded-hal 1.0.0",
"embedded-hal-nb",
"embedded-storage", "embedded-storage",
"enumflags2",
"fugit", "fugit",
"fugit-timer", "fugit-timer",
"nb 1.1.0", "nb 1.1.0",
@ -874,6 +948,7 @@ dependencies = [
"stm32f4", "stm32f4",
"synopsys-usb-otg", "synopsys-usb-otg",
"time", "time",
"vcell",
"void", "void",
] ]
@ -890,9 +965,9 @@ dependencies = [
[[package]] [[package]]
name = "syn" name = "syn"
version = "2.0.48" version = "2.0.53"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" checksum = "7383cd0e49fff4b6b90ca5670bfd3e9d6a733b3f90c686605aa7eec8c4996032"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@ -901,9 +976,9 @@ dependencies = [
[[package]] [[package]]
name = "synopsys-usb-otg" name = "synopsys-usb-otg"
version = "0.3.2" version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "678f3707a7b1fd4863023292c42f73c6bab0e9b0096f41ae612d1af0ff221b45" checksum = "e948d523b316939545d8b21a48c27aef150ce25321b9f95ff7978647a806a6fe"
dependencies = [ dependencies = [
"cortex-m", "cortex-m",
"embedded-hal 0.2.7", "embedded-hal 0.2.7",
@ -913,31 +988,32 @@ dependencies = [
[[package]] [[package]]
name = "thiserror" name = "thiserror"
version = "1.0.51" version = "1.0.58"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f11c217e1416d6f036b870f14e0413d480dbf28edbee1f877abaf0206af43bb7" checksum = "03468839009160513471e86a034bb2c5c0e4baae3b43f79ffc55c4a5427b3297"
dependencies = [ dependencies = [
"thiserror-impl", "thiserror-impl",
] ]
[[package]] [[package]]
name = "thiserror-impl" name = "thiserror-impl"
version = "1.0.51" version = "1.0.58"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "01742297787513b79cf8e29d1056ede1313e2420b7b3b15d0a768b4921f549df" checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.48", "syn 2.0.53",
] ]
[[package]] [[package]]
name = "time" name = "time"
version = "0.3.30" version = "0.3.34"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5" checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749"
dependencies = [ dependencies = [
"deranged", "deranged",
"num-conv",
"powerfmt", "powerfmt",
"time-core", "time-core",
] ]
@ -979,18 +1055,23 @@ dependencies = [
[[package]] [[package]]
name = "usb-device" name = "usb-device"
version = "0.2.9" version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1f6cc3adc849b5292b4075fc0d5fdcf2f24866e88e336dd27a8943090a520508" checksum = "98816b1accafbb09085168b90f27e93d790b4bfa19d883466b5e53315b5f06a6"
dependencies = [
"heapless 0.8.0",
"portable-atomic",
]
[[package]] [[package]]
name = "usbd-serial" name = "usbd-serial"
version = "0.1.1" version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "db75519b86287f12dcf0d171c7cf4ecc839149fe9f3b720ac4cfce52959e1dfe" checksum = "c233fa6eb0417df4fa34aef190dfe725497a8a8120310d360e0c91653ce4f792"
dependencies = [ dependencies = [
"embedded-hal 0.2.7", "embedded-hal 0.2.7",
"nb 0.1.3", "embedded-io",
"nb 1.1.0",
"usb-device", "usb-device",
] ]

View File

@ -15,21 +15,21 @@ default-target = "thumbv7em-none-eabihf"
[dependencies] [dependencies]
panic-halt = "0.2.0" panic-halt = "0.2.0"
cortex-m = { version = "0.7.6", features = ["critical-section-single-core"] } cortex-m = { version = "0.7.7", features = ["critical-section-single-core"] }
cortex-m-rt = { version = "0.7.1", features = ["device"] } cortex-m-rt = { version = "0.7.3", features = ["device"] }
cortex-m-semihosting = "0.5.0" cortex-m-semihosting = "0.5.0"
log = "0.4.17" log = "0.4.17"
bare-metal = "1" bare-metal = "1"
nb = "1" nb = "1"
cortex-m-log = { version = "0.7.0", features = ["log-integration", "semihosting"] } cortex-m-log = { version = "0.7.0", features = ["log-integration", "semihosting"] }
stm32f4xx-hal = { version = "0.14.0", features = ["rt", "stm32f407", "usb_fs"] } stm32f4xx-hal = { version = "0.20.0", features = ["stm32f407", "otg-fs", "usb_fs"] }
stm32-eth = { version = "0.5.2", features = ["stm32f407", "smoltcp-phy", "smoltcp"] } stm32-eth = { version = "0.6.0", features = ["stm32f407", "smoltcp-phy", "smoltcp"] }
ieee802_3_miim = "0.8.0" ieee802_3_miim = "0.8.0"
smoltcp = { version = "0.10.0", default-features = false, features = ["proto-ipv4", "socket-tcp", "log", "medium-ethernet"] } smoltcp = { version = "0.11.0", default-features = false, features = ["proto-ipv4", "socket-tcp", "log", "medium-ethernet"] }
uom = { version = "0.30", default-features = false, features = ["autoconvert", "si", "f32", "use_serde"] } uom = { version = "0.30", default-features = false, features = ["autoconvert", "si", "f32", "use_serde"] }
num-traits = { version = "0.2.15", default-features = false, features = ["libm"] } num-traits = { version = "0.2.15", default-features = false, features = ["libm"] }
usb-device = "0.2.9" usb-device = "0.3.2"
usbd-serial = "0.1.1" usbd-serial = "0.2.1"
fugit = "0.3.6" fugit = "0.3.6"
rtt-target = { version = "0.3.1", features = ["cortex-m"] } rtt-target = { version = "0.3.1", features = ["cortex-m"] }
miniconf = "0.9.0" miniconf = "0.9.0"

View File

@ -8,8 +8,8 @@
let let
pkgs = import nixpkgs { system = "x86_64-linux"; overlays = [ (import mozilla-overlay) ]; }; pkgs = import nixpkgs { system = "x86_64-linux"; overlays = [ (import mozilla-overlay) ]; };
rustManifest = pkgs.fetchurl { rustManifest = pkgs.fetchurl {
url = "https://static.rust-lang.org/dist/2023-02-09/channel-rust-stable.toml"; url = "https://static.rust-lang.org/dist/2024-03-21/channel-rust-stable.toml";
sha256 = "4b8740ee77b62291471be1278d77e8826ab01b20c54915859c9f1ccb8299af59"; sha256 = "faccaa01dda45fc2956bcfd4da0cf76e52104d3b1862ddd4eb7c4159a18e49cf";
}; };
targets = [ targets = [

View File

@ -39,7 +39,7 @@ impl StoreBackend for FlashBackend {
} }
fn backup_space(&self) -> &'static mut [u8] { fn backup_space(&self) -> &'static mut [u8] {
unsafe { &mut BACKUP_SPACE } unsafe { BACKUP_SPACE.as_mut() }
} }
} }

View File

@ -7,6 +7,7 @@ use crate::thermostat::ad7172;
use crate::net::net::EthernetMgmtPins; use crate::net::net::EthernetMgmtPins;
use crate::device::hw_rev::{HWRev, HwRevPins}; use crate::device::hw_rev::{HWRev, HwRevPins};
use stm32_eth::EthPins; use stm32_eth::EthPins;
use stm32f4xx_hal::gpio::alt::otg_fs::{Dm, Dp};
use stm32f4xx_hal::{ use stm32f4xx_hal::{
gpio::{gpioa::*, gpiob::*, gpioc::*, GpioExt, Input, Speed}, gpio::{gpioa::*, gpiob::*, gpioc::*, GpioExt, Input, Speed},
otg_fs::USB, otg_fs::USB,
@ -16,7 +17,7 @@ use stm32f4xx_hal::{
}, },
rcc::Clocks, rcc::Clocks,
spi::{NoMiso, Spi}, spi::{NoMiso, Spi},
timer::pwm::PwmExt, timer::{Channel1, Channel2, Channel3, pwm::PwmExt}
}; };
pub type EthernetPins = pub type EthernetPins =
@ -67,8 +68,8 @@ pub fn setup(
usb_global: otg_fs_global, usb_global: otg_fs_global,
usb_device: otg_fs_device, usb_device: otg_fs_device,
usb_pwrclk: otg_fs_pwrclk, usb_pwrclk: otg_fs_pwrclk,
pin_dm: gpioa.pa11.into_alternate(), pin_dm: Dm::PA11(gpioa.pa11.into_alternate()),
pin_dp: gpioa.pa12.into_alternate(), pin_dp: Dp::PA12(gpioa.pa12.into_alternate()),
hclk: clocks.hclk(), hclk: clocks.hclk(),
}; };
@ -94,7 +95,7 @@ pub fn setup(
spi2, spi2,
( (
gpiob.pb10.into_alternate(), gpiob.pb10.into_alternate(),
NoMiso {}, NoMiso::new(),
gpiob.pb15.into_alternate(), gpiob.pb15.into_alternate(),
), ),
max5719::SPI_MODE, max5719::SPI_MODE,
@ -113,9 +114,9 @@ pub fn setup(
}; };
let pwm_chs = ( let pwm_chs = (
gpiob.pb6.into_alternate(), Channel1::new(gpiob.pb6),
gpiob.pb7.into_alternate(), Channel2::new(gpiob.pb7),
gpiob.pb8.into_alternate(), Channel3::new(gpiob.pb8),
); );
let (max_i_neg0, max_v0, max_i_pos0) = let (max_i_neg0, max_v0, max_i_pos0) =
tim4.pwm_hz(pwm_chs, PWM_FREQ_KHZ.convert(), &clocks).split(); tim4.pwm_hz(pwm_chs, PWM_FREQ_KHZ.convert(), &clocks).split();
@ -126,7 +127,7 @@ pub fn setup(
spi1, spi1,
( (
gpiob.pb3.into_alternate(), gpiob.pb3.into_alternate(),
NoMiso {}, NoMiso::new(),
gpiob.pb5.into_alternate(), gpiob.pb5.into_alternate(),
), ),
ad5680::SPI_MODE, ad5680::SPI_MODE,

View File

@ -9,6 +9,8 @@ use stm32f4xx_hal::{
pac::{interrupt, Interrupt, NVIC}, pac::{interrupt, Interrupt, NVIC},
}; };
use usb_device::{ use usb_device::{
descriptor::lang_id,
device::StringDescriptors,
class_prelude::UsbBusAllocator, class_prelude::UsbBusAllocator,
prelude::{UsbDevice, UsbDeviceBuilder, UsbVidPid}, prelude::{UsbDevice, UsbDeviceBuilder, UsbVidPid},
}; };
@ -27,16 +29,19 @@ pub struct State {
impl State { impl State {
pub fn setup(usb: USB) { pub fn setup(usb: USB) {
unsafe { BUS.write(Bus::new(usb, &mut EP_MEMORY)) }; unsafe { BUS.write(Bus::new(usb, EP_MEMORY.as_mut())) };
let str_descriptor = StringDescriptors::new(lang_id::LangID::EN)
.manufacturer("M-Labs")
.product("Kirdy");
let bus = unsafe { BUS.assume_init_ref() }; let bus = unsafe { BUS.assume_init_ref() };
let serial = SerialPort::new(bus); let serial = SerialPort::new(bus);
let dev = UsbDeviceBuilder::new(bus, UsbVidPid(0x16c0, 0x27dd)) let dev = UsbDeviceBuilder::new(bus, UsbVidPid(0x16c0, 0x27dd))
.manufacturer("M-Labs")
.product("Kirdy")
.device_release(0x20) .device_release(0x20)
.self_powered(true) .self_powered(true)
.device_class(usbd_serial::USB_CLASS_CDC) .device_class(usbd_serial::USB_CLASS_CDC)
.strings(&[str_descriptor]).unwrap()
.build(); .build();
free(|_| unsafe { free(|_| unsafe {

View File

@ -1,9 +1,9 @@
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use stm32f4xx_hal::{ use stm32f4xx_hal::{
gpio::{gpioa::*, gpiob::*, gpiod::*, Alternate, Input, Output, PushPull}, gpio::{gpioa::*, gpiob::*, gpiod::*, Input, Output, PushPull},
hal::{blocking::spi::Transfer, digital::{v2::OutputPin, v2::InputPin}}, hal::{spi::SpiBus, digital::{OutputPin, InputPin}},
pac::SPI2, pac::SPI2,
spi::{NoMiso, Spi, TransferModeNormal}, spi::Spi,
}; };
use uom::si::{ use uom::si::{
@ -26,7 +26,7 @@ pub trait ChannelPins {
type TerminationStatus: InputPin; type TerminationStatus: InputPin;
type Max5719Load: OutputPin; type Max5719Load: OutputPin;
type Max5719Cs: OutputPin; type Max5719Cs: OutputPin;
type Max5719Spi: Transfer<u8>; type Max5719Spi: SpiBus<u8>;
} }
pub struct LdCtrlPhy<C: ChannelPins> { pub struct LdCtrlPhy<C: ChannelPins> {
@ -44,7 +44,7 @@ impl ChannelPins for Channel0 {
type Max5719Spi = DacSpi; type Max5719Spi = DacSpi;
} }
type DacSpi = Spi<SPI2, (PB10<Alternate<5>>, NoMiso, PB15<Alternate<5>>), TransferModeNormal>; type DacSpi = Spi<SPI2>;
type DacCs = PD8<Output<PushPull>>; type DacCs = PD8<Output<PushPull>>;
type DacLoad = PB14<Output<PushPull>>; type DacLoad = PB14<Output<PushPull>>;

View File

@ -1,28 +1,32 @@
use stm32f4xx_hal::timer::{CounterUs, Event}; use stm32f4xx_hal::timer::{Event, Counter};
use stm32f4xx_hal::pac::{interrupt, Interrupt, TIM2}; use stm32f4xx_hal::pac::{interrupt, Interrupt, TIM2};
use stm32f4xx_hal::Listen;
use uom::si::{f32::ElectricCurrent, electric_current::ampere}; use uom::si::{f32::ElectricCurrent, electric_current::ampere};
use fugit::{TimerDurationU32, KilohertzU32}; use fugit::{TimerDurationU32, KilohertzU32};
use core::marker::PhantomData; use core::marker::PhantomData;
use log::debug;
pub struct LdCurrentOutCtrlTimer { pub struct LdCurrentOutCtrlTimer {
target_i: ElectricCurrent, target_i: ElectricCurrent,
now_i: ElectricCurrent, now_i: ElectricCurrent,
timer: CounterUs<TIM2>, timer: Counter<TIM2, FREQ>,
timeout: bool, timeout: bool,
} }
static mut LD_CURRENT_OUT_CTRL_TIMER: Option<LdCurrentOutCtrlTimer> = None; static mut LD_CURRENT_OUT_CTRL_TIMER: Option<LdCurrentOutCtrlTimer> = None;
pub const FREQ: u32 = 1000000;
/// This timer notifies the main loop to set the correct output current so that ld output current can ramp up/down slowly. /// This timer notifies the main loop to set the correct output current so that ld output current can ramp up/down slowly.
/// The current output slope is guaranteed to be larger but not necessarily equal to than the preset value. /// The current output slope is guaranteed to be larger but not necessarily equal to than the preset value.
impl LdCurrentOutCtrlTimer { impl LdCurrentOutCtrlTimer {
const TIME_STEP_MS: TimerDurationU32<1000000> = TimerDurationU32::from_rate(KilohertzU32::from_raw(1)); const TIME_STEP_MS: TimerDurationU32<FREQ> = TimerDurationU32::from_rate(KilohertzU32::from_raw(1));
const STEP_SIZE: ElectricCurrent = ElectricCurrent { const STEP_SIZE: ElectricCurrent = ElectricCurrent {
dimension: PhantomData, dimension: PhantomData,
units: PhantomData, units: PhantomData,
value: 0.0001, value: 0.0001,
}; };
pub fn setup(mut tim2: CounterUs<TIM2>) { pub fn setup(mut tim2: Counter<TIM2, FREQ>) {
tim2.start(LdCurrentOutCtrlTimer::TIME_STEP_MS).unwrap(); tim2.start(LdCurrentOutCtrlTimer::TIME_STEP_MS).unwrap();
unsafe { unsafe {
cortex_m::peripheral::NVIC::unmask(Interrupt::TIM2); cortex_m::peripheral::NVIC::unmask(Interrupt::TIM2);
@ -85,7 +89,10 @@ impl LdCurrentOutCtrlTimer {
pub fn clear_irq_flag() { pub fn clear_irq_flag() {
if let Some(ref mut ld_current_out_ctrl_timer ) = LdCurrentOutCtrlTimer::get() { if let Some(ref mut ld_current_out_ctrl_timer ) = LdCurrentOutCtrlTimer::get() {
ld_current_out_ctrl_timer.timer.clear_interrupt(Event::Update); match ld_current_out_ctrl_timer.timer.wait() {
Ok(_) => {}
Err(_) => {debug!("LD CTRL TIMER Interrupt is not present when clear_irq_flag() is called")}
}
} }
} }

View File

@ -1,7 +1,7 @@
use crate::device::sys_timer::sleep; use crate::device::sys_timer::sleep;
use fugit::MegahertzU32; use fugit::MegahertzU32;
use stm32f4xx_hal::{ use stm32f4xx_hal::{
hal::{blocking::spi::Transfer, digital::v2::OutputPin}, hal::{spi::SpiBus, digital::OutputPin},
spi, spi,
}; };
@ -14,13 +14,13 @@ pub const SPI_CLOCK_MHZ: MegahertzU32 = MegahertzU32::from_raw(21);
pub const MAX_VALUE: u32 = 0xFFFFF; pub const MAX_VALUE: u32 = 0xFFFFF;
pub struct Dac<SPI: Transfer<u8>, S1: OutputPin, S2:OutputPin> { pub struct Dac<SPI: SpiBus<u8>, S1: OutputPin, S2:OutputPin> {
spi: SPI, spi: SPI,
cs_n: S1, cs_n: S1,
load_n: S2, load_n: S2,
} }
impl<SPI: Transfer<u8>, S1: OutputPin, S2: OutputPin> Dac<SPI, S1, S2> { impl<SPI: SpiBus<u8>, S1: OutputPin, S2: OutputPin> Dac<SPI, S1, S2> {
pub fn new(spi: SPI, mut cs_n: S1, mut load_n: S2) -> Self { pub fn new(spi: SPI, mut cs_n: S1, mut load_n: S2) -> Self {
let _ = cs_n.set_high(); let _ = cs_n.set_high();
let _ = load_n.set_high(); let _ = load_n.set_high();
@ -30,7 +30,7 @@ impl<SPI: Transfer<u8>, S1: OutputPin, S2: OutputPin> Dac<SPI, S1, S2> {
fn write(&mut self, buf: &mut [u8]) -> Result<(), SPI::Error> { fn write(&mut self, buf: &mut [u8]) -> Result<(), SPI::Error> {
let _ = self.cs_n.set_low(); let _ = self.cs_n.set_low();
self.spi.transfer(buf)?; self.spi.write(buf)?;
let _ = self.cs_n.set_high(); let _ = self.cs_n.set_high();
sleep(1); sleep(1);
// must be high for >= 20 ns // must be high for >= 20 ns

View File

@ -9,6 +9,7 @@ mod laser_diode;
mod thermostat; mod thermostat;
mod net; mod net;
use core::ptr::addr_of_mut;
use device::{boot::bootup, log_setup, sys_timer}; use device::{boot::bootup, log_setup, sys_timer};
use crate::net::net::IpSettings; use crate::net::net::IpSettings;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
@ -65,6 +66,8 @@ fn main() -> ! {
let mut state = State::default(); let mut state = State::default();
let eth_data_buffer = unsafe { addr_of_mut!(ETH_DATA_BUFFER).as_mut().unwrap()};
loop { loop {
wd.feed(); wd.feed();
@ -147,9 +150,7 @@ fn main() -> ! {
net::net::for_each(|mut socket, id| { net::net::for_each(|mut socket, id| {
if net::net::eth_is_socket_active(socket) && net::net::eth_is_socket_connected(socket) { if net::net::eth_is_socket_active(socket) && net::net::eth_is_socket_connected(socket) {
if active_report[id] { if active_report[id] {
unsafe { net::cmd_handler::send_status_report(eth_data_buffer, &mut laser, &mut thermostat, &mut socket);
net::cmd_handler::send_status_report(&mut ETH_DATA_BUFFER, &mut laser, &mut thermostat, &mut socket);
}
} }
} }
else { else {
@ -168,14 +169,12 @@ fn main() -> ! {
if eth_is_pending { if eth_is_pending {
net::net::for_each(|mut socket, id| { net::net::for_each(|mut socket, id| {
if net::net::eth_is_socket_active(socket) && net::net::eth_is_socket_connected(socket){ if net::net::eth_is_socket_active(socket) && net::net::eth_is_socket_connected(socket){
unsafe{ let bytes = net::net::eth_recv(eth_data_buffer, socket);
let bytes = net::net::eth_recv(&mut ETH_DATA_BUFFER, socket); if bytes != 0 {
if bytes != 0 { info!("Ts: {:?}", sys_timer::now());
info!("Ts: {:?}", sys_timer::now()); debug!("Number of bytes recv: {:?}", bytes);
debug!("Number of bytes recv: {:?}", bytes); // State Transition
// State Transition net::cmd_handler::execute_cmd(eth_data_buffer, bytes, &mut socket, &mut laser, &mut thermostat, &mut state, &mut device_settings, &mut active_report[id]);
net::cmd_handler::execute_cmd(&mut ETH_DATA_BUFFER, bytes, &mut socket, &mut laser, &mut thermostat, &mut state, &mut device_settings, &mut active_report[id]);
}
} }
} }
}) })
@ -225,9 +224,7 @@ fn main() -> ! {
thermostat.power_down(); thermostat.power_down();
net::net::for_each(|mut socket, _| { net::net::for_each(|mut socket, _| {
if net::net::eth_is_socket_active(socket) { if net::net::eth_is_socket_active(socket) {
unsafe { net::cmd_handler::send_response(eth_data_buffer, net::cmd_handler::ResponseEnum::HardReset, None, &mut socket);
net::cmd_handler::send_response(&mut ETH_DATA_BUFFER, net::cmd_handler::ResponseEnum::HardReset, None, &mut socket);
}
} }
}); });
} }

View File

@ -1,7 +1,7 @@
use crate::device::sys_timer::sleep; use crate::device::sys_timer::sleep;
use fugit::MegahertzU32; use fugit::MegahertzU32;
use stm32f4xx_hal::{ use stm32f4xx_hal::{
hal::{blocking::spi::Transfer, digital::v2::OutputPin}, hal::{spi::SpiBus, digital::OutputPin},
spi, spi,
}; };
@ -15,12 +15,12 @@ pub const SPI_CLOCK_MHZ: MegahertzU32 = MegahertzU32::from_raw(21);
pub const MAX_VALUE: u32 = 0x3FFFF; pub const MAX_VALUE: u32 = 0x3FFFF;
pub struct Dac<SPI: Transfer<u8>, S: OutputPin> { pub struct Dac<SPI: SpiBus<u8>, S: OutputPin> {
spi: SPI, spi: SPI,
sync: S, sync: S,
} }
impl<SPI: Transfer<u8>, S: OutputPin> Dac<SPI, S> { impl<SPI: SpiBus<u8>, S: OutputPin> Dac<SPI, S> {
pub fn new(spi: SPI, mut sync: S) -> Self { pub fn new(spi: SPI, mut sync: S) -> Self {
let _ = sync.set_low(); let _ = sync.set_low();
@ -34,7 +34,7 @@ impl<SPI: Transfer<u8>, S: OutputPin> Dac<SPI, S> {
// must be high for >= 33 ns // must be high for >= 33 ns
sleep(1); sleep(1);
let _ = self.sync.set_low(); let _ = self.sync.set_low();
self.spi.transfer(buf)?; self.spi.transfer_in_place(buf)?;
Ok(()) Ok(())
} }

View File

@ -2,12 +2,12 @@ use core::fmt;
use log::{info, warn}; use log::{info, warn};
use stm32f4xx_hal:: use stm32f4xx_hal::
{ {
spi::{Spi, TransferModeNormal}, spi::Spi,
pac::SPI3, pac::SPI3,
gpio::{PC10, PC11, PC12, PA15, Alternate, Output, PushPull}, gpio::{PA15, Output, PushPull},
hal::{ hal::{
blocking::spi::Transfer, spi::SpiBus,
digital::v2::OutputPin, digital::OutputPin,
}, },
}; };
use uom::si::{ use uom::si::{
@ -21,17 +21,17 @@ use super::{
/// AD7172-2 implementation /// AD7172-2 implementation
/// ///
/// [Manual](https://www.analog.com/media/en/technical-documentation/data-sheets/AD7172-2.pdf) /// [Manual](https://www.analog.com/media/en/technical-documentation/data-sheets/AD7172-2.pdf)
pub struct Adc<SPI: Transfer<u8>, NSS: OutputPin> { pub struct Adc<SPI: SpiBus<u8>, NSS: OutputPin> {
spi: SPI, spi: SPI,
nss: NSS, nss: NSS,
checksum_mode: ChecksumMode, checksum_mode: ChecksumMode,
} }
type AdcSpi = Spi<SPI3, (PC10<Alternate<6>>, PC11<Alternate<6>>, PC12<Alternate<6>>), TransferModeNormal>; type AdcSpi = Spi<SPI3>;
type AdcNss = PA15<Output<PushPull>>; type AdcNss = PA15<Output<PushPull>>;
pub type AdcPhy = Adc<AdcSpi, AdcNss>; pub type AdcPhy = Adc<AdcSpi, AdcNss>;
impl<SPI: Transfer<u8, Error = E>, NSS: OutputPin, E: fmt::Debug> Adc<SPI, NSS> { impl<SPI: SpiBus<u8, Error = E>, NSS: OutputPin, E: fmt::Debug> Adc<SPI, NSS> {
pub fn new(spi: SPI, mut nss: NSS) -> Result<Self, SPI::Error> { pub fn new(spi: SPI, mut nss: NSS) -> Result<Self, SPI::Error> {
let _ = nss.set_high(); let _ = nss.set_high();
let mut adc = Adc { let mut adc = Adc {
@ -272,7 +272,7 @@ impl<SPI: Transfer<u8, Error = E>, NSS: OutputPin, E: fmt::Debug> Adc<SPI, NSS>
pub fn reset(&mut self) -> Result<(), SPI::Error> { pub fn reset(&mut self) -> Result<(), SPI::Error> {
let mut buf = [0xFFu8; 8]; let mut buf = [0xFFu8; 8];
let _ = self.nss.set_low(); let _ = self.nss.set_low();
let result = self.spi.transfer(&mut buf); let result = self.spi.transfer_in_place(&mut buf);
let _ = self.nss.set_high(); let _ = self.nss.set_high();
result?; result?;
Ok(()) Ok(())
@ -282,8 +282,8 @@ impl<SPI: Transfer<u8, Error = E>, NSS: OutputPin, E: fmt::Debug> Adc<SPI, NSS>
let mut addr_buf = [addr]; let mut addr_buf = [addr];
let _ = self.nss.set_low(); let _ = self.nss.set_low();
let result = match self.spi.transfer(&mut addr_buf) { let result = match self.spi.transfer_in_place(&mut addr_buf) {
Ok(_) => self.spi.transfer(reg_data), Ok(_) => self.spi.transfer_in_place(reg_data),
Err(e) => Err(e), Err(e) => Err(e),
}; };
let result = match (result, checksum) { let result = match (result, checksum) {
@ -291,7 +291,7 @@ impl<SPI: Transfer<u8, Error = E>, NSS: OutputPin, E: fmt::Debug> Adc<SPI, NSS>
Ok(None), Ok(None),
(Ok(_), Some(checksum_out)) => { (Ok(_), Some(checksum_out)) => {
let mut checksum_buf = [checksum_out; 1]; let mut checksum_buf = [checksum_out; 1];
match self.spi.transfer(&mut checksum_buf) { match self.spi.transfer_in_place(&mut checksum_buf) {
Ok(_) => Ok(Some(checksum_buf[0])), Ok(_) => Ok(Some(checksum_buf[0])),
Err(e) => Err(e), Err(e) => Err(e),
} }

View File

@ -1,12 +1,13 @@
use crate::thermostat::ad5680; use crate::thermostat::ad5680;
use core::ptr::addr_of_mut;
use fugit::KilohertzU32; use fugit::KilohertzU32;
use stm32f4xx_hal::{ use stm32f4xx_hal::{
adc::{config::{self, AdcConfig}, Adc}, adc::{config::{self, AdcConfig}, Adc},
dma::{config::DmaConfig, PeripheralToMemory, Stream2, StreamsTuple, Transfer as DMA_Transfer}, dma::{config::DmaConfig, PeripheralToMemory, Stream2, StreamsTuple, Transfer as DMA_Transfer},
gpio::{gpioa::*, gpiob::*, gpioc::*, Alternate, Analog, Output, PushPull}, gpio::{gpioa::*, gpiob::*, gpioc::*, Analog, Output, PushPull},
hal::{self, blocking::spi::Transfer, digital::v2::OutputPin}, hal::{self, spi::SpiBus, digital::OutputPin},
pac::{ADC1, ADC2, DMA2, SPI1, TIM4, Peripherals, NVIC}, pac::{ADC1, ADC2, DMA2, SPI1, TIM4, Peripherals, NVIC},
spi::{NoMiso, Spi, TransferModeNormal}, spi::Spi,
timer::pwm::PwmChannel, timer::pwm::PwmChannel,
interrupt interrupt
}; };
@ -20,7 +21,7 @@ use uom::si::{
pub const PWM_FREQ_KHZ: KilohertzU32 = KilohertzU32::from_raw(20); pub const PWM_FREQ_KHZ: KilohertzU32 = KilohertzU32::from_raw(20);
pub trait ChannelPins { pub trait ChannelPins {
type DacSpi: Transfer<u8>; type DacSpi: SpiBus<u8>;
type DacSync: OutputPin; type DacSync: OutputPin;
type ShdnPin: OutputPin; type ShdnPin: OutputPin;
type VRefPin; type VRefPin;
@ -71,7 +72,7 @@ pub struct MAX1968PinSet<C: ChannelPins> {
pub max_i_neg: C::MAXINegPin, pub max_i_neg: C::MAXINegPin,
} }
type DacSpi = Spi<SPI1, (PB3<Alternate<5>>, NoMiso, PB5<Alternate<5>>), TransferModeNormal>; type DacSpi = Spi<SPI1>;
type DacSync = PB4<Output<PushPull>>; type DacSync = PB4<Output<PushPull>>;
static mut DMA_TRANSFER_COMPLETE: bool = true; static mut DMA_TRANSFER_COMPLETE: bool = true;
@ -157,7 +158,7 @@ impl MAX1968 {
let dma = StreamsTuple::new(dma2); let dma = StreamsTuple::new(dma2);
let dma_adc : DMA_Transfer<Stream2<DMA2>, 1, Adc<ADC2>, PeripheralToMemory, &'static mut [u16; 16]>; let dma_adc : DMA_Transfer<Stream2<DMA2>, 1, Adc<ADC2>, PeripheralToMemory, &'static mut [u16; 16]>;
unsafe { unsafe {
dma_adc = DMA_Transfer::init_peripheral_to_memory(dma.2, pins_adc2, &mut ADC2_FIRST_BUFFER, None, dma_config); dma_adc = DMA_Transfer::init_peripheral_to_memory(dma.2, pins_adc2, addr_of_mut!(ADC2_FIRST_BUFFER).as_mut().unwrap(), None, dma_config);
NVIC::unmask(interrupt::DMA2_STREAM2); NVIC::unmask(interrupt::DMA2_STREAM2);
} }
@ -185,7 +186,7 @@ impl MAX1968 {
let buffer: &[u16; 16]; let buffer: &[u16; 16];
unsafe { unsafe {
(buffer, _) = self.dma_adc (buffer, _) = self.dma_adc
.next_transfer(&mut ADC2_LOCAL_BUFFER) .next_transfer(addr_of_mut!(ADC2_LOCAL_BUFFER).as_mut().unwrap())
.unwrap(); .unwrap();
} }
@ -284,21 +285,34 @@ impl MAX1968 {
} }
pub fn set_pwm(&mut self, pwm_pin: PwmPinsEnum, duty: f64, max_duty: f64) -> f64 { pub fn set_pwm(&mut self, pwm_pin: PwmPinsEnum, duty: f64, max_duty: f64) -> f64 {
fn set<P: hal::PwmPin<Duty = u16>>(pin: &mut P, duty: f64) -> f64 { fn duty_cycle_value(duty_cycle: f64, duty_cycle_limit: f64, max_value: u16) -> u16 {
let max = pin.get_max_duty(); ((duty_cycle.min(duty_cycle_limit) * (max_value as f64)) as u16).min(max_value)
let value = ((duty * (max as f64)) as u16).min(max);
pin.set_duty(value);
pin.enable();
value as f64 / (max as f64)
} }
let duty = duty.min(max_duty); let value: u16;
let max_value: u16;
match pwm_pin { match pwm_pin {
PwmPinsEnum::MaxV => set(&mut self.phy.max_v, duty), PwmPinsEnum::MaxV => {
PwmPinsEnum::MaxPosI => set(&mut self.phy.max_i_pos, duty), self.phy.max_v.enable();
PwmPinsEnum::MaxNegI => set(&mut self.phy.max_i_neg, duty), max_value = self.phy.max_v.get_max_duty();
value = duty_cycle_value(duty, max_duty, max_value);
self.phy.max_v.set_duty(value);
}
PwmPinsEnum::MaxPosI => {
self.phy.max_i_pos.enable();
max_value = self.phy.max_i_pos.get_max_duty();
value = duty_cycle_value(duty, max_duty, max_value);
self.phy.max_i_pos.set_duty(value);
}
PwmPinsEnum::MaxNegI => {
self.phy.max_i_neg.enable();
max_value = self.phy.max_i_neg.get_max_duty();
value = duty_cycle_value(duty, max_duty, max_value);
self.phy.max_i_neg.set_duty(value);
}
} }
return (value as f64) / (max_value as f64);
} }
} }