continue updating embedded examples
This commit is contained in:
584
embedded-examples/stm32f3-disco-rtic/Cargo.lock
generated
584
embedded-examples/stm32f3-disco-rtic/Cargo.lock
generated
@@ -3,12 +3,21 @@
|
|||||||
version = 4
|
version = 4
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "accelerometer"
|
name = "aligned"
|
||||||
version = "0.12.0"
|
version = "0.4.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1a4586d95cb0695e748760c9a751141eebb68265b1b20392a0f14db608679f7a"
|
checksum = "377e4c0ba83e4431b10df45c1d4666f178ea9c552cac93e60c3a88bf32785923"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"micromath",
|
"as-slice",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "as-slice"
|
||||||
|
version = "0.2.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "516b6b4f0e40d50dcda9365d53964ec74560ad4284da2e7fc97122cd83174516"
|
||||||
|
dependencies = [
|
||||||
|
"stable_deref_trait",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -23,7 +32,7 @@ version = "0.2.5"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5deb64efa5bd81e31fcd1938615a6d98c82eafcbcd787162b6f63b91d6bac5b3"
|
checksum = "5deb64efa5bd81e31fcd1938615a6d98c82eafcbcd787162b6f63b91d6bac5b3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"rustc_version 0.2.3",
|
"rustc_version",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -32,6 +41,12 @@ 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 = "f8fe8f5a8a398345e52358e18ff07cc17a568fbca5c6f73873d3a62056309603"
|
checksum = "f8fe8f5a8a398345e52358e18ff07cc17a568fbca5c6f73873d3a62056309603"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "bit_field"
|
||||||
|
version = "0.10.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "1e4b40c7323adcfc0a41c4b88143ed58346ff65a288fc144329c5c45e05d70c6"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bitfield"
|
name = "bitfield"
|
||||||
version = "0.13.2"
|
version = "0.13.2"
|
||||||
@@ -45,15 +60,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
|
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bxcan"
|
name = "bitflags"
|
||||||
version = "0.7.0"
|
version = "2.9.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "40ac3d0c0a542d0ab5521211f873f62706a7136df415676f676d347e5a41dd80"
|
checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "block-device-driver"
|
||||||
|
version = "0.2.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "44c051592f59fe68053524b4c4935249b806f72c1f544cfb7abe4f57c3be258e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags",
|
"aligned",
|
||||||
"embedded-hal 0.2.7",
|
|
||||||
"nb 1.1.0",
|
|
||||||
"vcell",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -62,41 +80,17 @@ version = "1.5.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
|
checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "cast"
|
|
||||||
version = "0.2.7"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "4c24dab4283a142afa2fdca129b80ad2c6284e073930f964c3a1293c225ee39a"
|
|
||||||
dependencies = [
|
|
||||||
"rustc_version 0.4.1",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cfg-if"
|
name = "cfg-if"
|
||||||
version = "1.0.0"
|
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 = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "chrono"
|
|
||||||
version = "0.4.39"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825"
|
|
||||||
dependencies = [
|
|
||||||
"num-traits",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cobs"
|
name = "cobs"
|
||||||
version = "0.2.3"
|
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 = "67ba02a97a2bd10f4b59b25c7973101c79642302776489e030cd13cdab09ed15"
|
checksum = "fea6d1b751c55bd9c0dda7d4ff752074e98f4765ae969664648bd193bb326d15"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "cobs"
|
|
||||||
version = "0.3.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "0fa961b519f0b462e3a3b4a34b64d119eeaca1d59af726fe450bbba07a9fc0a1"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"thiserror",
|
"thiserror",
|
||||||
]
|
]
|
||||||
@@ -200,29 +194,19 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "defmt"
|
name = "defmt"
|
||||||
version = "0.3.10"
|
version = "1.0.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "86f6162c53f659f65d00619fe31f14556a6e9f8752ccc4a41bd177ffcf3d6130"
|
checksum = "548d977b6da32fa1d1fda2876453da1e7df63ad0304c8b3dae4dbe7b96f39b78"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags",
|
"bitflags 1.3.2",
|
||||||
"defmt-macros",
|
"defmt-macros",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "defmt-brtt"
|
|
||||||
version = "0.1.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "c2f0ac3635d0c89d12b8101fcb44a7625f5f030a1c0491124b74467eb5a58a78"
|
|
||||||
dependencies = [
|
|
||||||
"critical-section",
|
|
||||||
"defmt",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "defmt-macros"
|
name = "defmt-macros"
|
||||||
version = "0.4.0"
|
version = "1.0.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9d135dd939bad62d7490b0002602d35b358dce5fd9233a709d3c1ef467d4bde6"
|
checksum = "3d4fc12a85bcf441cfe44344c4b72d58493178ce635338a3f3b78943aceb258e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"defmt-parser",
|
"defmt-parser",
|
||||||
"proc-macro-error2",
|
"proc-macro-error2",
|
||||||
@@ -233,18 +217,28 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "defmt-parser"
|
name = "defmt-parser"
|
||||||
version = "0.4.1"
|
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 = "3983b127f13995e68c1e29071e5d115cd96f215ccb5e6812e3728cd6f92653b3"
|
checksum = "10d60334b3b2e7c9d91ef8150abfb6fa4c1c39ebbcf4a81c2e346aad939fee3e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"thiserror",
|
"thiserror",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "defmt-test"
|
name = "defmt-rtt"
|
||||||
version = "0.3.2"
|
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 = "290966e8c38f94b11884877242de876280d0eab934900e9642d58868e77c5df1"
|
checksum = "b2cac3b8a5644a9e02b75085ebad3b6deafdbdbdec04bb25086523828aa4dfd1"
|
||||||
|
dependencies = [
|
||||||
|
"critical-section",
|
||||||
|
"defmt",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "defmt-test"
|
||||||
|
version = "0.4.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "24076cc7203c365e7febfcec15d6667a9ef780bd2c5fd3b2a197400df78f299b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cortex-m-rt",
|
"cortex-m-rt",
|
||||||
"cortex-m-semihosting",
|
"cortex-m-semihosting",
|
||||||
@@ -254,9 +248,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "defmt-test-macros"
|
name = "defmt-test-macros"
|
||||||
version = "0.3.1"
|
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 = "984bc6eca246389726ac2826acc2488ca0fe5fcd6b8d9b48797021951d76a125"
|
checksum = "fe5520fd36862f281c026abeaab153ebbc001717c29a9b8e5ba9704d8f3a879d"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
@@ -286,12 +280,140 @@ dependencies = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "embedded-dma"
|
name = "document-features"
|
||||||
|
version = "0.2.11"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d"
|
||||||
|
dependencies = [
|
||||||
|
"litrs",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "embassy-embedded-hal"
|
||||||
|
version = "0.5.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "554e3e840696f54b4c9afcf28a0f24da431c927f4151040020416e7393d6d0d8"
|
||||||
|
dependencies = [
|
||||||
|
"embassy-futures",
|
||||||
|
"embassy-hal-internal",
|
||||||
|
"embassy-sync",
|
||||||
|
"embedded-hal 0.2.7",
|
||||||
|
"embedded-hal 1.0.0",
|
||||||
|
"embedded-hal-async",
|
||||||
|
"embedded-storage",
|
||||||
|
"embedded-storage-async",
|
||||||
|
"nb 1.1.0",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "embassy-futures"
|
||||||
|
version = "0.1.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "dc2d050bdc5c21e0862a89256ed8029ae6c290a93aecefc73084b3002cdebb01"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "embassy-hal-internal"
|
||||||
|
version = "0.3.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "95285007a91b619dc9f26ea8f55452aa6c60f7115a4edc05085cd2bd3127cd7a"
|
||||||
|
dependencies = [
|
||||||
|
"cortex-m",
|
||||||
|
"critical-section",
|
||||||
|
"num-traits",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "embassy-net-driver"
|
||||||
version = "0.2.0"
|
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 = "994f7e5b5cb23521c22304927195f236813053eb9c065dd2226a32ba64695446"
|
checksum = "524eb3c489760508f71360112bca70f6e53173e6fe48fc5f0efd0f5ab217751d"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "embassy-stm32"
|
||||||
|
version = "0.4.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "0d972eab325cc96afee98f80a91ca6b00249b6356dc0fdbff68b70c200df9fae"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"stable_deref_trait",
|
"aligned",
|
||||||
|
"bit_field",
|
||||||
|
"bitflags 2.9.4",
|
||||||
|
"block-device-driver",
|
||||||
|
"cfg-if",
|
||||||
|
"cortex-m",
|
||||||
|
"cortex-m-rt",
|
||||||
|
"critical-section",
|
||||||
|
"document-features",
|
||||||
|
"embassy-embedded-hal",
|
||||||
|
"embassy-futures",
|
||||||
|
"embassy-hal-internal",
|
||||||
|
"embassy-net-driver",
|
||||||
|
"embassy-sync",
|
||||||
|
"embassy-usb-driver",
|
||||||
|
"embassy-usb-synopsys-otg",
|
||||||
|
"embedded-can",
|
||||||
|
"embedded-hal 0.2.7",
|
||||||
|
"embedded-hal 1.0.0",
|
||||||
|
"embedded-hal-async",
|
||||||
|
"embedded-hal-nb",
|
||||||
|
"embedded-io",
|
||||||
|
"embedded-io-async",
|
||||||
|
"embedded-storage",
|
||||||
|
"embedded-storage-async",
|
||||||
|
"futures-util",
|
||||||
|
"nb 1.1.0",
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"rand_core 0.6.4",
|
||||||
|
"rand_core 0.9.3",
|
||||||
|
"sdio-host",
|
||||||
|
"static_assertions",
|
||||||
|
"stm32-fmc",
|
||||||
|
"stm32-metapac",
|
||||||
|
"vcell",
|
||||||
|
"volatile-register",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "embassy-sync"
|
||||||
|
version = "0.7.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "73974a3edbd0bd286759b3d483540f0ebef705919a5f56f4fc7709066f71689b"
|
||||||
|
dependencies = [
|
||||||
|
"cfg-if",
|
||||||
|
"critical-section",
|
||||||
|
"embedded-io-async",
|
||||||
|
"futures-core",
|
||||||
|
"futures-sink",
|
||||||
|
"heapless 0.8.0",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "embassy-usb-driver"
|
||||||
|
version = "0.2.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "17119855ccc2d1f7470a39756b12068454ae27a3eabb037d940b5c03d9c77b7a"
|
||||||
|
dependencies = [
|
||||||
|
"embedded-io-async",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "embassy-usb-synopsys-otg"
|
||||||
|
version = "0.3.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "288751f8eaa44a5cf2613f13cee0ca8e06e6638cb96e897e6834702c79084b23"
|
||||||
|
dependencies = [
|
||||||
|
"critical-section",
|
||||||
|
"embassy-sync",
|
||||||
|
"embassy-usb-driver",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "embedded-can"
|
||||||
|
version = "0.4.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e9d2e857f87ac832df68fa498d18ddc679175cf3d2e4aa893988e5601baf9438"
|
||||||
|
dependencies = [
|
||||||
|
"nb 1.1.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -320,12 +442,43 @@ dependencies = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "embedded-time"
|
name = "embedded-hal-nb"
|
||||||
version = "0.12.1"
|
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 = "d7a4b4d10ac48d08bfe3db7688c402baadb244721f30a77ce360bd24c3dffe58"
|
checksum = "fba4268c14288c828995299e59b12babdbe170f6c6d73731af1b4648142e8605"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"num",
|
"embedded-hal 1.0.0",
|
||||||
|
"nb 1.1.0",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "embedded-io"
|
||||||
|
version = "0.6.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "embedded-io-async"
|
||||||
|
version = "0.6.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "3ff09972d4073aa8c299395be75161d582e7629cd663171d62af73c8d50dba3f"
|
||||||
|
dependencies = [
|
||||||
|
"embedded-io",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "embedded-storage"
|
||||||
|
version = "0.3.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a21dea9854beb860f3062d10228ce9b976da520a73474aed3171ec276bc0c032"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "embedded-storage-async"
|
||||||
|
version = "0.4.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "1763775e2323b7d5f0aa6090657f5e21cfa02ede71f5dc40eead06d64dcd15cc"
|
||||||
|
dependencies = [
|
||||||
|
"embedded-storage",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -376,6 +529,12 @@ version = "0.3.31"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e"
|
checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "futures-sink"
|
||||||
|
version = "0.3.31"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures-task"
|
name = "futures-task"
|
||||||
version = "0.3.31"
|
version = "0.3.31"
|
||||||
@@ -400,25 +559,6 @@ version = "2.3.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1d758ba1b47b00caf47f24925c0074ecb20d6dfcffe7f6d53395c0465674841a"
|
checksum = "1d758ba1b47b00caf47f24925c0074ecb20d6dfcffe7f6d53395c0465674841a"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "generic-array"
|
|
||||||
version = "0.11.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "667f6ea017b297ec65b8a108c6e9ad6879460721fb3b6b23abf690970147fc28"
|
|
||||||
dependencies = [
|
|
||||||
"typenum",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "generic-array"
|
|
||||||
version = "0.14.7"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
|
|
||||||
dependencies = [
|
|
||||||
"typenum",
|
|
||||||
"version_check",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "hash32"
|
name = "hash32"
|
||||||
version = "0.3.1"
|
version = "0.3.1"
|
||||||
@@ -444,6 +584,16 @@ dependencies = [
|
|||||||
"stable_deref_trait",
|
"stable_deref_trait",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "heapless"
|
||||||
|
version = "0.9.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b1edcd5a338e64688fbdcb7531a846cfd3476a54784dcb918a0844682bc7ada5"
|
||||||
|
dependencies = [
|
||||||
|
"hash32",
|
||||||
|
"stable_deref_trait",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ident_case"
|
name = "ident_case"
|
||||||
version = "1.0.1"
|
version = "1.0.1"
|
||||||
@@ -461,24 +611,10 @@ dependencies = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lsm303dlhc"
|
name = "litrs"
|
||||||
version = "0.2.0"
|
version = "0.4.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9e5d1a5c290951321d1b0d4a40edd828537de9889134a0e67c5146542ae57706"
|
checksum = "f5e54036fe321fd421e10d732f155734c4e4afd610dd556d9a82833ab3ee0bed"
|
||||||
dependencies = [
|
|
||||||
"cast",
|
|
||||||
"embedded-hal 0.2.7",
|
|
||||||
"generic-array 0.11.2",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "micromath"
|
|
||||||
version = "1.1.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "bc4010833aea396656c2f91ee704d51a6f1329ec2ab56ffd00bfd56f7481ea94"
|
|
||||||
dependencies = [
|
|
||||||
"generic-array 0.14.7",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nb"
|
name = "nb"
|
||||||
@@ -495,59 +631,6 @@ version = "1.1.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8d5439c4ad607c3c23abf66de8c8bf57ba8adcd1f129e699851a6e43935d339d"
|
checksum = "8d5439c4ad607c3c23abf66de8c8bf57ba8adcd1f129e699851a6e43935d339d"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "num"
|
|
||||||
version = "0.3.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "8b7a8e9be5e039e2ff869df49155f1c06bd01ade2117ec783e56ab0932b67a8f"
|
|
||||||
dependencies = [
|
|
||||||
"num-complex",
|
|
||||||
"num-integer",
|
|
||||||
"num-iter",
|
|
||||||
"num-rational",
|
|
||||||
"num-traits",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "num-complex"
|
|
||||||
version = "0.3.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "747d632c0c558b87dbabbe6a82f3b4ae03720d0646ac5b7b4dae89394be5f2c5"
|
|
||||||
dependencies = [
|
|
||||||
"num-traits",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "num-integer"
|
|
||||||
version = "0.1.46"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f"
|
|
||||||
dependencies = [
|
|
||||||
"num-traits",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "num-iter"
|
|
||||||
version = "0.1.45"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf"
|
|
||||||
dependencies = [
|
|
||||||
"autocfg",
|
|
||||||
"num-integer",
|
|
||||||
"num-traits",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "num-rational"
|
|
||||||
version = "0.3.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07"
|
|
||||||
dependencies = [
|
|
||||||
"autocfg",
|
|
||||||
"num-integer",
|
|
||||||
"num-traits",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "num-traits"
|
name = "num-traits"
|
||||||
version = "0.2.19"
|
version = "0.2.19"
|
||||||
@@ -579,9 +662,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "panic-probe"
|
name = "panic-probe"
|
||||||
version = "0.3.2"
|
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 = "4047d9235d1423d66cc97da7d07eddb54d4f154d6c13805c6d0793956f4f25b0"
|
checksum = "fd402d00b0fb94c5aee000029204a46884b1262e0c443f166d86d2c0747e1a1a"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cortex-m",
|
"cortex-m",
|
||||||
"defmt",
|
"defmt",
|
||||||
@@ -652,13 +735,16 @@ dependencies = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rtcc"
|
name = "rand_core"
|
||||||
version = "0.3.2"
|
version = "0.6.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "95973c3a0274adc4f3c5b70d2b5b85618d6de9559a6737d3293ecae9a2fc0839"
|
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
|
||||||
dependencies = [
|
|
||||||
"chrono",
|
[[package]]
|
||||||
]
|
name = "rand_core"
|
||||||
|
version = "0.9.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rtic"
|
name = "rtic"
|
||||||
@@ -735,42 +821,27 @@ version = "0.2.3"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
|
checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"semver 0.9.0",
|
"semver",
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "rustc_version"
|
|
||||||
version = "0.4.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92"
|
|
||||||
dependencies = [
|
|
||||||
"semver 1.0.25",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "satrs"
|
name = "satrs"
|
||||||
version = "0.2.1"
|
version = "0.3.0-alpha.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "866fcae3b683ccc37b5ad77982483a0ee01d5dc408dea5aad2117ad404b60fe1"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cobs 0.2.3",
|
"cobs",
|
||||||
"crc",
|
|
||||||
"defmt",
|
"defmt",
|
||||||
"delegate",
|
"delegate",
|
||||||
"derive-new",
|
"derive-new",
|
||||||
"num-traits",
|
|
||||||
"num_enum",
|
"num_enum",
|
||||||
"paste",
|
"paste",
|
||||||
"satrs-shared",
|
"satrs-shared",
|
||||||
"smallvec",
|
|
||||||
"spacepackets",
|
"spacepackets",
|
||||||
|
"thiserror",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "satrs-shared"
|
name = "satrs-shared"
|
||||||
version = "0.1.4"
|
version = "0.2.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "6042477018c2d43fffccaaa5099bc299a58485139b4d31c5b276889311e474f1"
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"spacepackets",
|
"spacepackets",
|
||||||
]
|
]
|
||||||
@@ -779,24 +850,31 @@ dependencies = [
|
|||||||
name = "satrs-stm32f3-disco-rtic"
|
name = "satrs-stm32f3-disco-rtic"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cobs 0.3.0",
|
"cobs",
|
||||||
"cortex-m",
|
"cortex-m",
|
||||||
"cortex-m-rt",
|
"cortex-m-rt",
|
||||||
"cortex-m-semihosting",
|
"cortex-m-semihosting",
|
||||||
"defmt",
|
"defmt",
|
||||||
"defmt-brtt",
|
"defmt-rtt",
|
||||||
"defmt-test",
|
"defmt-test",
|
||||||
"embedded-hal 0.2.7",
|
"embassy-stm32",
|
||||||
|
"embedded-hal 1.0.0",
|
||||||
"enumset",
|
"enumset",
|
||||||
"heapless",
|
"heapless 0.9.1",
|
||||||
"panic-probe",
|
"panic-probe",
|
||||||
"rtic",
|
"rtic",
|
||||||
"rtic-monotonics",
|
"rtic-monotonics",
|
||||||
"satrs",
|
"satrs",
|
||||||
"stm32f3-discovery",
|
"spacepackets",
|
||||||
"stm32f3xx-hal",
|
"static_cell",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "sdio-host"
|
||||||
|
version = "0.9.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b328e2cb950eeccd55b7f55c3a963691455dcd044cfb5354f0c5e68d2c2d6ee2"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "semver"
|
name = "semver"
|
||||||
version = "0.9.0"
|
version = "0.9.0"
|
||||||
@@ -806,41 +884,25 @@ dependencies = [
|
|||||||
"semver-parser",
|
"semver-parser",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "semver"
|
|
||||||
version = "1.0.25"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "f79dfe2d285b0488816f30e700a7438c5a73d816b5b7d3ac72fbc48b0d185e03"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "semver-parser"
|
name = "semver-parser"
|
||||||
version = "0.7.0"
|
version = "0.7.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
|
checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "slice-group-by"
|
|
||||||
version = "0.3.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "smallvec"
|
|
||||||
version = "1.13.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "spacepackets"
|
name = "spacepackets"
|
||||||
version = "0.11.2"
|
version = "0.15.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e85574d113a06312010c0ba51aadccd4ba2806231ebe9a49fc6473d0534d8696"
|
checksum = "95ca19d2a251259686f6fffb094a8e32824098f387cd613ae81bfe4216524d02"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"crc",
|
"crc",
|
||||||
"defmt",
|
"defmt",
|
||||||
"delegate",
|
"delegate",
|
||||||
"num-traits",
|
"num-traits",
|
||||||
"num_enum",
|
"num_enum",
|
||||||
|
"paste",
|
||||||
|
"thiserror",
|
||||||
"zerocopy",
|
"zerocopy",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -851,74 +913,39 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
|
checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "stm32-usbd"
|
name = "static_assertions"
|
||||||
version = "0.6.0"
|
version = "1.1.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c6c94998f166d66b210a164648a0b7866428d8f1e0740bf8a4c5edd89d4750c1"
|
checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
|
||||||
dependencies = [
|
|
||||||
"cortex-m",
|
|
||||||
"usb-device",
|
|
||||||
"vcell",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "stm32f3"
|
name = "static_cell"
|
||||||
version = "0.15.1"
|
version = "2.1.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b28b37228ef3fa47956af38c6abd756e912f244c1657f14e66d42fc8d74ea96f"
|
checksum = "0530892bb4fa575ee0da4b86f86c667132a94b74bb72160f58ee5a4afec74c23"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bare-metal 1.0.0",
|
"portable-atomic",
|
||||||
"cortex-m",
|
|
||||||
"cortex-m-rt",
|
|
||||||
"vcell",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "stm32f3-discovery"
|
name = "stm32-fmc"
|
||||||
version = "0.8.0-alpha.0"
|
version = "0.3.2"
|
||||||
source = "git+https://github.com/robamu/stm32f3-discovery?branch=complete-dma-update-hal#5ccacae07ceff02d7d3649df67a6a0ba2a144752"
|
|
||||||
dependencies = [
|
|
||||||
"accelerometer",
|
|
||||||
"cortex-m",
|
|
||||||
"cortex-m-rt",
|
|
||||||
"lsm303dlhc",
|
|
||||||
"stm32f3xx-hal",
|
|
||||||
"switch-hal",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "stm32f3xx-hal"
|
|
||||||
version = "0.11.0-alpha.0"
|
|
||||||
source = "git+https://github.com/robamu/stm32f3xx-hal?branch=complete-dma-update#04fc76b7912649c84b57bd0ab803ea3ccf2aadae"
|
|
||||||
dependencies = [
|
|
||||||
"bxcan",
|
|
||||||
"cfg-if",
|
|
||||||
"cortex-m",
|
|
||||||
"cortex-m-rt",
|
|
||||||
"critical-section",
|
|
||||||
"embedded-dma",
|
|
||||||
"embedded-hal 0.2.7",
|
|
||||||
"embedded-time",
|
|
||||||
"enumset",
|
|
||||||
"nb 1.1.0",
|
|
||||||
"num-traits",
|
|
||||||
"paste",
|
|
||||||
"rtcc",
|
|
||||||
"slice-group-by",
|
|
||||||
"stm32-usbd",
|
|
||||||
"stm32f3",
|
|
||||||
"void",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "switch-hal"
|
|
||||||
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 = "90a4adc8cbd1726249b161898e48e0f3f1ce74d34dc784cbbc98fba4ed283fbf"
|
checksum = "c7f0639399e2307c2446c54d91d4f1596343a1e1d5cab605b9cce11d0ab3858c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"embedded-hal 0.2.7",
|
"embedded-hal 0.2.7",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "stm32-metapac"
|
||||||
|
version = "18.0.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "6fd8ec3a292a0d9fc4798416a61b21da5ae50341b2e7b8d12e662bf305366097"
|
||||||
|
dependencies = [
|
||||||
|
"cortex-m",
|
||||||
|
"cortex-m-rt",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "syn"
|
name = "syn"
|
||||||
version = "1.0.109"
|
version = "1.0.109"
|
||||||
@@ -961,36 +988,18 @@ dependencies = [
|
|||||||
"syn 2.0.96",
|
"syn 2.0.96",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "typenum"
|
|
||||||
version = "1.17.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "unicode-ident"
|
name = "unicode-ident"
|
||||||
version = "1.0.16"
|
version = "1.0.16"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a210d160f08b701c8721ba1c726c11662f877ea6b7094007e1ca9a1041945034"
|
checksum = "a210d160f08b701c8721ba1c726c11662f877ea6b7094007e1ca9a1041945034"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "usb-device"
|
|
||||||
version = "0.2.9"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "1f6cc3adc849b5292b4075fc0d5fdcf2f24866e88e336dd27a8943090a520508"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "vcell"
|
name = "vcell"
|
||||||
version = "0.1.3"
|
version = "0.1.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "77439c1b53d2303b20d9459b1ade71a83c716e3f9c34f3228c00e6f185d6c002"
|
checksum = "77439c1b53d2303b20d9459b1ade71a83c716e3f9c34f3228c00e6f185d6c002"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "version_check"
|
|
||||||
version = "0.9.5"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "void"
|
name = "void"
|
||||||
version = "1.0.2"
|
version = "1.0.2"
|
||||||
@@ -1008,19 +1017,18 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "zerocopy"
|
name = "zerocopy"
|
||||||
version = "0.7.35"
|
version = "0.8.26"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0"
|
checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"byteorder",
|
|
||||||
"zerocopy-derive",
|
"zerocopy-derive",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "zerocopy-derive"
|
name = "zerocopy-derive"
|
||||||
version = "0.7.35"
|
version = "0.8.26"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
|
checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
@@ -9,13 +9,16 @@ default-run = "satrs-stm32f3-disco-rtic"
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
cortex-m = { version = "0.7", features = ["critical-section-single-core"] }
|
cortex-m = { version = "0.7", features = ["critical-section-single-core"] }
|
||||||
cortex-m-rt = "0.7"
|
cortex-m-rt = "0.7"
|
||||||
defmt = "0.3"
|
defmt = "1"
|
||||||
defmt-brtt = { version = "0.1", default-features = false, features = ["rtt"] }
|
defmt-rtt = { version = "1" }
|
||||||
panic-probe = { version = "0.3", features = ["print-defmt"] }
|
panic-probe = { version = "1", features = ["print-defmt"] }
|
||||||
embedded-hal = "0.2.7"
|
embedded-hal = "1"
|
||||||
cortex-m-semihosting = "0.5.0"
|
cortex-m-semihosting = "0.5.0"
|
||||||
|
embassy-stm32 = { version = "0.4", features = ["stm32f303vc", "unstable-pac"] }
|
||||||
enumset = "1"
|
enumset = "1"
|
||||||
heapless = "0.8"
|
heapless = "0.9"
|
||||||
|
spacepackets = { version = "0.15", default-features = false, features = ["defmt"] }
|
||||||
|
static_cell = "2"
|
||||||
|
|
||||||
[dependencies.rtic]
|
[dependencies.rtic]
|
||||||
version = "2"
|
version = "2"
|
||||||
@@ -26,32 +29,32 @@ version = "2"
|
|||||||
features = ["cortex-m-systick"]
|
features = ["cortex-m-systick"]
|
||||||
|
|
||||||
[dependencies.cobs]
|
[dependencies.cobs]
|
||||||
version = "0.3"
|
version = "0.4"
|
||||||
default-features = false
|
default-features = false
|
||||||
|
|
||||||
[dependencies.stm32f3xx-hal]
|
# [dependencies.stm32f3xx-hal]
|
||||||
git = "https://github.com/robamu/stm32f3xx-hal"
|
# git = "https://github.com/robamu/stm32f3xx-hal"
|
||||||
version = "0.11.0-alpha.0"
|
# version = "0.11.0-alpha.0"
|
||||||
features = ["stm32f303xc", "rt", "enumset"]
|
# features = ["stm32f303xc", "rt", "enumset"]
|
||||||
branch = "complete-dma-update"
|
# branch = "complete-dma-update"
|
||||||
# Can be used in workspace to develop and update HAL
|
# Can be used in workspace to develop and update HAL
|
||||||
# path = "../stm32f3xx-hal"
|
# path = "../stm32f3xx-hal"
|
||||||
|
|
||||||
[dependencies.stm32f3-discovery]
|
# [dependencies.stm32f3-discovery]
|
||||||
git = "https://github.com/robamu/stm32f3-discovery"
|
# git = "https://github.com/robamu/stm32f3-discovery"
|
||||||
version = "0.8.0-alpha.0"
|
# version = "0.8.0-alpha.0"
|
||||||
branch = "complete-dma-update-hal"
|
# branch = "complete-dma-update-hal"
|
||||||
# Can be used in workspace to develop and update BSP
|
# Can be used in workspace to develop and update BSP
|
||||||
# path = "../stm32f3-discovery"
|
# path = "../stm32f3-discovery"
|
||||||
|
|
||||||
[dependencies.satrs]
|
[dependencies.satrs]
|
||||||
# path = "satrs"
|
# version = "0.2"
|
||||||
version = "0.2"
|
path = "../../satrs"
|
||||||
default-features = false
|
default-features = false
|
||||||
features = ["defmt"]
|
features = ["defmt"]
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
defmt-test = "0.3"
|
defmt-test = "0.4"
|
||||||
|
|
||||||
# cargo test
|
# cargo test
|
||||||
[profile.test]
|
[profile.test]
|
||||||
|
@@ -1,76 +1,61 @@
|
|||||||
#![no_std]
|
|
||||||
#![no_main]
|
#![no_main]
|
||||||
use satrs_stm32f3_disco_rtic as _;
|
#![no_std]
|
||||||
|
|
||||||
use stm32f3_discovery::leds::Leds;
|
use panic_probe as _;
|
||||||
use stm32f3_discovery::stm32f3xx_hal::delay::Delay;
|
use rtic::app;
|
||||||
use stm32f3_discovery::stm32f3xx_hal::{pac, prelude::*};
|
|
||||||
use stm32f3_discovery::switch_hal::{OutputSwitch, ToggleableOutputSwitch};
|
|
||||||
|
|
||||||
#[cortex_m_rt::entry]
|
#[app(device = embassy_stm32)]
|
||||||
fn main() -> ! {
|
mod app {
|
||||||
defmt::println!("STM32F3 Discovery Blinky");
|
use rtic_monotonics::fugit::ExtU32;
|
||||||
let dp = pac::Peripherals::take().unwrap();
|
use rtic_monotonics::Monotonic as _;
|
||||||
let mut rcc = dp.RCC.constrain();
|
use satrs_stm32f3_disco_rtic::{Direction, LedPinSet, Leds};
|
||||||
let cp = cortex_m::Peripherals::take().unwrap();
|
|
||||||
let mut flash = dp.FLASH.constrain();
|
|
||||||
let clocks = rcc.cfgr.freeze(&mut flash.acr);
|
|
||||||
let mut delay = Delay::new(cp.SYST, clocks);
|
|
||||||
|
|
||||||
let mut gpioe = dp.GPIOE.split(&mut rcc.ahb);
|
rtic_monotonics::systick_monotonic!(Mono, 1000);
|
||||||
let mut leds = Leds::new(
|
|
||||||
gpioe.pe8,
|
#[shared]
|
||||||
gpioe.pe9,
|
struct Shared {}
|
||||||
gpioe.pe10,
|
|
||||||
gpioe.pe11,
|
#[local]
|
||||||
gpioe.pe12,
|
struct Local {
|
||||||
gpioe.pe13,
|
leds: Leds,
|
||||||
gpioe.pe14,
|
current_dir: Direction,
|
||||||
gpioe.pe15,
|
}
|
||||||
&mut gpioe.moder,
|
|
||||||
&mut gpioe.otyper,
|
#[init]
|
||||||
);
|
fn init(cx: init::Context) -> (Shared, Local) {
|
||||||
let delay_ms = 200u16;
|
let p = embassy_stm32::init(Default::default());
|
||||||
|
|
||||||
|
defmt::info!("Starting sat-rs demo application for the STM32F3-Discovery using RTICv2");
|
||||||
|
|
||||||
|
let led_pin_set = LedPinSet {
|
||||||
|
pin_n: p.PE8,
|
||||||
|
pin_ne: p.PE9,
|
||||||
|
pin_e: p.PE10,
|
||||||
|
pin_se: p.PE11,
|
||||||
|
pin_s: p.PE12,
|
||||||
|
pin_sw: p.PE13,
|
||||||
|
pin_w: p.PE14,
|
||||||
|
pin_nw: p.PE15,
|
||||||
|
};
|
||||||
|
let leds = Leds::new(led_pin_set);
|
||||||
|
|
||||||
|
// Initialize the systick interrupt & obtain the token to prove that we did
|
||||||
|
Mono::start(cx.core.SYST, 8_000_000);
|
||||||
|
blinky::spawn().expect("failed to spawn blinky task");
|
||||||
|
(
|
||||||
|
Shared {},
|
||||||
|
Local {
|
||||||
|
leds,
|
||||||
|
current_dir: Direction::North,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[task(local = [leds, current_dir])]
|
||||||
|
async fn blinky(cx: blinky::Context) {
|
||||||
loop {
|
loop {
|
||||||
leds.ld3_n.toggle().ok();
|
cx.local.leds.blink_next(cx.local.current_dir);
|
||||||
delay.delay_ms(delay_ms);
|
Mono::delay(200.millis()).await;
|
||||||
leds.ld3_n.toggle().ok();
|
}
|
||||||
delay.delay_ms(delay_ms);
|
|
||||||
|
|
||||||
//explicit on/off
|
|
||||||
leds.ld4_nw.on().ok();
|
|
||||||
delay.delay_ms(delay_ms);
|
|
||||||
leds.ld4_nw.off().ok();
|
|
||||||
delay.delay_ms(delay_ms);
|
|
||||||
|
|
||||||
leds.ld5_ne.on().ok();
|
|
||||||
delay.delay_ms(delay_ms);
|
|
||||||
leds.ld5_ne.off().ok();
|
|
||||||
delay.delay_ms(delay_ms);
|
|
||||||
|
|
||||||
leds.ld6_w.on().ok();
|
|
||||||
delay.delay_ms(delay_ms);
|
|
||||||
leds.ld6_w.off().ok();
|
|
||||||
delay.delay_ms(delay_ms);
|
|
||||||
|
|
||||||
leds.ld7_e.on().ok();
|
|
||||||
delay.delay_ms(delay_ms);
|
|
||||||
leds.ld7_e.off().ok();
|
|
||||||
delay.delay_ms(delay_ms);
|
|
||||||
|
|
||||||
leds.ld8_sw.on().ok();
|
|
||||||
delay.delay_ms(delay_ms);
|
|
||||||
leds.ld8_sw.off().ok();
|
|
||||||
delay.delay_ms(delay_ms);
|
|
||||||
|
|
||||||
leds.ld9_se.on().ok();
|
|
||||||
delay.delay_ms(delay_ms);
|
|
||||||
leds.ld9_se.off().ok();
|
|
||||||
delay.delay_ms(delay_ms);
|
|
||||||
|
|
||||||
leds.ld10_s.on().ok();
|
|
||||||
delay.delay_ms(delay_ms);
|
|
||||||
leds.ld10_s.off().ok();
|
|
||||||
delay.delay_ms(delay_ms);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -3,12 +3,147 @@
|
|||||||
|
|
||||||
use cortex_m_semihosting::debug;
|
use cortex_m_semihosting::debug;
|
||||||
|
|
||||||
use defmt_brtt as _; // global logger
|
use defmt_rtt as _; // global logger
|
||||||
|
|
||||||
use stm32f3xx_hal as _; // memory layout
|
|
||||||
|
|
||||||
use panic_probe as _;
|
use panic_probe as _;
|
||||||
|
|
||||||
|
use embassy_stm32::gpio::Output;
|
||||||
|
|
||||||
|
#[derive(defmt::Format, PartialEq, Eq, Clone, Copy)]
|
||||||
|
pub enum Direction {
|
||||||
|
North,
|
||||||
|
NorthEast,
|
||||||
|
East,
|
||||||
|
SouthEast,
|
||||||
|
South,
|
||||||
|
SouthWest,
|
||||||
|
West,
|
||||||
|
NorthWest,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Direction {
|
||||||
|
pub fn switch_to_next(&mut self) -> (Self, Self) {
|
||||||
|
let curr = *self;
|
||||||
|
*self = match self {
|
||||||
|
Direction::North => Direction::NorthEast,
|
||||||
|
Direction::NorthEast => Direction::East,
|
||||||
|
Direction::East => Direction::SouthEast,
|
||||||
|
Direction::SouthEast => Direction::South,
|
||||||
|
Direction::South => Direction::SouthWest,
|
||||||
|
Direction::SouthWest => Direction::West,
|
||||||
|
Direction::West => Direction::NorthWest,
|
||||||
|
Direction::NorthWest => Direction::North,
|
||||||
|
};
|
||||||
|
(curr, *self)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct Leds {
|
||||||
|
pub north: Output<'static>,
|
||||||
|
pub north_east: Output<'static>,
|
||||||
|
pub east: Output<'static>,
|
||||||
|
pub south_east: Output<'static>,
|
||||||
|
pub south: Output<'static>,
|
||||||
|
pub south_west: Output<'static>,
|
||||||
|
pub west: Output<'static>,
|
||||||
|
pub north_west: Output<'static>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Leds {
|
||||||
|
pub fn blink_next(&mut self, current_dir: &mut Direction) {
|
||||||
|
let (prev, curr) = current_dir.switch_to_next();
|
||||||
|
self.set_dir_low(prev);
|
||||||
|
self.set_dir_high(curr);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn set_dir(&mut self, dir: Direction, level: embassy_stm32::gpio::Level) {
|
||||||
|
match dir {
|
||||||
|
Direction::North => self.north.set_level(level),
|
||||||
|
Direction::NorthEast => self.north_east.set_level(level),
|
||||||
|
Direction::East => self.east.set_level(level),
|
||||||
|
Direction::SouthEast => self.south_east.set_level(level),
|
||||||
|
Direction::South => self.south.set_level(level),
|
||||||
|
Direction::SouthWest => self.south_west.set_level(level),
|
||||||
|
Direction::West => self.west.set_level(level),
|
||||||
|
Direction::NorthWest => self.north_west.set_level(level),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn set_dir_low(&mut self, dir: Direction) {
|
||||||
|
self.set_dir(dir, embassy_stm32::gpio::Level::Low);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn set_dir_high(&mut self, dir: Direction) {
|
||||||
|
self.set_dir(dir, embassy_stm32::gpio::Level::High);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct LedPinSet {
|
||||||
|
pub pin_n: embassy_stm32::Peri<'static, embassy_stm32::peripherals::PE8>,
|
||||||
|
pub pin_ne: embassy_stm32::Peri<'static, embassy_stm32::peripherals::PE9>,
|
||||||
|
pub pin_e: embassy_stm32::Peri<'static, embassy_stm32::peripherals::PE10>,
|
||||||
|
pub pin_se: embassy_stm32::Peri<'static, embassy_stm32::peripherals::PE11>,
|
||||||
|
pub pin_s: embassy_stm32::Peri<'static, embassy_stm32::peripherals::PE12>,
|
||||||
|
pub pin_sw: embassy_stm32::Peri<'static, embassy_stm32::peripherals::PE13>,
|
||||||
|
pub pin_w: embassy_stm32::Peri<'static, embassy_stm32::peripherals::PE14>,
|
||||||
|
pub pin_nw: embassy_stm32::Peri<'static, embassy_stm32::peripherals::PE15>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Leds {
|
||||||
|
pub fn new(pin_set: LedPinSet) -> Self {
|
||||||
|
let led_n = Output::new(
|
||||||
|
pin_set.pin_n,
|
||||||
|
embassy_stm32::gpio::Level::Low,
|
||||||
|
embassy_stm32::gpio::Speed::Medium,
|
||||||
|
);
|
||||||
|
let led_ne = Output::new(
|
||||||
|
pin_set.pin_ne,
|
||||||
|
embassy_stm32::gpio::Level::Low,
|
||||||
|
embassy_stm32::gpio::Speed::Medium,
|
||||||
|
);
|
||||||
|
let led_e = Output::new(
|
||||||
|
pin_set.pin_e,
|
||||||
|
embassy_stm32::gpio::Level::Low,
|
||||||
|
embassy_stm32::gpio::Speed::Medium,
|
||||||
|
);
|
||||||
|
let led_se = Output::new(
|
||||||
|
pin_set.pin_se,
|
||||||
|
embassy_stm32::gpio::Level::Low,
|
||||||
|
embassy_stm32::gpio::Speed::Medium,
|
||||||
|
);
|
||||||
|
let led_s = Output::new(
|
||||||
|
pin_set.pin_s,
|
||||||
|
embassy_stm32::gpio::Level::Low,
|
||||||
|
embassy_stm32::gpio::Speed::Medium,
|
||||||
|
);
|
||||||
|
let led_sw = Output::new(
|
||||||
|
pin_set.pin_sw,
|
||||||
|
embassy_stm32::gpio::Level::Low,
|
||||||
|
embassy_stm32::gpio::Speed::Medium,
|
||||||
|
);
|
||||||
|
let led_w = Output::new(
|
||||||
|
pin_set.pin_w,
|
||||||
|
embassy_stm32::gpio::Level::Low,
|
||||||
|
embassy_stm32::gpio::Speed::Medium,
|
||||||
|
);
|
||||||
|
let led_nw = Output::new(
|
||||||
|
pin_set.pin_nw,
|
||||||
|
embassy_stm32::gpio::Level::Low,
|
||||||
|
embassy_stm32::gpio::Speed::Medium,
|
||||||
|
);
|
||||||
|
Self {
|
||||||
|
north: led_n,
|
||||||
|
north_east: led_ne,
|
||||||
|
east: led_e,
|
||||||
|
south_east: led_se,
|
||||||
|
south: led_s,
|
||||||
|
south_west: led_sw,
|
||||||
|
west: led_w,
|
||||||
|
north_west: led_nw,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// same panicking *behavior* as `panic-probe` but doesn't print a panic message
|
// same panicking *behavior* as `panic-probe` but doesn't print a panic message
|
||||||
// this prevents the panic message being printed *twice* when `defmt::panic` is invoked
|
// this prevents the panic message being printed *twice* when `defmt::panic` is invoked
|
||||||
#[defmt::panic_handler]
|
#[defmt::panic_handler]
|
||||||
|
@@ -1,8 +1,6 @@
|
|||||||
#![no_std]
|
#![no_std]
|
||||||
#![no_main]
|
#![no_main]
|
||||||
use satrs::pus::verification::{
|
use satrs::pus::verification::{FailParams, VerificationReportCreator};
|
||||||
FailParams, TcStateAccepted, VerificationReportCreator, VerificationToken,
|
|
||||||
};
|
|
||||||
use satrs::spacepackets::ecss::tc::PusTcReader;
|
use satrs::spacepackets::ecss::tc::PusTcReader;
|
||||||
use satrs::spacepackets::ecss::tm::{PusTmCreator, PusTmSecondaryHeader};
|
use satrs::spacepackets::ecss::tm::{PusTmCreator, PusTmSecondaryHeader};
|
||||||
use satrs::spacepackets::ecss::EcssEnumU16;
|
use satrs::spacepackets::ecss::EcssEnumU16;
|
||||||
@@ -13,16 +11,12 @@ use satrs_stm32f3_disco_rtic as _;
|
|||||||
|
|
||||||
use rtic::app;
|
use rtic::app;
|
||||||
|
|
||||||
use heapless::{mpmc::Q8, Vec};
|
use heapless::Vec;
|
||||||
#[allow(unused_imports)]
|
#[allow(unused_imports)]
|
||||||
use rtic_monotonics::fugit::{MillisDurationU32, TimerInstantU32};
|
use rtic_monotonics::fugit::{MillisDurationU32, TimerInstantU32};
|
||||||
use rtic_monotonics::systick::prelude::*;
|
use rtic_monotonics::systick::prelude::*;
|
||||||
use satrs::seq_count::SequenceCountProviderCore;
|
|
||||||
use satrs::spacepackets::{ecss::PusPacket, ecss::WritablePusPacket};
|
use satrs::spacepackets::{ecss::PusPacket, ecss::WritablePusPacket};
|
||||||
use stm32f3xx_hal::dma::dma1;
|
use spacepackets::seq_count::SequenceCountProvider;
|
||||||
use stm32f3xx_hal::gpio::{PushPull, AF7, PA2, PA3};
|
|
||||||
use stm32f3xx_hal::pac::USART2;
|
|
||||||
use stm32f3xx_hal::serial::{Rx, RxEvent, Serial, SerialDmaRx, SerialDmaTx, Tx, TxEvent};
|
|
||||||
|
|
||||||
const UART_BAUD: u32 = 115200;
|
const UART_BAUD: u32 = 115200;
|
||||||
const DEFAULT_BLINK_FREQ_MS: u32 = 1000;
|
const DEFAULT_BLINK_FREQ_MS: u32 = 1000;
|
||||||
@@ -30,33 +24,24 @@ const TX_HANDLER_FREQ_MS: u32 = 20;
|
|||||||
const MIN_DELAY_BETWEEN_TX_PACKETS_MS: u32 = 5;
|
const MIN_DELAY_BETWEEN_TX_PACKETS_MS: u32 = 5;
|
||||||
const MAX_TC_LEN: usize = 128;
|
const MAX_TC_LEN: usize = 128;
|
||||||
const MAX_TM_LEN: usize = 128;
|
const MAX_TM_LEN: usize = 128;
|
||||||
pub const PUS_APID: u16 = 0x02;
|
|
||||||
|
|
||||||
type TxType = Tx<USART2, PA2<AF7<PushPull>>>;
|
pub const PUS_APID: u16 = 0x02;
|
||||||
type RxType = Rx<USART2, PA3<AF7<PushPull>>>;
|
|
||||||
type InstantFugit = TimerInstantU32<1000>;
|
|
||||||
type TxDmaTransferType = SerialDmaTx<&'static [u8], dma1::C7, TxType>;
|
|
||||||
type RxDmaTransferType = SerialDmaRx<&'static mut [u8], dma1::C6, RxType>;
|
|
||||||
|
|
||||||
// This is the predictable maximum overhead of the COBS encoding scheme.
|
// This is the predictable maximum overhead of the COBS encoding scheme.
|
||||||
// It is simply the maximum packet lenght dividied by 254 rounded up.
|
// It is simply the maximum packet lenght dividied by 254 rounded up.
|
||||||
const COBS_TC_OVERHEAD: usize = (MAX_TC_LEN + 254 - 1) / 254;
|
const COBS_TC_OVERHEAD: usize = cobs::max_encoding_overhead(MAX_TC_LEN);
|
||||||
const COBS_TM_OVERHEAD: usize = (MAX_TM_LEN + 254 - 1) / 254;
|
const COBS_TM_OVERHEAD: usize = cobs::max_encoding_overhead(MAX_TM_LEN);
|
||||||
|
|
||||||
const TC_BUF_LEN: usize = MAX_TC_LEN + COBS_TC_OVERHEAD;
|
const TC_BUF_LEN: usize = MAX_TC_LEN + COBS_TC_OVERHEAD;
|
||||||
const TM_BUF_LEN: usize = MAX_TC_LEN + COBS_TM_OVERHEAD;
|
const TM_BUF_LEN: usize = MAX_TC_LEN + COBS_TM_OVERHEAD;
|
||||||
|
|
||||||
// This is a static buffer which should ONLY (!) be used as the TX DMA
|
const TC_DMA_BUF_LEN: usize = 512;
|
||||||
// transfer buffer.
|
|
||||||
static mut DMA_TX_BUF: [u8; TM_BUF_LEN] = [0; TM_BUF_LEN];
|
|
||||||
// This is a static buffer which should ONLY (!) be used as the RX DMA
|
|
||||||
// transfer buffer.
|
|
||||||
static mut DMA_RX_BUF: [u8; TC_BUF_LEN] = [0; TC_BUF_LEN];
|
|
||||||
|
|
||||||
type TmPacket = Vec<u8, MAX_TM_LEN>;
|
type TmPacket = heapless::Vec<u8, MAX_TM_LEN>;
|
||||||
type TcPacket = Vec<u8, MAX_TC_LEN>;
|
type TcPacket = heapless::Vec<u8, MAX_TC_LEN>;
|
||||||
|
|
||||||
static TM_REQUESTS: Q8<TmPacket> = Q8::new();
|
static TM_REQUESTS: static_cell::ConstStaticCell<heapless::spsc::Queue<TmPacket, 8>> =
|
||||||
|
static_cell::ConstStaticCell::new(heapless::spsc::Queue::new());
|
||||||
|
|
||||||
use core::sync::atomic::{AtomicU16, Ordering};
|
use core::sync::atomic::{AtomicU16, Ordering};
|
||||||
|
|
||||||
@@ -74,7 +59,10 @@ impl SeqCountProviderAtomicRef {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl SequenceCountProviderCore<u16> for SeqCountProviderAtomicRef {
|
impl SequenceCountProvider for SeqCountProviderAtomicRef {
|
||||||
|
type Raw = u16;
|
||||||
|
const MAX_BIT_WIDTH: usize = 16;
|
||||||
|
|
||||||
fn get(&self) -> u16 {
|
fn get(&self) -> u16 {
|
||||||
self.atomic.load(self.ordering)
|
self.atomic.load(self.ordering)
|
||||||
}
|
}
|
||||||
@@ -92,8 +80,8 @@ static SEQ_COUNT_PROVIDER: SeqCountProviderAtomicRef =
|
|||||||
SeqCountProviderAtomicRef::new(Ordering::Relaxed);
|
SeqCountProviderAtomicRef::new(Ordering::Relaxed);
|
||||||
|
|
||||||
pub struct TxIdle {
|
pub struct TxIdle {
|
||||||
tx: TxType,
|
//tx: TxType,
|
||||||
dma_channel: dma1::C7,
|
//dma_channel: dma1::C7,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, defmt::Format)]
|
#[derive(Debug, defmt::Format)]
|
||||||
@@ -108,49 +96,8 @@ impl From<ByteConversionError> for TmSendError {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn send_tm(tm_creator: PusTmCreator) -> Result<(), TmSendError> {
|
|
||||||
if tm_creator.len_written() > MAX_TM_LEN {
|
|
||||||
return Err(ByteConversionError::ToSliceTooSmall {
|
|
||||||
expected: tm_creator.len_written(),
|
|
||||||
found: MAX_TM_LEN,
|
|
||||||
}
|
|
||||||
.into());
|
|
||||||
}
|
|
||||||
let mut tm_vec = TmPacket::new();
|
|
||||||
tm_vec
|
|
||||||
.resize(tm_creator.len_written(), 0)
|
|
||||||
.expect("vec resize failed");
|
|
||||||
tm_creator.write_to_bytes(tm_vec.as_mut_slice())?;
|
|
||||||
defmt::info!(
|
|
||||||
"Sending TM[{},{}] with size {}",
|
|
||||||
tm_creator.service(),
|
|
||||||
tm_creator.subservice(),
|
|
||||||
tm_creator.len_written()
|
|
||||||
);
|
|
||||||
TM_REQUESTS
|
|
||||||
.enqueue(tm_vec)
|
|
||||||
.map_err(|_| TmSendError::Queue)?;
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
fn handle_tm_send_error(error: TmSendError) {
|
|
||||||
defmt::warn!("sending tm failed with error {}", error);
|
|
||||||
}
|
|
||||||
|
|
||||||
pub enum UartTxState {
|
|
||||||
// Wrapped in an option because we need an owned type later.
|
|
||||||
Idle(Option<TxIdle>),
|
|
||||||
// Same as above
|
|
||||||
Transmitting(Option<TxDmaTransferType>),
|
|
||||||
}
|
|
||||||
|
|
||||||
pub struct UartTxShared {
|
|
||||||
last_completed: Option<InstantFugit>,
|
|
||||||
state: UartTxState,
|
|
||||||
}
|
|
||||||
|
|
||||||
pub struct RequestWithToken {
|
pub struct RequestWithToken {
|
||||||
token: VerificationToken<TcStateAccepted>,
|
request_id: satrs::pus::verification::RequestId,
|
||||||
request: Request,
|
request: Request,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -168,147 +115,69 @@ pub enum RequestError {
|
|||||||
NotEnoughAppData = 4,
|
NotEnoughAppData = 4,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn convert_pus_tc_to_request(
|
#[app(device = embassy_stm32)]
|
||||||
tc: &PusTcReader,
|
|
||||||
verif_reporter: &mut VerificationReportCreator,
|
|
||||||
src_data_buf: &mut [u8],
|
|
||||||
timestamp: &[u8],
|
|
||||||
) -> Result<RequestWithToken, RequestError> {
|
|
||||||
defmt::info!(
|
|
||||||
"Found PUS TC [{},{}] with length {}",
|
|
||||||
tc.service(),
|
|
||||||
tc.subservice(),
|
|
||||||
tc.len_packed()
|
|
||||||
);
|
|
||||||
|
|
||||||
let token = verif_reporter.add_tc(tc);
|
|
||||||
if tc.apid() != PUS_APID {
|
|
||||||
defmt::warn!("Received tc with unknown APID {}", tc.apid());
|
|
||||||
let result = send_tm(
|
|
||||||
verif_reporter
|
|
||||||
.acceptance_failure(
|
|
||||||
src_data_buf,
|
|
||||||
token,
|
|
||||||
SEQ_COUNT_PROVIDER.get_and_increment(),
|
|
||||||
0,
|
|
||||||
FailParams::new(timestamp, &EcssEnumU16::new(0), &[]),
|
|
||||||
)
|
|
||||||
.unwrap(),
|
|
||||||
);
|
|
||||||
if let Err(e) = result {
|
|
||||||
handle_tm_send_error(e);
|
|
||||||
}
|
|
||||||
return Err(RequestError::InvalidApid);
|
|
||||||
}
|
|
||||||
let (tm_creator, accepted_token) = verif_reporter
|
|
||||||
.acceptance_success(
|
|
||||||
src_data_buf,
|
|
||||||
token,
|
|
||||||
SEQ_COUNT_PROVIDER.get_and_increment(),
|
|
||||||
0,
|
|
||||||
timestamp,
|
|
||||||
)
|
|
||||||
.unwrap();
|
|
||||||
|
|
||||||
if let Err(e) = send_tm(tm_creator) {
|
|
||||||
handle_tm_send_error(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
if tc.service() == 17 && tc.subservice() == 1 {
|
|
||||||
if tc.subservice() == 1 {
|
|
||||||
return Ok(RequestWithToken {
|
|
||||||
request: Request::Ping,
|
|
||||||
token: accepted_token,
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
return Err(RequestError::InvalidSubservice);
|
|
||||||
}
|
|
||||||
} else if tc.service() == 8 {
|
|
||||||
if tc.subservice() == 1 {
|
|
||||||
if tc.user_data().len() < 4 {
|
|
||||||
return Err(RequestError::NotEnoughAppData);
|
|
||||||
}
|
|
||||||
let new_freq_ms = u32::from_be_bytes(tc.user_data()[0..4].try_into().unwrap());
|
|
||||||
return Ok(RequestWithToken {
|
|
||||||
request: Request::ChangeBlinkFrequency(new_freq_ms),
|
|
||||||
token: accepted_token,
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
return Err(RequestError::InvalidSubservice);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return Err(RequestError::InvalidService);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[app(device = stm32f3xx_hal::pac, peripherals = true)]
|
|
||||||
mod app {
|
mod app {
|
||||||
use super::*;
|
use super::*;
|
||||||
use core::slice::Iter;
|
use satrs::pus::verification::VerificationReportCreator;
|
||||||
use satrs::pus::verification::{TcStateStarted, VerificationReportCreator};
|
|
||||||
use satrs::spacepackets::{ecss::tc::PusTcReader, time::cds::P_FIELD_BASE};
|
use satrs::spacepackets::{ecss::tc::PusTcReader, time::cds::P_FIELD_BASE};
|
||||||
#[allow(unused_imports)]
|
use satrs_stm32f3_disco_rtic::LedPinSet;
|
||||||
use stm32f3_discovery::leds::Direction;
|
|
||||||
use stm32f3_discovery::leds::Leds;
|
|
||||||
use stm32f3xx_hal::prelude::*;
|
|
||||||
|
|
||||||
use stm32f3_discovery::switch_hal::OutputSwitch;
|
|
||||||
use stm32f3xx_hal::Switch;
|
|
||||||
#[allow(dead_code)]
|
|
||||||
type SerialType = Serial<USART2, (PA2<AF7<PushPull>>, PA3<AF7<PushPull>>)>;
|
|
||||||
|
|
||||||
systick_monotonic!(Mono, 1000);
|
systick_monotonic!(Mono, 1000);
|
||||||
|
|
||||||
|
embassy_stm32::bind_interrupts!(struct Irqs {
|
||||||
|
USART2 => embassy_stm32::usart::InterruptHandler<embassy_stm32::peripherals::USART2>;
|
||||||
|
});
|
||||||
|
|
||||||
#[shared]
|
#[shared]
|
||||||
struct Shared {
|
struct Shared {
|
||||||
blink_freq: MillisDurationU32,
|
blink_freq: MillisDurationU32,
|
||||||
tx_shared: UartTxShared,
|
|
||||||
rx_transfer: Option<RxDmaTransferType>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[local]
|
#[local]
|
||||||
struct Local {
|
struct Local {
|
||||||
verif_reporter: VerificationReportCreator,
|
verif_reporter: VerificationReportCreator,
|
||||||
leds: Leds,
|
leds: satrs_stm32f3_disco_rtic::Leds,
|
||||||
last_dir: Direction,
|
current_dir: satrs_stm32f3_disco_rtic::Direction,
|
||||||
curr_dir: Iter<'static, Direction>,
|
tm_prod: heapless::spsc::Producer<'static, TmPacket>,
|
||||||
|
tm_cons: heapless::spsc::Consumer<'static, TmPacket>,
|
||||||
|
tx: embassy_stm32::usart::UartTx<'static, embassy_stm32::mode::Async>,
|
||||||
|
rx: embassy_stm32::usart::RingBufferedUartRx<'static>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[init]
|
#[init]
|
||||||
fn init(cx: init::Context) -> (Shared, Local) {
|
fn init(cx: init::Context) -> (Shared, Local) {
|
||||||
let mut rcc = cx.device.RCC.constrain();
|
static DMA_BUF: static_cell::ConstStaticCell<[u8; TC_DMA_BUF_LEN]> = static_cell::ConstStaticCell::new([0; TC_DMA_BUF_LEN]);
|
||||||
|
|
||||||
|
let p = embassy_stm32::init(Default::default());
|
||||||
|
|
||||||
// Initialize the systick interrupt & obtain the token to prove that we did
|
// Initialize the systick interrupt & obtain the token to prove that we did
|
||||||
Mono::start(cx.core.SYST, 8_000_000);
|
Mono::start(cx.core.SYST, 8_000_000);
|
||||||
|
|
||||||
let mut flash = cx.device.FLASH.constrain();
|
defmt::info!("Starting sat-rs demo application for the STM32F3-Discovery with RTICv2");
|
||||||
let clocks = rcc
|
let led_pin_set = LedPinSet {
|
||||||
.cfgr
|
pin_n: p.PE8,
|
||||||
.use_hse(8.MHz())
|
pin_ne: p.PE9,
|
||||||
.sysclk(8.MHz())
|
pin_e: p.PE10,
|
||||||
.pclk1(8.MHz())
|
pin_se: p.PE11,
|
||||||
.freeze(&mut flash.acr);
|
pin_s: p.PE12,
|
||||||
|
pin_sw: p.PE13,
|
||||||
|
pin_w: p.PE14,
|
||||||
|
pin_nw: p.PE15,
|
||||||
|
};
|
||||||
|
let leds = satrs_stm32f3_disco_rtic::Leds::new(led_pin_set);
|
||||||
|
|
||||||
// Set up monotonic timer.
|
let config = embassy_stm32::usart::Config::default();
|
||||||
//let mono_timer = MonoTimer::new(cx.core.DWT, clocks, &mut cx.core.DCB);
|
let uart = embassy_stm32::usart::Uart::new(
|
||||||
|
p.USART2, p.PA3, p.PA2, Irqs, p.DMA1_CH7, p.DMA1_CH6, config,
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
defmt::info!("Starting sat-rs demo application for the STM32F3-Discovery");
|
let (tx, rx) = uart.split();
|
||||||
let mut gpioe = cx.device.GPIOE.split(&mut rcc.ahb);
|
let tm_queue = TM_REQUESTS.take();
|
||||||
|
let (tm_prod, tm_cons) = tm_queue.split();
|
||||||
let leds = Leds::new(
|
//let mut gpioa = cx.device.GPIOA.split(&mut rcc.ahb);
|
||||||
gpioe.pe8,
|
|
||||||
gpioe.pe9,
|
|
||||||
gpioe.pe10,
|
|
||||||
gpioe.pe11,
|
|
||||||
gpioe.pe12,
|
|
||||||
gpioe.pe13,
|
|
||||||
gpioe.pe14,
|
|
||||||
gpioe.pe15,
|
|
||||||
&mut gpioe.moder,
|
|
||||||
&mut gpioe.otyper,
|
|
||||||
);
|
|
||||||
let mut gpioa = cx.device.GPIOA.split(&mut rcc.ahb);
|
|
||||||
// USART2 pins
|
// USART2 pins
|
||||||
|
/*
|
||||||
let mut pins = (
|
let mut pins = (
|
||||||
// TX pin: PA2
|
// TX pin: PA2
|
||||||
gpioa
|
gpioa
|
||||||
@@ -319,7 +188,9 @@ mod app {
|
|||||||
.pa3
|
.pa3
|
||||||
.into_af_push_pull(&mut gpioa.moder, &mut gpioa.otyper, &mut gpioa.afrl),
|
.into_af_push_pull(&mut gpioa.moder, &mut gpioa.otyper, &mut gpioa.afrl),
|
||||||
);
|
);
|
||||||
pins.1.internal_pull_up(&mut gpioa.pupdr, true);
|
*/
|
||||||
|
//pins.1.internal_pull_up(&mut gpioa.pupdr, true);
|
||||||
|
/*
|
||||||
let mut usart2 = Serial::new(
|
let mut usart2 = Serial::new(
|
||||||
cx.device.USART2,
|
cx.device.USART2,
|
||||||
pins,
|
pins,
|
||||||
@@ -330,18 +201,19 @@ mod app {
|
|||||||
usart2.configure_rx_interrupt(RxEvent::Idle, Switch::On);
|
usart2.configure_rx_interrupt(RxEvent::Idle, Switch::On);
|
||||||
// This interrupt is enabled to re-schedule new transfers in the interrupt handler immediately.
|
// This interrupt is enabled to re-schedule new transfers in the interrupt handler immediately.
|
||||||
usart2.configure_tx_interrupt(TxEvent::TransmissionComplete, Switch::On);
|
usart2.configure_tx_interrupt(TxEvent::TransmissionComplete, Switch::On);
|
||||||
|
*/
|
||||||
|
|
||||||
let dma1 = cx.device.DMA1.split(&mut rcc.ahb);
|
//let dma1 = cx.device.DMA1.split(&mut rcc.ahb);
|
||||||
let (mut tx_serial, mut rx_serial) = usart2.split();
|
//let (mut tx_serial, mut rx_serial) = usart2.split();
|
||||||
|
|
||||||
// This interrupt is immediately triggered, clear it. It will only be reset
|
// This interrupt is immediately triggered, clear it. It will only be reset
|
||||||
// by the hardware when data is received on RX (RXNE event)
|
// by the hardware when data is received on RX (RXNE event)
|
||||||
rx_serial.clear_event(RxEvent::Idle);
|
//rx_serial.clear_event(RxEvent::Idle);
|
||||||
// For some reason, this is also immediately triggered..
|
// For some reason, this is also immediately triggered..
|
||||||
tx_serial.clear_event(TxEvent::TransmissionComplete);
|
//tx_serial.clear_event(TxEvent::TransmissionComplete);
|
||||||
let rx_transfer = rx_serial.read_exact(unsafe { DMA_RX_BUF.as_mut_slice() }, dma1.ch6);
|
//let rx_transfer = rx_serial.read_exact(unsafe { DMA_RX_BUF.as_mut_slice() }, dma1.ch6);
|
||||||
defmt::info!("Spawning tasks");
|
defmt::info!("Spawning tasks");
|
||||||
blink::spawn().unwrap();
|
blinky::spawn().unwrap();
|
||||||
serial_tx_handler::spawn().unwrap();
|
serial_tx_handler::spawn().unwrap();
|
||||||
|
|
||||||
let verif_reporter = VerificationReportCreator::new(PUS_APID).unwrap();
|
let verif_reporter = VerificationReportCreator::new(PUS_APID).unwrap();
|
||||||
@@ -349,118 +221,49 @@ mod app {
|
|||||||
(
|
(
|
||||||
Shared {
|
Shared {
|
||||||
blink_freq: MillisDurationU32::from_ticks(DEFAULT_BLINK_FREQ_MS),
|
blink_freq: MillisDurationU32::from_ticks(DEFAULT_BLINK_FREQ_MS),
|
||||||
tx_shared: UartTxShared {
|
|
||||||
last_completed: None,
|
|
||||||
state: UartTxState::Idle(Some(TxIdle {
|
|
||||||
tx: tx_serial,
|
|
||||||
dma_channel: dma1.ch7,
|
|
||||||
})),
|
|
||||||
},
|
|
||||||
rx_transfer: Some(rx_transfer),
|
|
||||||
},
|
},
|
||||||
Local {
|
Local {
|
||||||
verif_reporter,
|
verif_reporter,
|
||||||
leds,
|
leds,
|
||||||
last_dir: Direction::North,
|
tm_prod,
|
||||||
curr_dir: Direction::iter(),
|
tm_cons,
|
||||||
|
tx,
|
||||||
|
rx: rx.into_ring_buffered(DMA_BUF.take()),
|
||||||
|
current_dir: satrs_stm32f3_disco_rtic::Direction::North,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[task(local = [leds, curr_dir, last_dir], shared=[blink_freq])]
|
#[task(local = [leds, current_dir], shared=[blink_freq])]
|
||||||
async fn blink(mut cx: blink::Context) {
|
async fn blinky(mut cx: blinky::Context) {
|
||||||
let blink::LocalResources {
|
|
||||||
leds,
|
|
||||||
curr_dir,
|
|
||||||
last_dir,
|
|
||||||
..
|
|
||||||
} = cx.local;
|
|
||||||
let mut toggle_leds = |dir: &Direction| {
|
|
||||||
let last_led = leds.for_direction(*last_dir);
|
|
||||||
last_led.off().ok();
|
|
||||||
let led = leds.for_direction(*dir);
|
|
||||||
led.on().ok();
|
|
||||||
*last_dir = *dir;
|
|
||||||
};
|
|
||||||
loop {
|
loop {
|
||||||
match curr_dir.next() {
|
cx.local.leds.blink_next(cx.local.current_dir);
|
||||||
Some(dir) => {
|
|
||||||
toggle_leds(dir);
|
|
||||||
}
|
|
||||||
None => {
|
|
||||||
*curr_dir = Direction::iter();
|
|
||||||
toggle_leds(curr_dir.next().unwrap());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
let current_blink_freq = cx.shared.blink_freq.lock(|current| *current);
|
let current_blink_freq = cx.shared.blink_freq.lock(|current| *current);
|
||||||
Mono::delay(current_blink_freq).await;
|
Mono::delay(current_blink_freq).await;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[task(
|
#[task(
|
||||||
shared = [tx_shared],
|
local = [
|
||||||
|
tm_cons,
|
||||||
|
tx,
|
||||||
|
dma_buf: [u8; TM_BUF_LEN] = [0; TM_BUF_LEN]
|
||||||
|
],
|
||||||
|
shared = [],
|
||||||
)]
|
)]
|
||||||
async fn serial_tx_handler(mut cx: serial_tx_handler::Context) {
|
async fn serial_tx_handler(cx: serial_tx_handler::Context) {
|
||||||
loop {
|
loop {
|
||||||
let is_idle = cx.shared.tx_shared.lock(|tx_shared| {
|
while let Some(vec) = cx.local.tm_cons.dequeue() {
|
||||||
if let UartTxState::Idle(_) = tx_shared.state {
|
cx.local.dma_buf[0] = 0;
|
||||||
return true;
|
let encoded_len = cobs::encode(&vec[0..vec.len()], &mut cx.local.dma_buf[1..]);
|
||||||
}
|
|
||||||
false
|
|
||||||
});
|
|
||||||
if is_idle {
|
|
||||||
let last_completed = cx.shared.tx_shared.lock(|shared| shared.last_completed);
|
|
||||||
if let Some(last_completed) = last_completed {
|
|
||||||
let elapsed_ms = (Mono::now() - last_completed).to_millis();
|
|
||||||
if elapsed_ms < MIN_DELAY_BETWEEN_TX_PACKETS_MS {
|
|
||||||
Mono::delay((MIN_DELAY_BETWEEN_TX_PACKETS_MS - elapsed_ms).millis()).await;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// Check for completion after 1 ms
|
|
||||||
Mono::delay(1.millis()).await;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if let Some(vec) = TM_REQUESTS.dequeue() {
|
|
||||||
cx.shared
|
|
||||||
.tx_shared
|
|
||||||
.lock(|tx_shared| match &mut tx_shared.state {
|
|
||||||
UartTxState::Idle(tx) => {
|
|
||||||
let encoded_len;
|
|
||||||
//debug!(target: "serial_tx_handler", "bytes: {:x?}", &buf[0..len]);
|
|
||||||
// Safety: We only copy the data into the TX DMA buffer in this task.
|
|
||||||
// If the DMA is active, another branch will be taken.
|
|
||||||
unsafe {
|
|
||||||
// 0 sentinel value as start marker
|
|
||||||
DMA_TX_BUF[0] = 0;
|
|
||||||
encoded_len =
|
|
||||||
cobs::encode(&vec[0..vec.len()], &mut DMA_TX_BUF[1..]);
|
|
||||||
// Should never panic, we accounted for the overhead.
|
// Should never panic, we accounted for the overhead.
|
||||||
// Write into transfer buffer directly, no need for intermediate
|
// Write into transfer buffer directly, no need for intermediate
|
||||||
// encoding buffer.
|
// encoding buffer.
|
||||||
// 0 end marker
|
// 0 end marker
|
||||||
DMA_TX_BUF[encoded_len + 1] = 0;
|
cx.local.dma_buf[encoded_len + 1] = 0;
|
||||||
}
|
cx.local.tx.write(&vec[0..encoded_len + 2]).await.unwrap();
|
||||||
//debug!(target: "serial_tx_handler", "Sending {} bytes", encoded_len + 2);
|
|
||||||
//debug!("sent: {:x?}", &mut_tx_dma_buf[0..encoded_len + 2]);
|
|
||||||
let tx_idle = tx.take().unwrap();
|
|
||||||
// Transfer completion and re-scheduling of new TX transfers will be done
|
|
||||||
// by the IRQ handler.
|
|
||||||
// SAFETY: The DMA is the exclusive writer to the DMA buffer now.
|
|
||||||
let transfer = tx_idle.tx.write_all(
|
|
||||||
unsafe { &DMA_TX_BUF[0..encoded_len + 2] },
|
|
||||||
tx_idle.dma_channel,
|
|
||||||
);
|
|
||||||
tx_shared.state = UartTxState::Transmitting(Some(transfer));
|
|
||||||
// The memory block is automatically returned to the pool when it is dropped.
|
|
||||||
}
|
|
||||||
UartTxState::Transmitting(_) => (),
|
|
||||||
});
|
|
||||||
// Check for completion after 1 ms
|
|
||||||
Mono::delay(1.millis()).await;
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
// Nothing to do, and we are idle.
|
|
||||||
Mono::delay(TX_HANDLER_FREQ_MS.millis()).await;
|
Mono::delay(TX_HANDLER_FREQ_MS.millis()).await;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -468,6 +271,9 @@ mod app {
|
|||||||
#[task(
|
#[task(
|
||||||
local = [
|
local = [
|
||||||
verif_reporter,
|
verif_reporter,
|
||||||
|
tm_prod,
|
||||||
|
rx,
|
||||||
|
read_buf: [u8; 128] = [0; 128],
|
||||||
decode_buf: [u8; MAX_TC_LEN] = [0; MAX_TC_LEN],
|
decode_buf: [u8; MAX_TC_LEN] = [0; MAX_TC_LEN],
|
||||||
src_data_buf: [u8; MAX_TM_LEN] = [0; MAX_TM_LEN],
|
src_data_buf: [u8; MAX_TM_LEN] = [0; MAX_TM_LEN],
|
||||||
timestamp: [u8; 7] = [0; 7],
|
timestamp: [u8; 7] = [0; 7],
|
||||||
@@ -478,6 +284,18 @@ mod app {
|
|||||||
mut cx: serial_rx_handler::Context,
|
mut cx: serial_rx_handler::Context,
|
||||||
received_packet: Vec<u8, MAX_TC_LEN>,
|
received_packet: Vec<u8, MAX_TC_LEN>,
|
||||||
) {
|
) {
|
||||||
|
let decoder = cobs::CobsDecoder::new(cx.local.decode_buf);
|
||||||
|
loop {
|
||||||
|
let read_bytes = cx.local.rx.read(cx.local.read_buf).await;
|
||||||
|
match decoder.push(&cx.local.read_buf[0..read_bytes]) {
|
||||||
|
Ok(None) => (),
|
||||||
|
Ok(Some(report)) => {
|
||||||
|
|
||||||
|
}
|
||||||
|
Err(_) => {},
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
cx.local.timestamp[0] = P_FIELD_BASE;
|
cx.local.timestamp[0] = P_FIELD_BASE;
|
||||||
defmt::info!("Received packet with {} bytes", received_packet.len());
|
defmt::info!("Received packet with {} bytes", received_packet.len());
|
||||||
let decode_buf = cx.local.decode_buf;
|
let decode_buf = cx.local.decode_buf;
|
||||||
@@ -494,21 +312,24 @@ mod app {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let start_idx = start_idx.unwrap();
|
let start_idx = start_idx.unwrap();
|
||||||
|
decoder.push(data)
|
||||||
match cobs::decode(&received_packet.as_slice()[start_idx..], decode_buf) {
|
match cobs::decode(&received_packet.as_slice()[start_idx..], decode_buf) {
|
||||||
Ok(len) => {
|
Ok(decode_report) => {
|
||||||
defmt::info!("Decoded packet length: {}", len);
|
defmt::info!("Decoded packet length: {}", decode_report.frame_size());
|
||||||
let pus_tc = PusTcReader::new(decode_buf);
|
let pus_tc = PusTcReader::new(decode_buf);
|
||||||
match pus_tc {
|
match pus_tc {
|
||||||
Ok((tc, _tc_len)) => {
|
Ok(tc) => {
|
||||||
match convert_pus_tc_to_request(
|
match convert_pus_tc_to_request(
|
||||||
&tc,
|
&tc,
|
||||||
cx.local.verif_reporter,
|
cx.local.verif_reporter,
|
||||||
|
cx.local.tm_prod,
|
||||||
cx.local.src_data_buf,
|
cx.local.src_data_buf,
|
||||||
cx.local.timestamp,
|
cx.local.timestamp,
|
||||||
) {
|
) {
|
||||||
Ok(request_with_token) => {
|
Ok(request_with_token) => {
|
||||||
let started_token = handle_start_verification(
|
handle_start_verification(
|
||||||
request_with_token.token,
|
request_with_token.request_id,
|
||||||
|
cx.local.tm_prod,
|
||||||
cx.local.verif_reporter,
|
cx.local.verif_reporter,
|
||||||
cx.local.src_data_buf,
|
cx.local.src_data_buf,
|
||||||
cx.local.timestamp,
|
cx.local.timestamp,
|
||||||
@@ -516,7 +337,7 @@ mod app {
|
|||||||
|
|
||||||
match request_with_token.request {
|
match request_with_token.request {
|
||||||
Request::Ping => {
|
Request::Ping => {
|
||||||
handle_ping_request(cx.local.timestamp);
|
handle_ping_request(cx.local.tm_prod, cx.local.timestamp);
|
||||||
}
|
}
|
||||||
Request::ChangeBlinkFrequency(new_freq_ms) => {
|
Request::ChangeBlinkFrequency(new_freq_ms) => {
|
||||||
defmt::info!("Received blink frequency change request with new frequncy {}", new_freq_ms);
|
defmt::info!("Received blink frequency change request with new frequncy {}", new_freq_ms);
|
||||||
@@ -527,7 +348,8 @@ mod app {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
handle_completion_verification(
|
handle_completion_verification(
|
||||||
started_token,
|
request_with_token.request_id,
|
||||||
|
cx.local.tm_prod,
|
||||||
cx.local.verif_reporter,
|
cx.local.verif_reporter,
|
||||||
cx.local.src_data_buf,
|
cx.local.src_data_buf,
|
||||||
cx.local.timestamp,
|
cx.local.timestamp,
|
||||||
@@ -550,7 +372,10 @@ mod app {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn handle_ping_request(timestamp: &[u8]) {
|
fn handle_ping_request(
|
||||||
|
tm_prod: &mut heapless::spsc::Producer<'static, TmPacket>,
|
||||||
|
timestamp: &[u8],
|
||||||
|
) {
|
||||||
defmt::info!("Received PUS ping telecommand, sending ping reply TM[17,2]");
|
defmt::info!("Received PUS ping telecommand, sending ping reply TM[17,2]");
|
||||||
let sp_header =
|
let sp_header =
|
||||||
SpHeader::new_for_unseg_tc(PUS_APID, SEQ_COUNT_PROVIDER.get_and_increment(), 0);
|
SpHeader::new_for_unseg_tc(PUS_APID, SEQ_COUNT_PROVIDER.get_and_increment(), 0);
|
||||||
@@ -561,36 +386,36 @@ mod app {
|
|||||||
.resize(ping_reply.len_written(), 0)
|
.resize(ping_reply.len_written(), 0)
|
||||||
.expect("vec resize failed");
|
.expect("vec resize failed");
|
||||||
ping_reply.write_to_bytes(&mut tm_packet).unwrap();
|
ping_reply.write_to_bytes(&mut tm_packet).unwrap();
|
||||||
if TM_REQUESTS.enqueue(tm_packet).is_err() {
|
if tm_prod.enqueue(tm_packet).is_err() {
|
||||||
defmt::warn!("TC queue full");
|
defmt::warn!("TC queue full");
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn handle_start_verification(
|
fn handle_start_verification(
|
||||||
accepted_token: VerificationToken<TcStateAccepted>,
|
request_id: satrs::pus::verification::RequestId,
|
||||||
|
tm_prod: &mut heapless::spsc::Producer<TmPacket>,
|
||||||
verif_reporter: &mut VerificationReportCreator,
|
verif_reporter: &mut VerificationReportCreator,
|
||||||
src_data_buf: &mut [u8],
|
src_data_buf: &mut [u8],
|
||||||
timestamp: &[u8],
|
timestamp: &[u8],
|
||||||
) -> VerificationToken<TcStateStarted> {
|
) {
|
||||||
let (tm_creator, started_token) = verif_reporter
|
let tm_creator = verif_reporter
|
||||||
.start_success(
|
.start_success(
|
||||||
src_data_buf,
|
src_data_buf,
|
||||||
accepted_token,
|
&request_id,
|
||||||
SEQ_COUNT_PROVIDER.get(),
|
SEQ_COUNT_PROVIDER.get(),
|
||||||
0,
|
0,
|
||||||
×tamp,
|
timestamp,
|
||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
let result = send_tm(tm_creator);
|
let result = send_tm(tm_creator, tm_prod);
|
||||||
if let Err(e) = result {
|
if let Err(e) = result {
|
||||||
handle_tm_send_error(e);
|
handle_tm_send_error(e);
|
||||||
}
|
}
|
||||||
started_token
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn handle_completion_verification(
|
fn handle_completion_verification(
|
||||||
started_token: VerificationToken<TcStateStarted>,
|
request_id: satrs::pus::verification::RequestId,
|
||||||
|
tm_prod: &mut heapless::spsc::Producer<TmPacket>,
|
||||||
verif_reporter: &mut VerificationReportCreator,
|
verif_reporter: &mut VerificationReportCreator,
|
||||||
src_data_buf: &mut [u8],
|
src_data_buf: &mut [u8],
|
||||||
timestamp: &[u8],
|
timestamp: &[u8],
|
||||||
@@ -599,20 +424,23 @@ mod app {
|
|||||||
verif_reporter
|
verif_reporter
|
||||||
.completion_success(
|
.completion_success(
|
||||||
src_data_buf,
|
src_data_buf,
|
||||||
started_token,
|
&request_id,
|
||||||
SEQ_COUNT_PROVIDER.get(),
|
SEQ_COUNT_PROVIDER.get(),
|
||||||
0,
|
0,
|
||||||
timestamp,
|
timestamp,
|
||||||
)
|
)
|
||||||
.unwrap(),
|
.unwrap(),
|
||||||
|
tm_prod,
|
||||||
);
|
);
|
||||||
if let Err(e) = result {
|
if let Err(e) = result {
|
||||||
handle_tm_send_error(e);
|
handle_tm_send_error(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[task(binds = DMA1_CH6, shared = [rx_transfer])]
|
/*
|
||||||
fn rx_dma_isr(mut cx: rx_dma_isr::Context) {
|
#[task(binds = DMA1_CH6, shared = [])]
|
||||||
|
fn rx_dma_isr(cx: rx_dma_isr::Context) {
|
||||||
|
/*
|
||||||
let mut tc_packet = TcPacket::new();
|
let mut tc_packet = TcPacket::new();
|
||||||
cx.shared.rx_transfer.lock(|rx_transfer| {
|
cx.shared.rx_transfer.lock(|rx_transfer| {
|
||||||
let rx_ref = rx_transfer.as_ref().unwrap();
|
let rx_ref = rx_transfer.as_ref().unwrap();
|
||||||
@@ -638,10 +466,14 @@ mod app {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
#[task(binds = USART2_EXTI26, shared = [rx_transfer, tx_shared])]
|
/*
|
||||||
|
#[task(binds = USART2_EXTI26, shared = [])]
|
||||||
fn serial_isr(mut cx: serial_isr::Context) {
|
fn serial_isr(mut cx: serial_isr::Context) {
|
||||||
|
/*
|
||||||
cx.shared
|
cx.shared
|
||||||
.tx_shared
|
.tx_shared
|
||||||
.lock(|tx_shared| match &mut tx_shared.state {
|
.lock(|tx_shared| match &mut tx_shared.state {
|
||||||
@@ -678,5 +510,112 @@ mod app {
|
|||||||
*rx_transfer = Some(rx.read_exact(buf, ch));
|
*rx_transfer = Some(rx.read_exact(buf, ch));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
fn send_tm(
|
||||||
|
tm_creator: PusTmCreator,
|
||||||
|
tm_prod: &mut heapless::spsc::Producer<TmPacket>,
|
||||||
|
) -> Result<(), TmSendError> {
|
||||||
|
if tm_creator.len_written() > MAX_TM_LEN {
|
||||||
|
return Err(ByteConversionError::ToSliceTooSmall {
|
||||||
|
expected: tm_creator.len_written(),
|
||||||
|
found: MAX_TM_LEN,
|
||||||
|
}
|
||||||
|
.into());
|
||||||
|
}
|
||||||
|
let mut tm_vec = TmPacket::new();
|
||||||
|
tm_vec
|
||||||
|
.resize(tm_creator.len_written(), 0)
|
||||||
|
.expect("vec resize failed");
|
||||||
|
tm_creator.write_to_bytes(tm_vec.as_mut_slice())?;
|
||||||
|
defmt::info!(
|
||||||
|
"Sending TM[{},{}] with size {}",
|
||||||
|
tm_creator.service(),
|
||||||
|
tm_creator.subservice(),
|
||||||
|
tm_creator.len_written()
|
||||||
|
);
|
||||||
|
tm_prod.enqueue(tm_vec).map_err(|_| TmSendError::Queue)?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn handle_tm_send_error(error: TmSendError) {
|
||||||
|
defmt::warn!("sending tm failed with error {}", error);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn convert_pus_tc_to_request(
|
||||||
|
tc: &PusTcReader,
|
||||||
|
verif_reporter: &mut VerificationReportCreator,
|
||||||
|
tm_prod: &mut heapless::spsc::Producer<'static, TmPacket>,
|
||||||
|
src_data_buf: &mut [u8],
|
||||||
|
timestamp: &[u8],
|
||||||
|
) -> Result<RequestWithToken, RequestError> {
|
||||||
|
defmt::info!(
|
||||||
|
"Found PUS TC [{},{}] with length {}",
|
||||||
|
tc.service(),
|
||||||
|
tc.subservice(),
|
||||||
|
tc.len_packed()
|
||||||
|
);
|
||||||
|
|
||||||
|
let request_id = verif_reporter.read_request_id(tc);
|
||||||
|
if tc.apid() != PUS_APID {
|
||||||
|
defmt::warn!("Received tc with unknown APID {}", tc.apid());
|
||||||
|
let result = send_tm(
|
||||||
|
verif_reporter
|
||||||
|
.acceptance_failure(
|
||||||
|
src_data_buf,
|
||||||
|
&request_id,
|
||||||
|
SEQ_COUNT_PROVIDER.get_and_increment(),
|
||||||
|
0,
|
||||||
|
FailParams::new(timestamp, &EcssEnumU16::new(0), &[]),
|
||||||
|
)
|
||||||
|
.unwrap(),
|
||||||
|
tm_prod,
|
||||||
|
);
|
||||||
|
if let Err(e) = result {
|
||||||
|
handle_tm_send_error(e);
|
||||||
|
}
|
||||||
|
return Err(RequestError::InvalidApid);
|
||||||
|
}
|
||||||
|
let tm_creator = verif_reporter
|
||||||
|
.acceptance_success(
|
||||||
|
src_data_buf,
|
||||||
|
&request_id,
|
||||||
|
SEQ_COUNT_PROVIDER.get_and_increment(),
|
||||||
|
0,
|
||||||
|
timestamp,
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
if let Err(e) = send_tm(tm_creator, tm_prod) {
|
||||||
|
handle_tm_send_error(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
if tc.service() == 17 && tc.subservice() == 1 {
|
||||||
|
if tc.subservice() == 1 {
|
||||||
|
Ok(RequestWithToken {
|
||||||
|
request_id,
|
||||||
|
request: Request::Ping,
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
Err(RequestError::InvalidSubservice)
|
||||||
|
}
|
||||||
|
} else if tc.service() == 8 {
|
||||||
|
if tc.subservice() == 1 {
|
||||||
|
if tc.user_data().len() < 4 {
|
||||||
|
return Err(RequestError::NotEnoughAppData);
|
||||||
|
}
|
||||||
|
let new_freq_ms = u32::from_be_bytes(tc.user_data()[0..4].try_into().unwrap());
|
||||||
|
Ok(RequestWithToken {
|
||||||
|
request_id,
|
||||||
|
request: Request::ChangeBlinkFrequency(new_freq_ms),
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
Err(RequestError::InvalidSubservice)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Err(RequestError::InvalidService)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
641
embedded-examples/stm32h7-nucleo-rtic/Cargo.lock
generated
641
embedded-examples/stm32h7-nucleo-rtic/Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -16,16 +16,17 @@ harness = false
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
cortex-m = { version = "0.7", features = ["critical-section-single-core"] }
|
cortex-m = { version = "0.7", features = ["critical-section-single-core"] }
|
||||||
cortex-m-rt = "0.7"
|
cortex-m-rt = "0.7"
|
||||||
defmt = "0.3"
|
defmt = "1"
|
||||||
defmt-brtt = { version = "0.1", default-features = false, features = ["rtt"] }
|
defmt-brtt = { version = "0.1", default-features = false, features = ["rtt"] }
|
||||||
panic-probe = { version = "0.3", features = ["print-defmt"] }
|
panic-probe = { version = "1", features = ["print-defmt"] }
|
||||||
cortex-m-semihosting = "0.5.0"
|
cortex-m-semihosting = "0.5.0"
|
||||||
|
# TODO: Replace with embassy-hal.
|
||||||
stm32h7xx-hal = { version="0.16", features= ["stm32h743v", "ethernet"] }
|
stm32h7xx-hal = { version="0.16", features= ["stm32h743v", "ethernet"] }
|
||||||
embedded-alloc = "0.6"
|
embedded-alloc = "0.6"
|
||||||
rtic-sync = { version = "1", features = ["defmt-03"] }
|
rtic-sync = { version = "1", features = ["defmt-03"] }
|
||||||
|
|
||||||
[dependencies.smoltcp]
|
[dependencies.smoltcp]
|
||||||
version = "0.11"
|
version = "0.12"
|
||||||
default-features = false
|
default-features = false
|
||||||
features = ["medium-ethernet", "proto-ipv4", "socket-raw", "socket-dhcpv4", "socket-udp", "defmt"]
|
features = ["medium-ethernet", "proto-ipv4", "socket-raw", "socket-dhcpv4", "socket-udp", "defmt"]
|
||||||
|
|
||||||
@@ -39,12 +40,12 @@ features = ["cortex-m-systick"]
|
|||||||
|
|
||||||
[dependencies.satrs]
|
[dependencies.satrs]
|
||||||
path = "../../satrs"
|
path = "../../satrs"
|
||||||
version = "0.2"
|
# version = "0.2"
|
||||||
default-features = false
|
default-features = false
|
||||||
features = ["defmt", "heapless"]
|
features = ["defmt", "heapless"]
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
defmt-test = "0.3"
|
defmt-test = "0.4"
|
||||||
|
|
||||||
# cargo build/run
|
# cargo build/run
|
||||||
[profile.dev]
|
[profile.dev]
|
||||||
|
@@ -511,9 +511,7 @@ impl VerificationReportCreator {
|
|||||||
self.dest_id = dest_id;
|
self.dest_id = dest_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Initialize verification handling by passing a TC reference. This returns a token required
|
pub fn read_request_id(&self, pus_tc: &(impl CcsdsPacket + IsPusTelecommand)) -> RequestId {
|
||||||
/// to call the acceptance functions
|
|
||||||
pub fn read_request_id_from_tc(pus_tc: &(impl CcsdsPacket + IsPusTelecommand)) -> RequestId {
|
|
||||||
RequestId::new(pus_tc)
|
RequestId::new(pus_tc)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -903,7 +901,7 @@ pub mod alloc_mod {
|
|||||||
> {
|
> {
|
||||||
owner_id: ComponentId,
|
owner_id: ComponentId,
|
||||||
source_data_buf: RefCell<alloc::vec::Vec<u8>>,
|
source_data_buf: RefCell<alloc::vec::Vec<u8>>,
|
||||||
pub reporter_creator: VerificationReportCreator,
|
pub report_creator: VerificationReportCreator,
|
||||||
pub tm_hook: VerificationHookInstance,
|
pub tm_hook: VerificationHookInstance,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -919,7 +917,7 @@ pub mod alloc_mod {
|
|||||||
+ cfg.fail_code_field_width
|
+ cfg.fail_code_field_width
|
||||||
+ cfg.max_fail_data_len
|
+ cfg.max_fail_data_len
|
||||||
]),
|
]),
|
||||||
reporter_creator: reporter,
|
report_creator: reporter,
|
||||||
tm_hook: DummyVerificationHook::default(),
|
tm_hook: DummyVerificationHook::default(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -943,7 +941,7 @@ pub mod alloc_mod {
|
|||||||
+ cfg.fail_code_field_width
|
+ cfg.fail_code_field_width
|
||||||
+ cfg.max_fail_data_len
|
+ cfg.max_fail_data_len
|
||||||
]),
|
]),
|
||||||
reporter_creator: reporter,
|
report_creator: reporter,
|
||||||
tm_hook,
|
tm_hook,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -952,9 +950,7 @@ pub mod alloc_mod {
|
|||||||
&self,
|
&self,
|
||||||
pus_tc: &(impl CcsdsPacket + IsPusTelecommand),
|
pus_tc: &(impl CcsdsPacket + IsPusTelecommand),
|
||||||
) -> VerificationToken<TcStateNone> {
|
) -> VerificationToken<TcStateNone> {
|
||||||
VerificationToken::<TcStateNone>::new(
|
VerificationToken::<TcStateNone>::new(self.report_creator.read_request_id(pus_tc))
|
||||||
VerificationReportCreator::read_request_id_from_tc(pus_tc),
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn start_verification_with_req_id(
|
pub fn start_verification_with_req_id(
|
||||||
@@ -965,7 +961,7 @@ pub mod alloc_mod {
|
|||||||
}
|
}
|
||||||
|
|
||||||
delegate!(
|
delegate!(
|
||||||
to self.reporter_creator {
|
to self.report_creator {
|
||||||
pub fn set_apid(&mut self, apid: u16) -> bool;
|
pub fn set_apid(&mut self, apid: u16) -> bool;
|
||||||
pub fn apid(&self) -> u16;
|
pub fn apid(&self) -> u16;
|
||||||
pub fn dest_id(&self) -> u16;
|
pub fn dest_id(&self) -> u16;
|
||||||
@@ -982,7 +978,7 @@ pub mod alloc_mod {
|
|||||||
for VerificationReporter<VerificationHookInstance>
|
for VerificationReporter<VerificationHookInstance>
|
||||||
{
|
{
|
||||||
delegate!(
|
delegate!(
|
||||||
to self.reporter_creator {
|
to self.report_creator {
|
||||||
fn set_apid(&mut self, apid: Apid);
|
fn set_apid(&mut self, apid: Apid);
|
||||||
fn apid(&self) -> Apid;
|
fn apid(&self) -> Apid;
|
||||||
}
|
}
|
||||||
@@ -1008,7 +1004,7 @@ pub mod alloc_mod {
|
|||||||
) -> Result<VerificationToken<TcStateAccepted>, EcssTmtcError> {
|
) -> Result<VerificationToken<TcStateAccepted>, EcssTmtcError> {
|
||||||
let mut source_data_buf = self.source_data_buf.borrow_mut();
|
let mut source_data_buf = self.source_data_buf.borrow_mut();
|
||||||
let mut tm_creator = self
|
let mut tm_creator = self
|
||||||
.reporter_creator
|
.report_creator
|
||||||
.acceptance_success(
|
.acceptance_success(
|
||||||
source_data_buf.as_mut_slice(),
|
source_data_buf.as_mut_slice(),
|
||||||
&token.request_id(),
|
&token.request_id(),
|
||||||
@@ -1031,7 +1027,7 @@ pub mod alloc_mod {
|
|||||||
) -> Result<(), EcssTmtcError> {
|
) -> Result<(), EcssTmtcError> {
|
||||||
let mut buf = self.source_data_buf.borrow_mut();
|
let mut buf = self.source_data_buf.borrow_mut();
|
||||||
let mut tm_creator = self
|
let mut tm_creator = self
|
||||||
.reporter_creator
|
.report_creator
|
||||||
.acceptance_failure(buf.as_mut_slice(), &token.request_id(), 0, 0, params)
|
.acceptance_failure(buf.as_mut_slice(), &token.request_id(), 0, 0, params)
|
||||||
.map_err(PusError::ByteConversion)?;
|
.map_err(PusError::ByteConversion)?;
|
||||||
self.tm_hook.modify_tm(&mut tm_creator);
|
self.tm_hook.modify_tm(&mut tm_creator);
|
||||||
@@ -1050,7 +1046,7 @@ pub mod alloc_mod {
|
|||||||
) -> Result<VerificationToken<TcStateStarted>, EcssTmtcError> {
|
) -> Result<VerificationToken<TcStateStarted>, EcssTmtcError> {
|
||||||
let mut buf = self.source_data_buf.borrow_mut();
|
let mut buf = self.source_data_buf.borrow_mut();
|
||||||
let mut tm_creator = self
|
let mut tm_creator = self
|
||||||
.reporter_creator
|
.report_creator
|
||||||
.start_success(buf.as_mut_slice(), &token.request_id(), 0, 0, time_stamp)
|
.start_success(buf.as_mut_slice(), &token.request_id(), 0, 0, time_stamp)
|
||||||
.map_err(PusError::ByteConversion)?;
|
.map_err(PusError::ByteConversion)?;
|
||||||
self.tm_hook.modify_tm(&mut tm_creator);
|
self.tm_hook.modify_tm(&mut tm_creator);
|
||||||
@@ -1070,7 +1066,7 @@ pub mod alloc_mod {
|
|||||||
) -> Result<(), EcssTmtcError> {
|
) -> Result<(), EcssTmtcError> {
|
||||||
let mut buf = self.source_data_buf.borrow_mut();
|
let mut buf = self.source_data_buf.borrow_mut();
|
||||||
let mut tm_creator = self
|
let mut tm_creator = self
|
||||||
.reporter_creator
|
.report_creator
|
||||||
.start_failure(buf.as_mut_slice(), &token.request_id(), 0, 0, params)
|
.start_failure(buf.as_mut_slice(), &token.request_id(), 0, 0, params)
|
||||||
.map_err(PusError::ByteConversion)?;
|
.map_err(PusError::ByteConversion)?;
|
||||||
self.tm_hook.modify_tm(&mut tm_creator);
|
self.tm_hook.modify_tm(&mut tm_creator);
|
||||||
@@ -1090,7 +1086,7 @@ pub mod alloc_mod {
|
|||||||
) -> Result<(), EcssTmtcError> {
|
) -> Result<(), EcssTmtcError> {
|
||||||
let mut buf = self.source_data_buf.borrow_mut();
|
let mut buf = self.source_data_buf.borrow_mut();
|
||||||
let mut tm_creator = self
|
let mut tm_creator = self
|
||||||
.reporter_creator
|
.report_creator
|
||||||
.step_success(
|
.step_success(
|
||||||
buf.as_mut_slice(),
|
buf.as_mut_slice(),
|
||||||
&token.request_id(),
|
&token.request_id(),
|
||||||
@@ -1117,7 +1113,7 @@ pub mod alloc_mod {
|
|||||||
) -> Result<(), EcssTmtcError> {
|
) -> Result<(), EcssTmtcError> {
|
||||||
let mut buf = self.source_data_buf.borrow_mut();
|
let mut buf = self.source_data_buf.borrow_mut();
|
||||||
let mut tm_creator = self
|
let mut tm_creator = self
|
||||||
.reporter_creator
|
.report_creator
|
||||||
.step_failure(buf.as_mut_slice(), token, 0, 0, params)
|
.step_failure(buf.as_mut_slice(), token, 0, 0, params)
|
||||||
.map_err(PusError::ByteConversion)?;
|
.map_err(PusError::ByteConversion)?;
|
||||||
self.tm_hook.modify_tm(&mut tm_creator);
|
self.tm_hook.modify_tm(&mut tm_creator);
|
||||||
@@ -1138,7 +1134,7 @@ pub mod alloc_mod {
|
|||||||
) -> Result<(), EcssTmtcError> {
|
) -> Result<(), EcssTmtcError> {
|
||||||
let mut buf = self.source_data_buf.borrow_mut();
|
let mut buf = self.source_data_buf.borrow_mut();
|
||||||
let mut tm_creator = self
|
let mut tm_creator = self
|
||||||
.reporter_creator
|
.report_creator
|
||||||
.completion_success(buf.as_mut_slice(), &token.request_id(), 0, 0, time_stamp)
|
.completion_success(buf.as_mut_slice(), &token.request_id(), 0, 0, time_stamp)
|
||||||
.map_err(PusError::ByteConversion)?;
|
.map_err(PusError::ByteConversion)?;
|
||||||
self.tm_hook.modify_tm(&mut tm_creator);
|
self.tm_hook.modify_tm(&mut tm_creator);
|
||||||
@@ -1158,7 +1154,7 @@ pub mod alloc_mod {
|
|||||||
) -> Result<(), EcssTmtcError> {
|
) -> Result<(), EcssTmtcError> {
|
||||||
let mut buf = self.source_data_buf.borrow_mut();
|
let mut buf = self.source_data_buf.borrow_mut();
|
||||||
let mut tm_creator = self
|
let mut tm_creator = self
|
||||||
.reporter_creator
|
.report_creator
|
||||||
.completion_failure(buf.as_mut_slice(), &token.request_id(), 0, 00, params)
|
.completion_failure(buf.as_mut_slice(), &token.request_id(), 0, 00, params)
|
||||||
.map_err(PusError::ByteConversion)?;
|
.map_err(PusError::ByteConversion)?;
|
||||||
self.tm_hook.modify_tm(&mut tm_creator);
|
self.tm_hook.modify_tm(&mut tm_creator);
|
||||||
|
Reference in New Issue
Block a user