From 55ed793c121b995eda320f7ca21b1e8838fe03ce Mon Sep 17 00:00:00 2001 From: baldeau Date: Mon, 24 Feb 2025 23:16:48 +0100 Subject: [PATCH] initial commit --- .DS_Store | Bin 0 -> 6148 bytes .assets/ferris.webp | Bin 0 -> 50596 bytes .cargo/config.toml | 15 + .gitignore | 1 + Cargo.lock | 1676 +++++++++++++++++++++++ Cargo.toml | 78 ++ README.md | 23 + build.rs | 6 + build_and_flash.sh | 28 + flashing_time.py | 15 + lsm6ds3tr_demo/.DS_Store | Bin 0 -> 6148 bytes lsm6ds3tr_demo/Cargo.toml | 36 + lsm6ds3tr_demo/src/common.rs | 4 + lsm6ds3tr_demo/src/main.rs | 284 ++++ lsm6ds3tr_demo/src/usb_dfu.rs | 157 +++ memory.x | 20 + tflite_demo/.DS_Store | Bin 0 -> 6148 bytes tflite_demo/Cargo.toml | 37 + tflite_demo/features/speech.rs | 219 +++ tflite_demo/models/.DS_Store | Bin 0 -> 6148 bytes tflite_demo/models/gesture_model.tflite | Bin 0 -> 148188 bytes tflite_demo/models/sine.tflite | Bin 0 -> 2680 bytes tflite_demo/models/speech.tflite | Bin 0 -> 18800 bytes tflite_demo/src/common.rs | 4 + tflite_demo/src/main.rs | 285 ++++ tflite_demo/src/usb_dfu.rs | 157 +++ 26 files changed, 3045 insertions(+) create mode 100644 .DS_Store create mode 100644 .assets/ferris.webp create mode 100644 .cargo/config.toml create mode 100644 .gitignore create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 README.md create mode 100644 build.rs create mode 100755 build_and_flash.sh create mode 100755 flashing_time.py create mode 100644 lsm6ds3tr_demo/.DS_Store create mode 100644 lsm6ds3tr_demo/Cargo.toml create mode 100644 lsm6ds3tr_demo/src/common.rs create mode 100644 lsm6ds3tr_demo/src/main.rs create mode 100644 lsm6ds3tr_demo/src/usb_dfu.rs create mode 100644 memory.x create mode 100644 tflite_demo/.DS_Store create mode 100644 tflite_demo/Cargo.toml create mode 100644 tflite_demo/features/speech.rs create mode 100644 tflite_demo/models/.DS_Store create mode 100644 tflite_demo/models/gesture_model.tflite create mode 100644 tflite_demo/models/sine.tflite create mode 100644 tflite_demo/models/speech.tflite create mode 100644 tflite_demo/src/common.rs create mode 100644 tflite_demo/src/main.rs create mode 100644 tflite_demo/src/usb_dfu.rs diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..9ee7f3bbecd6baa8caae1b3f75910df46d0bb4d0 GIT binary patch literal 6148 zcmeHKK~Cc^6n$nYRJEE>#flA5PJqM>G7KzObAUkG5UNR=QCkMsWzQYB0_S4|?|&QQ zxWE!2^uJ`k)OpYTeoo>VfIGaJ9snZ%eHOvqfYloz_oZyaR%rQ2blOLS=A>>WWoV~OtjD<6g5Ec;IyntG4i3Nx&u_gr`n32*SiBe%i=4SO%U z8n>5d`WWMi{2EiLmslnI$ArHV@eAg^psv6L_2*dOl6|mF`nXH_7~s##%*n5r=LCPd znyuaIq8yN`SuMS0DbX~j&}oa-DV$Nh)fL@$2E`XT32GC#?%z_t2GpSmh_ zG*{6AeT>SiIHaZkX2 zE4t!36|76H>5Toq;g$Opc}1DUCpaMM!{`q^T5S%P1LnZ11M+>ySOoKctw;TIu+k#{ zvBzc&Ud!JB(PRPhfUQT~VK^@(dZ`OX4Cm!+&jK$G*n0GGxN!JzVPqFhC{9Ob|C!R^ za*tM<1Li>2fgk?oNcR8Z_s{=bk^M3U%z5 kVHLJxy^yVVmqmm3GPxk;0b7r3Vb~u5wZSTL;8PuV28Ths{r~^~ literal 0 HcmV?d00001 diff --git a/.assets/ferris.webp b/.assets/ferris.webp new file mode 100644 index 0000000000000000000000000000000000000000..7ebafca1cc6f9f1f15040b2eacc6afd83496dac5 GIT binary patch literal 50596 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 literal 0 HcmV?d00001 diff --git a/.cargo/config.toml b/.cargo/config.toml new file mode 100644 index 0000000..d08aa9b --- /dev/null +++ b/.cargo/config.toml @@ -0,0 +1,15 @@ +[build] +target = "thumbv7em-none-eabihf" + +[target.'cfg(all(target_arch = "arm", target_os = "none"))'] +rustflags = [ + "-C", + "link-arg=-Tlink.x", + "-C", + "link-arg=-Tdefmt.x", + "-C", + "link-arg=--nmagic", +] + +[env] +DEFMT_LOG = "trace" diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..e11bf7f --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,1676 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "Inflector" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" +dependencies = [ + "lazy_static", + "regex", +] + +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "approx" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" +dependencies = [ + "num-traits", +] + +[[package]] +name = "as-slice" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45403b49e3954a4b8428a0ac21a4b7afadccf92bfd96273f1a58cd4812496ae0" +dependencies = [ + "generic-array 0.12.4", + "generic-array 0.13.3", + "generic-array 0.14.7", + "stable_deref_trait", +] + +[[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]] +name = "assign-resources" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c0fc5119624f5c171d084b6a1bd3b6447dfadab980bb0d84717906239b77f85" + +[[package]] +name = "atomic-polyfill" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cf2bce30dfe09ef0bfaef228b9d414faaf7e563035494d7fe092dba54b300f4" +dependencies = [ + "critical-section", +] + +[[package]] +name = "atomic-pool" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58c5fc22e05ec2884db458bf307dc7b278c9428888d2b6e6fad9c0ae7804f5f6" +dependencies = [ + "as-slice 0.1.5", + "as-slice 0.2.1", + "atomic-polyfill", + "stable_deref_trait", +] + +[[package]] +name = "autocfg" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" + +[[package]] +name = "az" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b7e4c2464d97fe331d41de9d5db0def0a96f4d823b8b32a2efd503578988973" + +[[package]] +name = "bare-metal" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5deb64efa5bd81e31fcd1938615a6d98c82eafcbcd787162b6f63b91d6bac5b3" +dependencies = [ + "rustc_version 0.2.3", +] + +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "bitfield" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46afbd2983a5d5a7bd740ccb198caf5b82f45c40c09c0eed36052d91cb92e719" + +[[package]] +name = "bitfield" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d7e60934ceec538daadb9d8432424ed043a904d8e0243f3c6446bce549a46ac" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36" + +[[package]] +name = "bytemuck" +version = "1.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "byterepr" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7eb1a05c2ec66850db33d8dd2119626aef815662a074656a74bbe47a562fdf4" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "cast" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "const-default" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b396d1f76d455557e1218ec8066ae14bba60b4b36ecd55577ba979f5db7ecaa" + +[[package]] +name = "cortex-m" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ec610d8f49840a5b376c69663b6369e71f4b34484b9b2eb29fb918d92516cb9" +dependencies = [ + "bare-metal", + "bitfield 0.13.2", + "critical-section", + "embedded-hal 0.2.7", + "volatile-register", +] + +[[package]] +name = "cortex-m-rt" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "801d4dec46b34c299ccf6b036717ae0fce602faa4f4fe816d9013b9a7c9f5ba6" +dependencies = [ + "cortex-m-rt-macros", +] + +[[package]] +name = "cortex-m-rt-macros" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e37549a379a9e0e6e576fd208ee60394ccb8be963889eebba3ffe0980364f472" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.94", +] + +[[package]] +name = "critical-section" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "darling" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" +dependencies = [ + "darling_core 0.13.4", + "darling_macro 0.13.4", +] + +[[package]] +name = "darling" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +dependencies = [ + "darling_core 0.20.10", + "darling_macro 0.20.10", +] + +[[package]] +name = "darling_core" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.10.0", + "syn 1.0.109", +] + +[[package]] +name = "darling_core" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.11.1", + "syn 2.0.94", +] + +[[package]] +name = "darling_macro" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" +dependencies = [ + "darling_core 0.13.4", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "darling_macro" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +dependencies = [ + "darling_core 0.20.10", + "quote", + "syn 2.0.94", +] + +[[package]] +name = "defmt" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86f6162c53f659f65d00619fe31f14556a6e9f8752ccc4a41bd177ffcf3d6130" +dependencies = [ + "bitflags 1.3.2", + "defmt-macros", +] + +[[package]] +name = "defmt-macros" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d135dd939bad62d7490b0002602d35b358dce5fd9233a709d3c1ef467d4bde6" +dependencies = [ + "defmt-parser", + "proc-macro-error2", + "proc-macro2", + "quote", + "syn 2.0.94", +] + +[[package]] +name = "defmt-parser" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3983b127f13995e68c1e29071e5d115cd96f215ccb5e6812e3728cd6f92653b3" +dependencies = [ + "thiserror", +] + +[[package]] +name = "defmt-rtt" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bab697b3dbbc1750b7c8b821aa6f6e7f2480b47a99bc057a2ed7b170ebef0c51" +dependencies = [ + "critical-section", + "defmt", +] + +[[package]] +name = "document-features" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb6969eaabd2421f8a2775cfd2471a2b634372b4a25d41e3bd647b79912850a0" +dependencies = [ + "litrs", +] + +[[package]] +name = "embassy-embedded-hal" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41fea5ef5bed4d3468dfd44f5c9fa4cda8f54c86d4fb4ae683eacf9d39e2ea12" +dependencies = [ + "defmt", + "embassy-futures", + "embassy-sync 0.6.2", + "embassy-time", + "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-executor" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90327bcc66333a507f89ecc4e2d911b265c45f5c9bc241f98eee076752d35ac6" +dependencies = [ + "cortex-m", + "critical-section", + "defmt", + "document-features", + "embassy-executor-macros", +] + +[[package]] +name = "embassy-executor-macros" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3577b1e9446f61381179a330fc5324b01d511624c55f25e3c66c9e3c626dbecf" +dependencies = [ + "darling 0.20.10", + "proc-macro2", + "quote", + "syn 2.0.94", +] + +[[package]] +name = "embassy-futures" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f878075b9794c1e4ac788c95b728f26aa6366d32eeb10c7051389f898f7d067" + +[[package]] +name = "embassy-hal-internal" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ef3bac31ec146321248a169e9c7b5799f1e0b3829c7a9b324cb4600a7438f59" +dependencies = [ + "cortex-m", + "critical-section", + "defmt", + "num-traits", +] + +[[package]] +name = "embassy-net-driver" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524eb3c489760508f71360112bca70f6e53173e6fe48fc5f0efd0f5ab217751d" + +[[package]] +name = "embassy-net-driver-channel" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4818c32afec43e3cae234f324bad9a976c9aa7501022d26ff60a4017a1a006b7" +dependencies = [ + "embassy-futures", + "embassy-net-driver", + "embassy-sync 0.6.2", +] + +[[package]] +name = "embassy-nrf" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d7494efe1e0183568327c7e681d4b77ed5241921dcb5976426d9a65b65a0c81" +dependencies = [ + "bitflags 2.8.0", + "cfg-if", + "cortex-m", + "cortex-m-rt", + "critical-section", + "defmt", + "document-features", + "embassy-embedded-hal", + "embassy-hal-internal", + "embassy-sync 0.6.2", + "embassy-time", + "embassy-time-driver", + "embassy-time-queue-utils", + "embassy-usb-driver", + "embedded-hal 0.2.7", + "embedded-hal 1.0.0", + "embedded-hal-async", + "embedded-io", + "embedded-io-async", + "embedded-storage", + "embedded-storage-async", + "fixed", + "nrf-pac", + "rand_core", +] + +[[package]] +name = "embassy-sync" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd938f25c0798db4280fcd8026bf4c2f48789aebf8f77b6e5cf8a7693ba114ec" +dependencies = [ + "cfg-if", + "critical-section", + "embedded-io-async", + "futures-util", + "heapless", +] + +[[package]] +name = "embassy-sync" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d2c8cdff05a7a51ba0087489ea44b0b1d97a296ca6b1d6d1a33ea7423d34049" +dependencies = [ + "cfg-if", + "critical-section", + "defmt", + "embedded-io-async", + "futures-sink", + "futures-util", + "heapless", +] + +[[package]] +name = "embassy-time" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f820157f198ada183ad62e0a66f554c610cdcd1a9f27d4b316358103ced7a1f8" +dependencies = [ + "cfg-if", + "critical-section", + "defmt", + "document-features", + "embassy-time-driver", + "embedded-hal 0.2.7", + "embedded-hal 1.0.0", + "embedded-hal-async", + "futures-util", +] + +[[package]] +name = "embassy-time-driver" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d45f5d833b6d98bd2aab0c2de70b18bfaa10faf661a1578fd8e5dfb15eb7eba" +dependencies = [ + "document-features", +] + +[[package]] +name = "embassy-time-queue-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc55c748d16908a65b166d09ce976575fb8852cf60ccd06174092b41064d8f83" +dependencies = [ + "embassy-executor", + "heapless", +] + +[[package]] +name = "embassy-usb" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d0b882133fa684b9d4652351cd7aac5afe8a2c2bf4a7da59f442ff61087cda2" +dependencies = [ + "defmt", + "embassy-futures", + "embassy-net-driver-channel", + "embassy-sync 0.6.2", + "embassy-usb-driver", + "heapless", + "ssmarshal", + "usbd-hid", +] + +[[package]] +name = "embassy-usb-driver" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fc247028eae04174b6635104a35b1ed336aabef4654f5e87a8f32327d231970" +dependencies = [ + "defmt", +] + +[[package]] +name = "embedded-alloc" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f2de9133f68db0d4627ad69db767726c99ff8585272716708227008d3f1bddd" +dependencies = [ + "const-default", + "critical-section", + "linked_list_allocator", + "rlsf", +] + +[[package]] +name = "embedded-dma" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "994f7e5b5cb23521c22304927195f236813053eb9c065dd2226a32ba64695446" +dependencies = [ + "stable_deref_trait", +] + +[[package]] +name = "embedded-hal" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35949884794ad573cf46071e41c9b60efb0cb311e3ca01f7af807af1debc66ff" +dependencies = [ + "nb 0.1.3", + "void", +] + +[[package]] +name = "embedded-hal" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "361a90feb7004eca4019fb28352a9465666b24f840f5c3cddf0ff13920590b89" + +[[package]] +name = "embedded-hal-async" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c4c685bbef7fe13c3c6dd4da26841ed3980ef33e841cddfa15ce8a8fb3f1884" +dependencies = [ + "embedded-hal 1.0.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]] +name = "encode_unicode" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" + +[[package]] +name = "fixed" +version = "1.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85c6e0b89bf864acd20590dbdbad56f69aeb898abfc9443008fd7bd48b2cc85a" +dependencies = [ + "az", + "bytemuck", + "half", + "typenum", +] + +[[package]] +name = "flatbuffers" +version = "23.5.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dac53e22462d78c16d64a1cd22371b54cc3fe94aa15e7886a2fa6e5d1ab8640" +dependencies = [ + "bitflags 1.3.2", + "rustc_version 0.4.1", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "futures" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-io" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-core", + "futures-sink", + "futures-task", + "pin-project-lite", + "pin-utils", +] + +[[package]] +name = "generic-array" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" +dependencies = [ + "typenum", +] + +[[package]] +name = "generic-array" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f797e67af32588215eaaab8327027ee8e71b9dd0b2b26996aedf20c030fce309" +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]] +name = "half" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" +dependencies = [ + "cfg-if", + "crunchy", +] + +[[package]] +name = "hash32" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606" +dependencies = [ + "byteorder", +] + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash", +] + +[[package]] +name = "heapless" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad" +dependencies = [ + "hash32", + "stable_deref_trait", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "libc" +version = "0.2.169" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" + +[[package]] +name = "libm" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" + +[[package]] +name = "linked_list_allocator" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9afa463f5405ee81cdb9cc2baf37e08ec7e4c8209442b5d72c04cfb2cd6e6286" + +[[package]] +name = "litrs" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4ce301924b7887e9d637144fdade93f9dfff9b60981d4ac161db09720d39aa5" + +[[package]] +name = "log" +version = "0.4.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" + +[[package]] +name = "lsm6ds3tr" +version = "0.3.0" +source = "git+https://avoid.sh/PetActivityMonitor/lsm6ds3tr.git?rev=b368f6200c3ec9a84114e8ca137eb5fe0aa08e29#b368f6200c3ec9a84114e8ca137eb5fe0aa08e29" +dependencies = [ + "defmt", + "embedded-hal 1.0.0", + "heapless", +] + +[[package]] +name = "lsm6ds3tr_demo" +version = "0.1.0" +dependencies = [ + "assign-resources", + "atomic-pool", + "cortex-m", + "cortex-m-rt", + "defmt", + "defmt-rtt", + "embassy-embedded-hal", + "embassy-executor", + "embassy-futures", + "embassy-nrf", + "embassy-sync 0.5.0", + "embassy-time", + "embassy-usb", + "embedded-alloc", + "embedded-hal 1.0.0", + "embedded-hal-async", + "fixed", + "heapless", + "libm", + "lsm6ds3tr", + "nalgebra 0.33.2", + "nrf-softdevice", + "nrf-softdevice-s140", + "nrf52840-hal", + "panic-probe", + "static_cell", + "usb-device 0.2.9", + "usbd-serial", +] + +[[package]] +name = "matrixmultiply" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9380b911e3e96d10c1f415da0876389aaf1b56759054eeb0de7df940c456ba1a" +dependencies = [ + "autocfg", + "rawpointer", +] + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "microflow" +version = "0.1.3" +dependencies = [ + "libm", + "microflow-macros", + "nalgebra 0.33.2", + "simba 0.9.0", +] + +[[package]] +name = "microflow-macros" +version = "0.1.1" +dependencies = [ + "byterepr", + "flatbuffers", + "nalgebra 0.32.6", + "proc-macro-error", + "proc-macro2", + "quote", + "simba 0.8.1", + "structmeta", + "syn 2.0.94", +] + +[[package]] +name = "nalgebra" +version = "0.32.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5c17de023a86f59ed79891b2e5d5a94c705dbe904a5b5c9c952ea6221b03e4" +dependencies = [ + "approx", + "matrixmultiply", + "nalgebra-macros", + "num-complex", + "num-rational", + "num-traits", + "simba 0.8.1", + "typenum", +] + +[[package]] +name = "nalgebra" +version = "0.33.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26aecdf64b707efd1310e3544d709c5c0ac61c13756046aaaba41be5c4f66a3b" +dependencies = [ + "approx", + "nalgebra-macros", + "num-complex", + "num-rational", + "num-traits", + "simba 0.9.0", + "typenum", +] + +[[package]] +name = "nalgebra-macros" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "254a5372af8fc138e36684761d3c0cdb758a4410e938babcff1c860ce14ddbfc" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.94", +] + +[[package]] +name = "nb" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "801d31da0513b6ec5214e9bf433a77966320625a37860f910be265be6e18d06f" +dependencies = [ + "nb 1.1.0", +] + +[[package]] +name = "nb" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d5439c4ad607c3c23abf66de8c8bf57ba8adcd1f129e699851a6e43935d339d" + +[[package]] +name = "nrf-hal-common" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ea48ed7f0843fe6ec5aac0c42701e9194adfa1ee82ce6d028d64e5f68542be4" +dependencies = [ + "cast", + "cfg-if", + "cortex-m", + "embedded-dma", + "embedded-hal 0.2.7", + "embedded-storage", + "fixed", + "nb 1.1.0", + "nrf-usbd", + "nrf52840-pac", + "rand_core", + "void", +] + +[[package]] +name = "nrf-pac" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d334027d6703534f2a80de0794ae435c0e029358d28278533d3935e69b221b01" +dependencies = [ + "cortex-m", + "cortex-m-rt", +] + +[[package]] +name = "nrf-softdevice" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225a21d963b2382617dbbff5953dc8c6c43fe56db5c5155f4d20a30c50c2766d" +dependencies = [ + "cortex-m", + "cortex-m-rt", + "critical-section", + "defmt", + "embassy-futures", + "embassy-sync 0.5.0", + "embedded-storage", + "embedded-storage-async", + "fixed", + "futures", + "heapless", + "nrf-softdevice-macro", + "nrf-softdevice-s140", + "nrf52840-pac", + "num_enum", +] + +[[package]] +name = "nrf-softdevice-macro" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3af0752f2f12e202fa29f5a8d2f6dcc8a421c7a7e368d9dab7feb6bfe24ff0e9" +dependencies = [ + "Inflector", + "darling 0.13.4", + "proc-macro2", + "quote", + "syn 1.0.109", + "uuid", +] + +[[package]] +name = "nrf-softdevice-s140" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ea93a1e11efdafcf914ed6b81b5be0cd99ee8ff6c3060102265ea863a355393" + +[[package]] +name = "nrf-usbd" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66b2907c0b3ec4d264981c1fc5a2321d51c463d5a63d386e573f00e84d5495e6" +dependencies = [ + "cortex-m", + "critical-section", + "usb-device 0.2.9", + "vcell", +] + +[[package]] +name = "nrf52840-hal" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "709f85690f7f8d04612a18838785ee9176e1292ce3e53f0c68692b4cf5b4948e" +dependencies = [ + "embedded-hal 0.2.7", + "nrf-hal-common", + "nrf52840-pac", +] + +[[package]] +name = "nrf52840-pac" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30713f36f1be02e5bc9abefa30eae4a1f943d810f199d4923d3ad062d1be1b3d" +dependencies = [ + "cortex-m", + "cortex-m-rt", + "vcell", +] + +[[package]] +name = "num-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +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-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_enum" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.94", +] + +[[package]] +name = "once_cell" +version = "1.20.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e" + +[[package]] +name = "panic-probe" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4047d9235d1423d66cc97da7d07eddb54d4f154d6c13805c6d0793956f4f25b0" +dependencies = [ + "cortex-m", + "defmt", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "pin-project-lite" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "portable-atomic" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6" + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "proc-macro-error2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" +dependencies = [ + "proc-macro-error-attr2", + "proc-macro2", + "quote", + "syn 2.0.94", +] + +[[package]] +name = "proc-macro2" +version = "1.0.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" + +[[package]] +name = "rawpointer" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" + +[[package]] +name = "regex" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" + +[[package]] +name = "rlsf" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "222fb240c3286247ecdee6fa5341e7cdad0ffdf8e7e401d9937f2d58482a20bf" +dependencies = [ + "cfg-if", + "const-default", + "libc", + "svgbobdoc", +] + +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +dependencies = [ + "semver 0.9.0", +] + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver 1.0.24", +] + +[[package]] +name = "safe_arch" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96b02de82ddbe1b636e6170c21be622223aea188ef2e139be0a5b219ec215323" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "semver" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cb6eb87a131f756572d7fb904f6e7b68633f09cca868c5df1c4b8d1a694bbba" + +[[package]] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" + +[[package]] +name = "serde" +version = "1.0.217" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.217" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.94", +] + +[[package]] +name = "simba" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "061507c94fc6ab4ba1c9a0305018408e312e17c041eb63bef8aa726fa33aceae" +dependencies = [ + "approx", + "num-complex", + "num-traits", + "paste", + "wide", +] + +[[package]] +name = "simba" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3a386a501cd104797982c15ae17aafe8b9261315b5d07e3ec803f2ea26be0fa" +dependencies = [ + "approx", + "num-complex", + "num-traits", + "paste", +] + +[[package]] +name = "ssmarshal" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3e6ad23b128192ed337dfa4f1b8099ced0c2bf30d61e551b65fda5916dbb850" +dependencies = [ + "encode_unicode", + "serde", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "static_cell" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d89b0684884a883431282db1e4343f34afc2ff6996fe1f4a1664519b66e14c1e" +dependencies = [ + "portable-atomic", +] + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "structmeta" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e1575d8d40908d70f6fd05537266b90ae71b15dbbe7a8b7dffa2b759306d329" +dependencies = [ + "proc-macro2", + "quote", + "structmeta-derive", + "syn 2.0.94", +] + +[[package]] +name = "structmeta-derive" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "152a0b65a590ff6c3da95cabe2353ee04e6167c896b28e3b14478c2636c922fc" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.94", +] + +[[package]] +name = "svgbobdoc" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2c04b93fc15d79b39c63218f15e3fdffaa4c227830686e3b7c5f41244eb3e50" +dependencies = [ + "base64", + "proc-macro2", + "quote", + "syn 1.0.109", + "unicode-width", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.94" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "987bc0be1cdea8b10216bd06e2ca407d40b9543468fafd3ddfb02f36e77f71f3" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tflite_demo" +version = "0.1.0" +dependencies = [ + "assign-resources", + "atomic-pool", + "cortex-m", + "cortex-m-rt", + "defmt", + "defmt-rtt", + "embassy-embedded-hal", + "embassy-executor", + "embassy-futures", + "embassy-nrf", + "embassy-sync 0.5.0", + "embassy-time", + "embassy-usb", + "embedded-alloc", + "embedded-hal 1.0.0", + "embedded-hal-async", + "fixed", + "heapless", + "libm", + "lsm6ds3tr", + "microflow", + "nalgebra 0.33.2", + "nrf-softdevice", + "nrf-softdevice-s140", + "nrf52840-hal", + "panic-probe", + "static_cell", + "usb-device 0.2.9", + "usbd-serial", +] + +[[package]] +name = "thiserror" +version = "2.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d452f284b73e6d76dd36758a0c8684b1d5be31f92b89d07fd5822175732206fc" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26afc1baea8a989337eeb52b6e72a039780ce45c3edfcc9c5b9d112feeb173c2" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.94", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "unicode-ident" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" + +[[package]] +name = "unicode-width" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" + +[[package]] +name = "usb-device" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f6cc3adc849b5292b4075fc0d5fdcf2f24866e88e336dd27a8943090a520508" + +[[package]] +name = "usb-device" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98816b1accafbb09085168b90f27e93d790b4bfa19d883466b5e53315b5f06a6" +dependencies = [ + "heapless", + "portable-atomic", +] + +[[package]] +name = "usbd-hid" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6f291ab53d428685cc780f08a2eb9d5d6ff58622db2b36e239a4f715f1e184c" +dependencies = [ + "serde", + "ssmarshal", + "usb-device 0.3.2", + "usbd-hid-macros", +] + +[[package]] +name = "usbd-hid-descriptors" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee54712c5d778d2fb2da43b1ce5a7b5060886ef7b09891baeb4bf36910a3ed" +dependencies = [ + "bitfield 0.14.0", +] + +[[package]] +name = "usbd-hid-macros" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb573c76e7884035ac5e1ab4a81234c187a82b6100140af0ab45757650ccda38" +dependencies = [ + "byteorder", + "hashbrown", + "log", + "proc-macro2", + "quote", + "serde", + "syn 1.0.109", + "usbd-hid-descriptors", +] + +[[package]] +name = "usbd-serial" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db75519b86287f12dcf0d171c7cf4ecc839149fe9f3b720ac4cfce52959e1dfe" +dependencies = [ + "embedded-hal 0.2.7", + "nb 0.1.3", + "usb-device 0.2.9", +] + +[[package]] +name = "uuid" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b913a3b5fe84142e269d63cc62b64319ccaf89b748fc31fe025177f767a756c4" + +[[package]] +name = "vcell" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77439c1b53d2303b20d9459b1ade71a83c716e3f9c34f3228c00e6f185d6c002" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "void" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" + +[[package]] +name = "volatile-register" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de437e2a6208b014ab52972a27e59b33fa2920d3e00fe05026167a1c509d19cc" +dependencies = [ + "vcell", +] + +[[package]] +name = "wide" +version = "0.7.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58e6db2670d2be78525979e9a5f9c69d296fd7d670549fe9ebf70f8708cb5019" +dependencies = [ + "bytemuck", + "safe_arch", +] + +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.94", +] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..98538a7 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,78 @@ +[workspace] +members = ["tflite_demo", "lsm6ds3tr_demo"] + +[workspace.features] +default = ["ble-l2cap", "ble-gatt-server", "ble-gatt-client", "ble-sec"] + +ble-l2cap = ["nrf-softdevice/ble-l2cap"] +ble-gatt-server = ["nrf-softdevice/ble-gatt-server"] +ble-gatt-client = ["nrf-softdevice/ble-gatt-client"] +ble-sec = ["nrf-softdevice/ble-sec"] + +nrf52840 = [ + "embassy-nrf/nrf52840", + "nrf-softdevice/nrf52840", + "nrf-softdevice/s140", + "dep:nrf-softdevice-s140", +] + +[workspace.dependencies] +assign-resources = "0.4.1" +embassy-futures = { version = "0.1.0" } +embassy-usb = { version = "0.3.0", features = ["defmt"] } +embassy-executor = { version = "0.7.0", features = [ + "task-arena-size-32768", + "arch-cortex-m", + "executor-thread", + "executor-interrupt", + "defmt", +] } +embassy-time = { version = "0.4.0", features = [ + "defmt", + "defmt-timestamp-uptime", +] } +embassy-nrf = { version = "0.3.1", features = [ + "defmt", + "nrf52840", + "time-driver-rtc1", + "gpiote", + "unstable-pac", + "time", + "reset-pin-as-gpio", +] } +embassy-embedded-hal = "0.3.0" +cortex-m = { version = "0.7.6", features = ["critical-section-single-core"] } +cortex-m-rt = "0.7.0" +defmt = "0.3" +defmt-rtt = "0.4" +panic-probe = { version = "0.3", features = ["print-defmt"] } +nrf52840-hal = "0.16.0" +usb-device = "0.2.7" +usbd-serial = "0.1.0" +microflow = { path = "../microflow-rs" } +nalgebra = { version = "0.33.2", default-features = false, features = [ + "macros", +] } +libm = "0.2" +panic-halt = "1.0.0" +heapless = "0.8.0" +lsm6ds3tr = { git = "https://avoid.sh/PetActivityMonitor/lsm6ds3tr.git", rev = "b368f6200c3ec9a84114e8ca137eb5fe0aa08e29", features = [ + "defmt", +] } +embassy-sync = { version = "0.5.0" } +embedded-storage = "0.3.0" +embedded-hal = "1.0.0" +embedded-hal-async = { version = "1.0.0" } +embedded-alloc = "0.6.0" +nrf-softdevice = { version = "0.1.0", features = [ + "defmt", + "ble-peripheral", + "ble-central", + "critical-section-impl", + "nrf52840", + "s140", +] } +nrf-softdevice-s140 = { version = "0.1.1" } +fixed = "1.24.0" +atomic-pool = "1.0.1" +static_cell = "2.0.0" diff --git a/README.md b/README.md new file mode 100644 index 0000000..a038089 --- /dev/null +++ b/README.md @@ -0,0 +1,23 @@ +# xiao_pet_activity_analyser + + + +Blazingly fast and efficient pet activity analyser! + +## Supported Microcontrollers + +- Seeed XIAO BLE + +## Mac Tooling + +List connected devices: + +```bash +ioreg -p IOUSB +``` + +Screen the controller: + +```bash +screen /dev/tty./dev/tty.usbmodempet11 +``` diff --git a/build.rs b/build.rs new file mode 100644 index 0000000..d4dbebf --- /dev/null +++ b/build.rs @@ -0,0 +1,6 @@ +fn main() { + // Rebuild if memory.x file was rebuild. + // Linker seems to pick it up automatically. + // (via the include in link.x which is added with a linker argument!) + println!("cargo:rerun-if-changed=memory.x"); +} \ No newline at end of file diff --git a/build_and_flash.sh b/build_and_flash.sh new file mode 100755 index 0000000..fd4f77b --- /dev/null +++ b/build_and_flash.sh @@ -0,0 +1,28 @@ +#!/bin/bash +set -e + +COM_PORT=/dev/cu.usbmodem2101 + +echo -e "bootloader" > $COM_PORT + +sleep 1s + +while getopts 'abc:h' opt; do + case "$opt" in + ?|h) + echo "Usage: $(basename $0) crate_name" + exit 1 + ;; + esac +done +shift "$(($OPTIND -1))" +CRATE=$1 + +cargo build -p $CRATE --release +arm-none-eabi-objcopy -O ihex target/thumbv7em-none-eabihf/release/$CRATE target/$CRATE.hex +adafruit-nrfutil dfu genpkg --dev-type 0x0052 --sd-req 0x0123 --application target/$CRATE.hex target/$CRATE.zip +# Use our custom reboot system to boot the controller into serial-only DFU mode. +# echo -e "bootloader" > $COM_PORT +# Wait for the reboot. +# sleep 1s +adafruit-nrfutil --verbose dfu serial -pkg target/$CRATE.zip -p $COM_PORT -b 115200 --singlebank \ No newline at end of file diff --git a/flashing_time.py b/flashing_time.py new file mode 100755 index 0000000..7784ed7 --- /dev/null +++ b/flashing_time.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python + +from subprocess import run + +# requires pySerial: +# python -m pip install pyserial +import serial + +# grab the port for the seeed nrf52 (only connect one at a time) +data = run("ls /dev/ | grep 'cu.usbmodem'", capture_output=True, shell=True, text=True) + +ser = serial.Serial("/dev/" + data.stdout.strip(), 1200) +# send 16 null characters as reset signal to enter the bootloader +ser.write(b"\x00" * 16) +ser.close() diff --git a/lsm6ds3tr_demo/.DS_Store b/lsm6ds3tr_demo/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..9ad35ee736a1a202262b781aefb45145dd36a0bc GIT binary patch literal 6148 zcmeHKF-`+P3>=db5i}`jkoErT70E`Y-qYF-bEiAO-%F0yf{=ZPxsx?5&fJ u^Ilu%_w+AgZ7XLO9RfJ?kx7BSP~a2V?j>*l literal 0 HcmV?d00001 diff --git a/lsm6ds3tr_demo/Cargo.toml b/lsm6ds3tr_demo/Cargo.toml new file mode 100644 index 0000000..e10e7df --- /dev/null +++ b/lsm6ds3tr_demo/Cargo.toml @@ -0,0 +1,36 @@ +[package] +name = "lsm6ds3tr_demo" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +cortex-m.workspace = true +cortex-m-rt.workspace = true +nrf52840-hal.workspace = true +usb-device.workspace = true +usbd-serial.workspace = true +libm.workspace = true +nalgebra.workspace = true +heapless.workspace = true +lsm6ds3tr.workspace = true +defmt.workspace = true +defmt-rtt.workspace = true +embedded-alloc.workspace = true +embedded-hal.workspace = true +embedded-hal-async.workspace = true +nrf-softdevice.workspace = true +nrf-softdevice-s140.workspace = true +embassy-nrf.workspace = true +embassy-time.workspace = true +embassy-executor.workspace = true +embassy-sync.workspace = true +embassy-embedded-hal.workspace = true +fixed.workspace = true +atomic-pool.workspace = true +static_cell.workspace = true +embassy-usb.workspace = true +embassy-futures.workspace = true +panic-probe.workspace = true +assign-resources.workspace = true diff --git a/lsm6ds3tr_demo/src/common.rs b/lsm6ds3tr_demo/src/common.rs new file mode 100644 index 0000000..eb65974 --- /dev/null +++ b/lsm6ds3tr_demo/src/common.rs @@ -0,0 +1,4 @@ +#![macro_use] + +use defmt_rtt as _; // global logger +use embassy_nrf as _; // time driver diff --git a/lsm6ds3tr_demo/src/main.rs b/lsm6ds3tr_demo/src/main.rs new file mode 100644 index 0000000..e51f594 --- /dev/null +++ b/lsm6ds3tr_demo/src/main.rs @@ -0,0 +1,284 @@ +#![no_main] +#![no_std] + +use assign_resources::assign_resources; +use core::fmt::Write; +use defmt::{dbg, info, unwrap}; +use embassy_executor::Spawner; +use embassy_nrf::gpio::{Level, Output, OutputDrive}; +use embassy_nrf::usb::vbus_detect::HardwareVbusDetect; +use embassy_nrf::usb::Driver; +use embassy_nrf::{bind_interrupts, peripherals, twim, usb, Peripherals}; +use embassy_sync::blocking_mutex::raw::ThreadModeRawMutex; +use embassy_sync::mutex::Mutex; +use embassy_time::{Duration, Timer}; +use embassy_usb::class::cdc_acm::{CdcAcmClass, State}; +use embassy_usb::driver::EndpointError; +use embassy_usb::{Builder, Config, UsbDevice}; +use heapless::String; +use lsm6ds3tr::interface::I2cInterface; +use lsm6ds3tr::{ + registers::{GyroSampleRate, GyroScale}, + AccelSampleRate, AccelScale, AccelSettings, GyroSettings, LsmSettings, LSM6DS3TR, +}; +use static_cell::StaticCell; +use {defmt_rtt as _, panic_probe as _}; + +mod usb_dfu; + +bind_interrupts!(struct Irqs { + USBD => usb::InterruptHandler; + CLOCK_POWER => usb::vbus_detect::InterruptHandler; +}); + +assign_resources! { + imu: ImuResources { + spi: SPI2, + } +} + +bind_interrupts!(struct IrqsTest { + // SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0 => twim::InterruptHandler; + TWISPI0 => twim::InterruptHandler; +}); + +static I2C_BUS: StaticCell>> = + StaticCell::new(); + +type MyDriver = Driver<'static, peripherals::USBD, HardwareVbusDetect>; + +#[embassy_executor::main] +async fn main(spawner: Spawner) { + let p = embassy_nrf::init(Default::default()); + // let resources = split_resources!(p); + + // setup_dfu_over_usb(&spawner, p.USBD); + + // Create the driver, from the HAL. + let driver = Driver::new(p.USBD, Irqs, HardwareVbusDetect::new(Irqs)); + + let mut config = Config::new(0xc0de, 0xcafe); + config.manufacturer = Some("Umbrella Corporation"); + config.product = Some("Secret Project"); + config.serial_number = Some("11880"); + config.max_power = 100; + config.max_packet_size_0 = 64; + + static STATE: StaticCell = StaticCell::new(); + let state = STATE.init(State::new()); + + // Create embassy-usb DeviceBuilder using the driver and config. + static CONFIG_DESC: StaticCell<[u8; 256]> = StaticCell::new(); + static BOS_DESC: StaticCell<[u8; 256]> = StaticCell::new(); + static MSOS_DESC: StaticCell<[u8; 128]> = StaticCell::new(); + static CONTROL_BUF: StaticCell<[u8; 128]> = StaticCell::new(); + let mut builder = Builder::new( + driver, + config, + &mut CONFIG_DESC.init([0; 256])[..], + &mut BOS_DESC.init([0; 256])[..], + &mut MSOS_DESC.init([0; 128])[..], + &mut CONTROL_BUF.init([0; 128])[..], + ); + + // Create classes on the builder. + let mut class = CdcAcmClass::new(&mut builder, state, 64); + + // Build the builder. + let usb = builder.build(); + + unwrap!(spawner.spawn(usb_task(usb))); + + let mut led_red = Output::new(p.P0_06, Level::Low, OutputDrive::Standard); + + let mut pin = Output::new(p.P1_08, Level::High, OutputDrive::HighDrive); + pin.set_high(); + + Timer::after_millis(100).await; + + let sda_pin = p.P0_07; + let scl_pin = p.P0_27; + + let mut imuConfig = twim::Config::default(); + // This limits the ADXL355 ODR to 200Hz max. + imuConfig.frequency = twim::Frequency::K400; + // Internal pullups for SCL and SDA must be enabled. + imuConfig.scl_pullup = true; + imuConfig.sda_pullup = true; + + let i2c = twim::Twim::new(p.TWISPI0, IrqsTest, sda_pin, scl_pin, imuConfig); + + let settings = LsmSettings::basic() + .with_gyro( + GyroSettings::new() + .with_sample_rate(GyroSampleRate::_104Hz) + .with_scale(GyroScale::_2000DPS), + ) + .with_accel( + AccelSettings::new() + .with_sample_rate(AccelSampleRate::_104Hz) + .with_scale(AccelScale::_4G), + ); + + let mut imu = LSM6DS3TR::new(I2cInterface::new(i2c)).with_settings(settings); + imu.init().expect("LSM6DS3TR-C initialization failure!"); + + let blink_fut = async { + loop { + Timer::after_millis(500).await; + + if let (Ok(xyz_a), Ok(xyz_g)) = (imu.read_accel_raw(), imu.read_gyro()) { + class.wait_connection().await; + info!("Connected"); + + let temp = imu.read_temp().expect("Error reading temperature data."); + + let mut accel_data = String::<32>::new(); + if write!( + accel_data, + "Accel: x:{} y:{} z:{}\r\n", + xyz_a.x, xyz_a.y, xyz_a.z + ) + .is_ok() + { + if let Err(e) = class.write_packet(accel_data.as_bytes()).await { + info!("Failed to write to serial console: {:?}", e); + } + } + let mut gyro_data = String::<32>::new(); + if write!( + gyro_data, + "Gyro: x:{} y:{} z:{}\r\n", + xyz_g.x, xyz_g.y, xyz_g.z + ) + .is_ok() + { + if let Err(e) = class.write_packet(gyro_data.as_bytes()).await { + info!("Failed to write to serial console: {:?}", e); + } + } + + let mut temp_data = String::<32>::new(); + if write!(temp_data, "Degrees C1 = {}\r\n", temp).is_ok() { + if let Err(e) = class.write_packet(temp_data.as_bytes()).await { + info!("Failed to write to serial console: {:?}", e); + } + } + } else { + class.wait_connection().await; + info!("Connected"); + + let mut data = String::<32>::new(); + if write!(data, "Error: Could not read imu data. \r\n").is_ok() { + if let Err(e) = class.write_packet(data.as_bytes()).await { + info!("Failed to write to serial console: {:?}", e); + } + } + } + } + }; + + blink_fut.await; +} + +#[embassy_executor::task] +async fn led_blinking_task(resources: ImuResources) { + loop {} +} + +#[embassy_executor::task] +async fn usb_task(mut device: UsbDevice<'static, MyDriver>) { + device.run().await; +} + +#[embassy_executor::task] +async fn write_task(mut class: CdcAcmClass<'static, MyDriver>) { + let mut count = 1; + loop { + class.wait_connection().await; + info!("Connected"); + + let mut data = String::<32>::new(); + if write!(data, "Count: {}\r\n", count).is_ok() { + if let Err(e) = class.write_packet(data.as_bytes()).await { + info!("Failed to write to serial console: {:?}", e); + } + } + count += 1; + + // Add a delay of 1 second + Timer::after(Duration::from_secs(1)).await; + + info!("Disconnected"); + } +} + +#[embassy_executor::task] +async fn gyro_task(mut class: CdcAcmClass<'static, MyDriver>, p: &'static Peripherals) { + let mut count = 1; + loop { + class.wait_connection().await; + info!("Connected"); + + let mut data = String::<32>::new(); + if write!(data, "Count: {}\r\n", count).is_ok() { + if let Err(e) = class.write_packet(data.as_bytes()).await { + info!("Failed to write to serial console: {:?}", e); + } + } + count += 1; + + // Add a delay of 1 second + Timer::after(Duration::from_secs(1)).await; + + info!("Disconnected"); + } +} + +#[embassy_executor::task] +async fn print_task(mut class: CdcAcmClass<'static, MyDriver>, text: &'static str) { + class.wait_connection().await; + info!("Connected"); + + let mut data = String::<32>::new(); + if write!(data, "Count: {}\r\n", text).is_ok() { + if let Err(e) = class.write_packet(data.as_bytes()).await { + info!("Failed to write to serial console: {:?}", e); + } + } + + // Add a delay of 1 second + Timer::after(Duration::from_secs(1)).await; + info!("Disconnected"); +} + +#[embassy_executor::task] +async fn echo_task(mut class: CdcAcmClass<'static, MyDriver>) { + loop { + class.wait_connection().await; + info!("Connected :)"); + let _ = echo(&mut class).await; + info!("Disconnected :("); + } +} + +struct Disconnected {} + +impl From for Disconnected { + fn from(val: EndpointError) -> Self { + match val { + EndpointError::BufferOverflow => panic!("Buffer overflow"), + EndpointError::Disabled => Disconnected {}, + } + } +} + +async fn echo(class: &mut CdcAcmClass<'static, MyDriver>) -> Result<(), Disconnected> { + let mut buf = [0; 64]; + loop { + let n = class.read_packet(&mut buf).await?; + let data = &buf[..n]; + info!("data: {:x}", data); + class.write_packet(data).await?; + } +} diff --git a/lsm6ds3tr_demo/src/usb_dfu.rs b/lsm6ds3tr_demo/src/usb_dfu.rs new file mode 100644 index 0000000..a8bcfd0 --- /dev/null +++ b/lsm6ds3tr_demo/src/usb_dfu.rs @@ -0,0 +1,157 @@ +use crate::Irqs; +use core::fmt::Write; +use defmt::{info, unwrap}; +use embassy_executor::Spawner; +use embassy_futures::join::join; +use embassy_nrf::peripherals::USBD; +use embassy_nrf::usb::vbus_detect::{HardwareVbusDetect, VbusDetect}; +use embassy_nrf::usb::{Driver, Instance}; +use embassy_nrf::{pac, peripherals}; +use embassy_time::{Duration, Timer}; +use embassy_usb::class::cdc_acm::{CdcAcmClass, State}; +use embassy_usb::driver::EndpointError; +use embassy_usb::{Builder, Config}; +use heapless::String; + +use {defmt_rtt as _, panic_probe as _}; + +const MAGIC_REBOOT_MESSAGE: &str = "bootloader"; + +type MyDriver = Driver<'static, peripherals::USBD, HardwareVbusDetect>; + +/// Creates a usb serial device. +/// Sending it [MAGIC_REBOOT_MESSAGE] will reboot the device +/// into serial-only-dfu mode. +pub fn setup_dfu_over_usb(spawner: &Spawner, usbd: USBD) { + spawner.spawn(dfu_over_usb(usbd, *spawner)).unwrap(); +} + +#[embassy_executor::task] +async fn dfu_over_usb(usbd: USBD, spawner: Spawner) { + pac::CLOCK.tasks_hfclkstart().write_value(1); + while pac::CLOCK.events_hfclkstarted().read() != 1 {} + + // Create the driver, from the HAL. + let driver = Driver::new(usbd, Irqs, HardwareVbusDetect::new(Irqs)); + + // Create embassy-usb Config + let mut config = Config::new(0xc0de, 0xcafe); + config.manufacturer = Some("Embassy"); + config.product = Some("USB-serial example"); + config.serial_number = Some("12345678"); + config.max_power = 100; + config.max_packet_size_0 = 64; + + // Create embassy-usb DeviceBuilder using the driver and config. + // It needs some buffers for building the descriptors. + let mut config_descriptor = [0; 256]; + let mut bos_descriptor = [0; 256]; + let mut msos_descriptor = [0; 256]; + let mut control_buf = [0; 64]; + + let mut state = State::new(); + + let mut builder = Builder::new( + driver, + config, + &mut config_descriptor, + &mut bos_descriptor, + &mut msos_descriptor, + &mut control_buf, + ); + + // Create classes on the builder. + let mut class = CdcAcmClass::new(&mut builder, &mut state, 64); + + // Build the builder. + let mut usb = builder.build(); + + // Run the USB device. + let usb_fut = usb.run(); + + // Do stuff with the class! + // let reboot_fut = async { + // loop { + // class.wait_connection().await; + // let _ = reboot_on_magic_message(&mut class).await; + // } + // }; + + let print_fut = async { + let mut count = 1; + loop { + class.wait_connection().await; + info!("Connected"); + + let mut data = String::<32>::new(); + if write!(data, "Count: {}\r\n", count).is_ok() { + if let Err(e) = class.write_packet(data.as_bytes()).await { + info!("Failed to write to serial console: {:?}", e); + } + } + count += 1; + + // Add a delay of 1 second + Timer::after(Duration::from_secs(1)).await; + + info!("Disconnected"); + } + }; + + join(usb_fut, print_fut).await; +} + +struct Disconnected {} + +impl From for Disconnected { + fn from(val: EndpointError) -> Self { + match val { + EndpointError::BufferOverflow => panic!("Buffer overflow"), + EndpointError::Disabled => Disconnected {}, + } + } +} + +async fn reboot_on_magic_message<'d, T: Instance + 'd, P: VbusDetect + 'd>( + class: &mut CdcAcmClass<'d, Driver<'d, T, P>>, +) -> Result<(), Disconnected> { + let mut buf = [0; 64]; + + loop { + let n = class.read_packet(&mut buf).await?; + let data = &buf[..n]; + + if data == MAGIC_REBOOT_MESSAGE.as_bytes() { + // Reboot the controller in DFU mode. + // The magic number has been taken from the arduino bootloader: + // https://github.com/mike1808/PIO_SEEED_Adafruit_nRF52_Arduino/blob/master/cores/nRF5/wiring.c#L26 + let dfu_magic_serial_only_reset = 0x4E; + pac::POWER + .gpregret() + .write(|w| w.0 = dfu_magic_serial_only_reset); + cortex_m::peripheral::SCB::sys_reset(); + } + } +} + +#[embassy_executor::task] +async fn write_task(mut class: CdcAcmClass<'static, MyDriver>) { + let mut count = 1; + loop { + class.wait_connection().await; + info!("Connected"); + + let mut data = String::<32>::new(); + if write!(data, "Count: {}\r\n", count).is_ok() { + if let Err(e) = class.write_packet(data.as_bytes()).await { + info!("Failed to write to serial console: {:?}", e); + } + } + count += 1; + + // Add a delay of 1 second + Timer::after(Duration::from_secs(1)).await; + + info!("Disconnected"); + } +} diff --git a/memory.x b/memory.x new file mode 100644 index 0000000..7328124 --- /dev/null +++ b/memory.x @@ -0,0 +1,20 @@ +MEMORY +{ + /* https://infocenter.nordicsemi.com/index.jsp?topic=%2Fsds_s140%2FSDS%2Fs1xx%2Fmem_usage%2Fmem_resource_reqs.html&cp=5_7_4_0_13_0_0 */ + + /* Need to leave space for the SoftDevice + These values are confirmed working for S140 7.3.0 + + They were extracted from the Arduino IDE plugin linked indirectly at https://wiki.seeedstudio.com/XIAO_BLE/ + */ + FLASH (rx) : ORIGIN = 0x27000, LENGTH = 0xED000 - 0x27000 + + /* SRAM required by Softdevice depend on + * - Attribute Table Size (Number of Services and Characteristics) + * - Vendor UUID count + * - Max ATT MTU + * - Concurrent connection peripheral + central + secure links + * - Event Len, HVN queue, Write CMD queue + */ + RAM (rwx) : ORIGIN = 0x20006000, LENGTH = 0x20040000 - 0x20006000 +} \ No newline at end of file diff --git a/tflite_demo/.DS_Store b/tflite_demo/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..66961953b36d7438f1fea0340a139804352d8b0d GIT binary patch literal 6148 zcmeHKL2uJA6n<_?mog#s0Maf7lBWGyE8? z{1W~Se9!hK+5)Euq3J#8`Lmzj=fqzUJ0>DEnP>NihC~#=89M_MzcKD--?EO6^nuEb zVQ8NkGIUDiR<;EGM+NxVU8h4zXhtV^au?6%&sSeI^80uv3}whHH*@Lh-*VGMedh1uTY6R&brXi)Rj1p#*53(sg5BV4{J|{Z zCTZsNB$>VD)(d0G^t_&=FN=IJ9o{@NRg)A|KC^@(%aQWtRZ(STF){Nht1UNn9l;tVHPXvR_rsAMA3R*G2Ena6cOO5Wek@Nb^O*&~CxCCj+6|BAz*?-$ z|5H4xN>iO6&YUjQ(C~Oe!Q1HhRdF=ML;+Di6u2Y>{CXAaUeb6nj3^)qTpa~?eb8{m z$Ybl!E*&WB5dhdj*c$5myT}~vG4j|tL=Q|kD$r4tKVm3HM_l{7$Ybl!(MkEkhw@ie z{)D3J)iJ)d>7*iuQi=kiz`6om*BtWx|Mbu2|8 = matrix![ + 116, 98, 118, 95, 106, 85, 101, 81, 67, -18, -33, -12, -26, -128, 9, 34, 56, 45, 9, -12, 5, 30, + 23, 28, 0, -18, 0, -128, -60, -50, -50, -37, -60, -60, -50, -26, -33, -50, -33, -50, 83, 61, + 81, 55, 76, 61, 73, 64, 38, -8, -37, -20, -18, -20, 48, 29, 52, 41, 55, 18, 25, 37, 44, 37, 8, + 15, -6, -60, -128, -50, -37, -37, -18, -37, -26, -29, -37, -60, -50, -60, 95, 59, 52, -4, 54, + -18, 68, 43, 31, -18, -26, -33, -37, -29, 33, 7, -3, 8, 26, 24, 36, 6, 36, 23, 14, 8, -29, -37, + -37, -37, -50, -50, -26, -8, -26, -37, -18, -37, -60, -77, 50, 48, 83, 44, 56, -128, -33, -60, + 1, -26, -60, -43, -14, -23, -18, -43, -26, -33, 13, -77, -43, -77, -33, -37, 16, -12, -37, -50, + -50, -77, -20, -43, -60, -128, -60, -77, -37, -77, -60, -128, 37, -10, 65, -7, 28, -128, 10, + -77, -37, -128, -77, -128, -77, -43, -128, -128, -77, -128, -128, -128, -128, -128, -14, -128, + -43, -50, -37, -77, -128, -128, -77, -43, -29, -43, -20, -60, -37, -43, -50, -128, -77, -128, + -18, -128, -60, -128, -128, -128, -77, -128, -77, -128, -128, -128, -60, -37, -20, -128, -60, + -128, -128, -128, -60, -128, -77, -60, -128, -50, -60, -128, -77, -128, -50, -60, -37, -60, + -50, -77, -77, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -37, -128, + -128, -128, -128, -128, -77, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -77, -60, -128, -128, -50, -128, -50, -128, -50, -128, -77, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -77, -128, -77, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -77, -128, -77, -128, -77, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -77, -128, -128, -128, -128, + -77, -50, -128, -128, -77, -77, -128, -128, -128, -50, -128, 85, 43, 65, 53, 69, 60, 45, 3, 46, + -12, 9, -23, 32, -1, -128, -128, -128, -128, -1, 37, 38, 33, 43, 36, 58, 70, 68, 39, 6, 10, 32, + 6, 8, -23, -77, -128, -29, -128, -77, -128, 101, 87, 102, 91, 110, 88, 101, 83, 110, 95, 111, + 83, 81, 84, 106, 90, 93, 82, 98, 91, 108, 95, 118, 97, 118, 97, 116, 96, 113, 90, 110, 96, 107, + 85, 94, 66, 69, 36, 29, 0, 100, 60, 105, 68, 92, 93, 113, 92, 107, 85, 107, 83, 104, 91, 105, + 85, 112, 88, 101, 80, 101, 79, 96, 80, 98, 80, 105, 83, 98, 81, 103, 71, 100, 79, 83, 78, 91, + 47, 50, 13, 108, 81, 93, 78, 98, 76, 105, 76, 98, 40, 77, 72, 81, 62, 93, 77, 96, 80, 98, 61, + 97, 69, 88, 61, 71, 56, 98, 68, 97, 72, 89, 51, 81, 61, 88, 75, 86, 56, 48, 13, 71, 22, 84, 66, + 76, -7, 48, 61, 77, 62, 91, 65, 95, 74, 88, 59, 75, 58, 83, 55, 87, 55, 76, 43, 76, -3, 56, 60, + 79, 57, 71, 54, 82, 33, 74, 71, 91, 45, 18, -7, 61, 56, 77, 41, 73, 42, 82, 49, 59, 63, 82, 65, + 66, 38, 83, 34, 48, -8, 46, 20, 54, 33, 54, 6, 48, 16, 60, 37, 58, 22, 58, 14, 65, 53, 75, -4, + 42, 16, 16, -50, 22, -128, 80, 54, 43, -50, 42, -128, -10, -77, 28, -29, 68, 43, 73, 2, 25, + -60, 47, 14, 45, 7, 66, 4, 62, 37, 71, 7, 46, -10, 44, 22, 55, 53, 57, -29, 26, -10, -3, -128, + 38, -128, 46, -10, 16, -128, -10, -26, 60, -7, 65, 38, 70, -60, 35, -8, 42, -29, 6, -128, 34, + -128, 36, -60, 44, -12, -2, -128, -7, -60, -60, -128, -23, -128, 31, -33, 22, -77, -37, -43, + -128, -128, 3, -128, -23, -128, 17, -77, 43, -77, -7, -128, -20, -128, 17, -43, 32, -128, -43, + -128, -128, -77, 21, -128, -50, -128, -128, -128, -128, -128, -128, -128, -37, -128, -16, -128, + -50, -26, -6, -128, -128, -128, -128, -128, -23, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -16, -128, 36, -7, 16, -128, -128, -128, -128, -128, -77, -128, -37, -128, -50, + -128, -128, -128, -128, -128, -18, -128, 11, -128, -16, -77, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -26, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -20, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -50, -128, -77, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -77, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -1, -18, 5, -128, 40, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + 4, -128, 63, 66, 75, -128, 70, 60, 34, -128, -128, -128, -128, -128, -128, -128, -128, -128, + 87, 86, 95, 76, 91, 62, 72, -6, -50, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, 64, 83, 104, 70, 98, 90, 111, 89, 109, 80, 71, -128, -128, -128, -128, -128, -20, + -6, 27, 33, 86, 88, 108, 75, 108, 76, 98, 64, 75, 61, 71, 66, 85, -1, -77, -128, 46, 61, 92, + 69, 100, 93, 113, 80, 108, 93, 113, 91, 110, 80, 85, 15, -33, -128, 12, -50, 34, 50, 70, 55, + 84, 72, 108, 81, 111, 88, 100, 80, 84, 73, 97, 86, 99, 65, 85, 43, 96, 78, 107, 94, 118, 98, + 115, 92, 118, 94, 111, 93, 111, 86, 99, 52, 32, -16, 48, 31, 81, 74, 85, 64, 78, 64, 98, 70, + 110, 92, 96, 73, 100, 72, 94, 73, 98, 76, 85, 67, 101, 83, 101, 83, 112, 89, 98, 85, 105, 78, + 98, 72, 102, 80, 95, 23, 19, -8, 52, 57, 103, 91, 95, 65, 74, 8, 77, 49, 96, 76, 100, 87, 105, + 81, 94, 62, 94, 78, 81, 72, 99, 82, 101, 78, 108, 65, 82, 70, 100, 63, 79, 58, 80, 59, 87, 48, + 50, 57, 93, 67, 86, 80, 103, 56, 77, 31, 81, 57, 62, 41, 96, 85, 91, 71, 101, 76, 89, 78, 95, + 76, 96, 79, 103, 81, 103, 48, 70, 57, 88, 66, 84, 11, 85, 67, 104, 37, 38, 67, 90, 54, 81, 62, + 90, 52, 78, -60, 54, -8, 68, 40, 55, 8, 77, 52, 66, 31, 55, 13, 60, 26, 69, 42, 63, -29, 57, + -128, -3, -128, 3, -128, -29, -60, 52, -43, 63, 56, 86, 75, 95, 75, 85, 63, 82, 10, 50, -128, + 31, -77, 0, -77, -23, -128, 12, -77, 51, -3, 58, -14, 44, 0, 48, 4, 53, 47, 28, -128, -128, + -128, -37, -128, -3, -128, 49, 61, 100, 90, 117, 88, 107, 94, 112, 64, 96, 83, -128, -128, 7, + -128, -77, -128, -23, -128, -23, -128, 16, -37, 65, -8, 48, 20, 14, -77, 57, -18, -43, -128, + -128, -128, -128, -128, -128, -128, 24, 12, 74, 76, 105, 76, 99, 80, 108, 79, 103, 85, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, 42, -128, -8, -128, -50, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -60, -128, -128, 5, 73, 53, 93, 70, 101, + 73, 94, 57, 86, 66, -18, -128, -128, -128, -128, -128, -128, -128, -128, -128, -50, -128, 36, + -128, -128, -128, -128, -128, -20, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, 23, 37, 75, 54, 97, 70, 83, 52, 85, 65, 7, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -43, -128, 23, -128, -43, -128, -33, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -26, -37, 65, 33, 76, 37, 73, 50, 77, 47, -12, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -7, -14, -4, -128, -14, -128, 18, -60, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -26, -60, 71, 42, 68, 53, 81, 49, + 73, 36, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -18, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + 15, -26, 44, -18, 59, 39, 57, 20, 62, 26, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, 49, -128, 30, 8, 69, 27, 62, 38, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -43, -128, 28, -37, 48, -10, + 48, 11, 74, 37, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -77, -128, 11, -128, -7, -60, -77, -4, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -8, -128, -50, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128 +]; + +pub const NO: Buffer2D = matrix![ + 103, 78, 64, 76, 75, 54, 53, 67, 77, 60, 56, 70, 76, 71, 68, 58, 74, 32, 23, -2, -18, 11, 13, + 15, 9, 20, 5, -7, -18, -2, -10, -18, -10, -12, 9, 7, -33, -12, -4, -18, 57, 17, 55, 62, 70, 45, + 61, 37, 67, 52, 48, 47, 55, 46, 57, 47, 73, 17, 27, 20, 19, 8, 15, -6, -1, 10, -12, -29, -6, + -23, -18, -3, -1, 5, 3, -4, -12, -8, -1, -14, 65, 48, 58, 43, 48, 19, 39, 39, 57, 57, 58, 55, + 67, 58, 49, 50, 70, 27, 9, 16, 37, 4, 25, 4, 11, 9, 7, -33, -7, -12, 3, -6, -29, -7, -7, -18, + -12, -18, -2, -1, 0, 31, 60, -8, 51, 59, 70, 40, 71, 57, 52, 38, 66, 48, 17, 6, 59, 8, 15, 7, + 18, 4, 18, -23, -8, -4, -3, -12, -3, -26, 1, 10, 2, -29, -29, -37, -7, -4, 6, -33, 67, 44, 59, + -4, 64, 51, 68, 55, 74, 9, 40, 15, 57, 33, 60, 18, 40, 25, 27, -20, 25, -16, 6, 17, -10, -12, + -23, -43, -23, -23, -29, -37, -4, -16, -16, -60, -20, -23, -10, -29, -12, 15, 12, -37, 27, 15, + 61, 44, 50, 8, 48, 22, 49, -18, 46, 33, 42, 34, 46, -8, 4, -18, -43, -43, -10, 1, -10, -16, + -10, -77, -16, -33, 11, -26, -23, -37, 0, -8, -16, -29, 42, 40, 68, 24, 47, 46, 53, -128, 30, + 2, 42, 21, 21, -4, 43, 2, 43, 5, 32, -26, 7, -37, -43, -23, -2, -8, 2, -37, -50, -60, -1, -7, + -33, -77, -6, -18, -16, -50, -12, -33, 53, 8, 52, 18, 51, 35, 69, 26, 44, 8, 27, -128, 21, -33, + 17, -14, 38, -128, -14, -18, 17, -20, -14, -37, 8, -60, -33, -33, -33, -43, -12, -29, -12, + -128, -33, -60, -26, -77, -26, -50, 57, 29, 11, 30, 53, -10, 45, 15, 18, -10, 42, 2, 31, -29, + 10, -4, 42, -37, -50, -128, -4, -43, -20, -77, -14, -26, -33, -128, -12, -43, -8, -33, -33, + -60, -43, -77, -12, -60, -26, -50, 40, -23, 36, 35, 50, -2, 37, 27, 26, -77, 49, -7, 28, -43, + 6, 11, 41, -37, 33, -26, -14, -12, -6, -33, -16, -26, -20, -77, -14, -43, -8, -50, -14, -37, + -26, -77, -26, -77, -14, -29, 50, -60, 25, -26, 57, 38, 51, 1, 50, 1, 53, -18, 30, -23, 11, + -128, 18, -43, 20, -26, -10, -26, -12, -128, -50, -60, -37, -77, -20, -43, -50, -128, -77, + -128, -77, -128, -33, -77, -20, -60, 53, -10, -37, -128, 10, -128, 60, 18, -8, 13, 37, -37, 8, + -128, 3, -77, 32, -29, 14, 10, -12, -77, -37, -77, -37, -60, -23, -128, -43, -50, -16, -77, -6, + -33, 0, -60, -43, -128, -16, -60, 20, -2, 51, 19, 43, 2, 63, 20, 60, -4, 42, -50, 4, -128, 2, + -3, 32, -33, -26, -128, -18, -128, -33, -43, -7, -60, -50, -77, -29, -77, -23, -128, -16, -26, + -23, -60, -37, -77, -37, -128, -1, -33, 39, 48, 60, 5, 8, -128, 44, 11, 4, 0, 13, -77, -2, -20, + 33, -128, -33, -77, -8, -128, -14, -128, -33, -18, -12, -77, -16, -128, -37, -128, -12, -77, + -60, -128, -23, -60, -23, -128, 36, -50, 46, -128, 66, 39, 18, -14, -12, -77, -20, -6, 24, + -128, 28, -26, 21, -77, -6, -33, 1, -128, -43, -128, -1, -50, -37, -128, -50, -128, -33, -128, + -18, -128, -60, -8, -7, -60, -60, -128, -6, -29, 20, -1, 73, 40, -43, -14, 33, -43, 33, -3, 15, + -29, 29, -43, 20, -60, -29, -128, -20, -26, 4, -77, -16, -60, -33, -50, -29, -128, -60, -128, + -77, -128, -37, -50, 0, -77, -33, -128, 39, 8, 47, 10, 62, 16, 2, 1, 10, 7, 4, -7, 6, -128, + -77, -50, 19, -77, -77, -128, -77, -128, -50, -128, -60, -60, -33, -50, -37, -128, -128, -128, + -60, -128, -37, -60, -18, -128, -33, -77, 37, 23, 29, -128, -128, -128, -16, -128, -16, -33, + 21, -20, -8, -60, -2, -60, 11, -128, -50, -128, -50, -128, -29, -77, -16, -128, -26, -128, -50, + -77, -43, -128, -128, -128, -50, -128, -33, -128, -33, -50, -23, -128, 24, -128, -128, -77, 4, + -23, 32, -128, 1, -26, -14, -128, 10, -77, -4, -128, 1, -50, -8, -77, -77, -77, -23, -128, -50, + -43, -33, -128, -43, -128, -128, -128, -43, -128, -50, -128, -128, -128, 44, 15, 14, -128, 9, + -128, 21, 0, 29, -7, 18, -7, -7, -128, -33, -50, 14, -60, -60, -128, -60, -128, -37, -128, -43, + -128, -20, -128, -50, -128, -43, -77, -26, -128, -60, -50, -60, -128, -77, -128, -3, -128, 14, + -77, -26, 11, 47, -77, -7, -77, 45, -43, -12, 14, 37, -60, 22, -4, 5, -77, -14, -128, -10, -60, + 22, -77, -12, -60, -50, -128, -60, -128, -60, -128, -43, -128, -50, -128, -77, -50, 27, -37, + 33, -128, 4, -29, -4, -50, -20, -128, 6, -37, -33, -128, -50, -128, 34, 15, -43, -128, -20, + -50, -3, -37, -37, -77, -77, -128, -43, -128, -128, -128, 4, -26, -26, 27, 0, -128, -29, -60, + 35, -26, 23, -128, -29, -77, 19, 14, 28, -128, -16, -7, 31, -1, 17, 11, 60, 44, 8, 11, 18, + -128, -33, -60, -1, -128, -43, -128, -23, -128, -128, -128, 59, 43, 35, 61, 37, -77, -77, -50, + 116, 88, 98, 69, 78, 53, 78, 40, 48, 7, 29, -18, -2, -14, 5, 12, 65, 35, 31, -12, 33, -2, -6, + -1, 44, -29, -14, -60, -4, -43, -37, -128, 29, 18, 38, 51, 8, -128, -12, -37, 115, 91, 113, 77, + 89, 36, 60, 44, 49, 36, 27, 31, 63, 30, 62, 14, 55, 49, 42, 0, 45, 17, -23, 1, 30, -37, -50, + -77, -8, -60, 9, -60, -12, -50, 13, 4, 23, -6, 28, 13, 107, 78, 101, 73, 89, 46, 63, 17, 34, + -43, -6, 30, 67, 40, 77, 21, 53, 39, 38, 12, -6, 5, 28, -2, 18, -43, 0, -128, -29, -77, 18, + -128, -2, -77, 39, 35, 38, 35, 50, 29, 100, 70, 94, 69, 86, 50, 45, 38, 45, 12, 58, 64, 74, 36, + 77, 45, 78, 62, 8, -60, 38, 6, 21, 7, 8, -37, -1, -20, 48, -37, 8, -10, 8, 13, 45, 39, 38, 22, + 49, 25, 94, 63, 87, 66, 84, -128, 29, 20, 55, 51, 80, 36, 62, 30, 81, 72, 68, 37, 51, 27, 54, + 22, 16, -29, 4, 9, 57, 15, 35, -43, -77, -20, 4, 6, 37, -1, 40, 31, 47, 14, 89, 68, 96, 83, + 111, 96, 115, 87, 99, 76, 105, 84, 105, 86, 113, 91, 108, 87, 110, 78, 80, 46, 22, 74, 88, 72, + 103, 86, 80, 68, 48, 24, 68, 48, 55, 36, 108, 90, 90, 63, 83, 63, 87, 64, 90, 92, 113, 88, 102, + 79, 109, 83, 100, 89, 109, 60, 56, 21, 75, 62, 81, 45, 63, 73, 93, 65, 94, 80, 89, 81, 73, 3, + 43, 60, 102, 70, 84, 67, 99, 74, 78, 57, 79, 50, 93, 82, 98, 56, 77, 70, 91, 71, 85, 82, 86, + 13, 45, -18, 48, 40, 53, 28, 85, 60, 65, 52, 86, 78, 76, 46, 73, 19, 35, 54, 75, 40, 71, 60, + 82, 37, 69, 42, 62, 40, 96, 70, 85, 77, 70, 68, 103, 84, 94, 69, 81, -128, -128, -128, -43, + -37, 40, 2, 48, 45, 76, 37, 65, 16, 43, 18, 58, 20, 27, 12, 71, 31, 53, 44, 88, 47, 50, 33, 39, + 8, 89, 57, 88, 69, 72, 63, 100, 68, 81, -77, -10, -128, -128, -128, -128, -128, 13, -77, 8, 27, + 60, 28, 41, -128, -37, -128, 28, -43, -18, -128, 47, -37, 45, 27, 51, -29, 15, 39, 52, 30, 49, + -33, 65, 15, 76, 71, 90, 19, 46, -128, -16, -128, -128, -128, -128, -128, -128, -128, -18, + -128, -20, -128, 32, -128, 21, -33, 45, -128, -128, -128, -12, -128, -6, -14, 43, -128, -128, + -128, -128, -128, 52, -18, 69, -43, 78, 55, 42, -128, -29, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, 14, -128, -16, -128, -128, -128, 7, -128, -128, -128, -128, -128, + -128, -128, 12, -128, -128, -128, -128, -16, 59, -50, 35, -128, 42, 0, 47, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -33, -128, -23, -128, -128, -128, + -23, -128, -128, -128, -128, -128, -128, -128, -33, -128, -128, -128, -128, -128, -128, -128, + -8, -128, 36, -50, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -37, -128, -128, -60, -10, -128, -128, -128, -128, -128, -128, -128, + 21, -128, -128, -128, -128, -128, -128, -128, -128, -128, -12, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -77, -128, -128, -128, -29, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -29, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -50, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128 +]; diff --git a/tflite_demo/models/.DS_Store b/tflite_demo/models/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..311bf6fadaa605564deaac3e4c416f41f09fc506 GIT binary patch literal 6148 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

FXyvLv~;pz9{UV59fwL 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≻xycso3POEy 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 usb::InterruptHandler; + CLOCK_POWER => usb::vbus_detect::InterruptHandler; +}); + +assign_resources! { + imu: ImuResources { + spi: SPI2, + } +} + +bind_interrupts!(struct IrqsTest { + // SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0 => twim::InterruptHandler; + TWISPI0 => twim::InterruptHandler; +}); + +static I2C_BUS: StaticCell>> = + StaticCell::new(); + +type MyDriver = Driver<'static, peripherals::USBD, HardwareVbusDetect>; + +#[embassy_executor::main] +async fn main(spawner: Spawner) { + let p = embassy_nrf::init(Default::default()); + // let resources = split_resources!(p); + + // setup_dfu_over_usb(&spawner, p.USBD); + + // Create the driver, from the HAL. + let driver = Driver::new(p.USBD, Irqs, HardwareVbusDetect::new(Irqs)); + + let mut config = Config::new(0xc0de, 0xcafe); + config.manufacturer = Some("Umbrella Corporation"); + config.product = Some("Secret Project"); + config.serial_number = Some("11880"); + config.max_power = 100; + config.max_packet_size_0 = 64; + + static STATE: StaticCell = StaticCell::new(); + let state = STATE.init(State::new()); + + // Create embassy-usb DeviceBuilder using the driver and config. + static CONFIG_DESC: StaticCell<[u8; 256]> = StaticCell::new(); + static BOS_DESC: StaticCell<[u8; 256]> = StaticCell::new(); + static MSOS_DESC: StaticCell<[u8; 128]> = StaticCell::new(); + static CONTROL_BUF: StaticCell<[u8; 128]> = StaticCell::new(); + let mut builder = Builder::new( + driver, + config, + &mut CONFIG_DESC.init([0; 256])[..], + &mut BOS_DESC.init([0; 256])[..], + &mut MSOS_DESC.init([0; 128])[..], + &mut CONTROL_BUF.init([0; 128])[..], + ); + + // Create classes on the builder. + let mut class = CdcAcmClass::new(&mut builder, state, 64); + + // Build the builder. + let usb = builder.build(); + + unwrap!(spawner.spawn(usb_task(usb))); + + let mut led_red = Output::new(p.P0_06, Level::Low, OutputDrive::Standard); + + let mut pin = Output::new(p.P1_08, Level::High, OutputDrive::HighDrive); + pin.set_high(); + + Timer::after_millis(100).await; + + let sda_pin = p.P0_07; + let scl_pin = p.P0_27; + + let mut imuConfig = twim::Config::default(); + // This limits the ADXL355 ODR to 200Hz max. + imuConfig.frequency = twim::Frequency::K400; + // Internal pullups for SCL and SDA must be enabled. + imuConfig.scl_pullup = true; + imuConfig.sda_pullup = true; + + let i2c = twim::Twim::new(p.TWISPI0, IrqsTest, sda_pin, scl_pin, imuConfig); + + let settings = LsmSettings::basic() + .with_gyro( + GyroSettings::new() + .with_sample_rate(GyroSampleRate::_104Hz) + .with_scale(GyroScale::_2000DPS), + ) + .with_accel( + AccelSettings::new() + .with_sample_rate(AccelSampleRate::_104Hz) + .with_scale(AccelScale::_4G), + ); + + let mut imu = LSM6DS3TR::new(I2cInterface::new(i2c)).with_settings(settings); + imu.init().expect("LSM6DS3TR-C initialization failure!"); + + let blink_fut = async { + loop { + Timer::after_millis(500).await; + + if let (Ok(xyz_a), Ok(xyz_g)) = (imu.read_accel_raw(), imu.read_gyro()) { + class.wait_connection().await; + info!("Connected"); + + let temp = imu.read_temp().expect("Error reading temperature data."); + // imu.read_temp() + + let mut accel_data = String::<32>::new(); + if write!( + accel_data, + "Accel: x:{} y:{} z:{}\r\n", + xyz_a.x, xyz_a.y, xyz_a.z + ) + .is_ok() + { + if let Err(e) = class.write_packet(accel_data.as_bytes()).await { + info!("Failed to write to serial console: {:?}", e); + } + } + let mut gyro_data = String::<32>::new(); + if write!( + gyro_data, + "Gyro: x:{} y:{} z:{}\r\n", + xyz_g.x, xyz_g.y, xyz_g.z + ) + .is_ok() + { + if let Err(e) = class.write_packet(gyro_data.as_bytes()).await { + info!("Failed to write to serial console: {:?}", e); + } + } + + let mut temp_data = String::<32>::new(); + if write!(temp_data, "Degrees C1 = {}\r\n", temp).is_ok() { + if let Err(e) = class.write_packet(temp_data.as_bytes()).await { + info!("Failed to write to serial console: {:?}", e); + } + } + } else { + class.wait_connection().await; + info!("Connected"); + + let mut data = String::<32>::new(); + if write!(data, "Error: Could not read imu data. \r\n").is_ok() { + if let Err(e) = class.write_packet(data.as_bytes()).await { + info!("Failed to write to serial console: {:?}", e); + } + } + } + } + }; + + blink_fut.await; +} + +#[embassy_executor::task] +async fn led_blinking_task(resources: ImuResources) { + loop {} +} + +#[embassy_executor::task] +async fn usb_task(mut device: UsbDevice<'static, MyDriver>) { + device.run().await; +} + +#[embassy_executor::task] +async fn write_task(mut class: CdcAcmClass<'static, MyDriver>) { + let mut count = 1; + loop { + class.wait_connection().await; + info!("Connected"); + + let mut data = String::<32>::new(); + if write!(data, "Count: {}\r\n", count).is_ok() { + if let Err(e) = class.write_packet(data.as_bytes()).await { + info!("Failed to write to serial console: {:?}", e); + } + } + count += 1; + + // Add a delay of 1 second + Timer::after(Duration::from_secs(1)).await; + + info!("Disconnected"); + } +} + +#[embassy_executor::task] +async fn gyro_task(mut class: CdcAcmClass<'static, MyDriver>, p: &'static Peripherals) { + let mut count = 1; + loop { + class.wait_connection().await; + info!("Connected"); + + let mut data = String::<32>::new(); + if write!(data, "Count: {}\r\n", count).is_ok() { + if let Err(e) = class.write_packet(data.as_bytes()).await { + info!("Failed to write to serial console: {:?}", e); + } + } + count += 1; + + // Add a delay of 1 second + Timer::after(Duration::from_secs(1)).await; + + info!("Disconnected"); + } +} + +#[embassy_executor::task] +async fn print_task(mut class: CdcAcmClass<'static, MyDriver>, text: &'static str) { + class.wait_connection().await; + info!("Connected"); + + let mut data = String::<32>::new(); + if write!(data, "Count: {}\r\n", text).is_ok() { + if let Err(e) = class.write_packet(data.as_bytes()).await { + info!("Failed to write to serial console: {:?}", e); + } + } + + // Add a delay of 1 second + Timer::after(Duration::from_secs(1)).await; + info!("Disconnected"); +} + +#[embassy_executor::task] +async fn echo_task(mut class: CdcAcmClass<'static, MyDriver>) { + loop { + class.wait_connection().await; + info!("Connected :)"); + let _ = echo(&mut class).await; + info!("Disconnected :("); + } +} + +struct Disconnected {} + +impl From for Disconnected { + fn from(val: EndpointError) -> Self { + match val { + EndpointError::BufferOverflow => panic!("Buffer overflow"), + EndpointError::Disabled => Disconnected {}, + } + } +} + +async fn echo(class: &mut CdcAcmClass<'static, MyDriver>) -> Result<(), Disconnected> { + let mut buf = [0; 64]; + loop { + let n = class.read_packet(&mut buf).await?; + let data = &buf[..n]; + info!("data: {:x}", data); + class.write_packet(data).await?; + } +} diff --git a/tflite_demo/src/usb_dfu.rs b/tflite_demo/src/usb_dfu.rs new file mode 100644 index 0000000..a8bcfd0 --- /dev/null +++ b/tflite_demo/src/usb_dfu.rs @@ -0,0 +1,157 @@ +use crate::Irqs; +use core::fmt::Write; +use defmt::{info, unwrap}; +use embassy_executor::Spawner; +use embassy_futures::join::join; +use embassy_nrf::peripherals::USBD; +use embassy_nrf::usb::vbus_detect::{HardwareVbusDetect, VbusDetect}; +use embassy_nrf::usb::{Driver, Instance}; +use embassy_nrf::{pac, peripherals}; +use embassy_time::{Duration, Timer}; +use embassy_usb::class::cdc_acm::{CdcAcmClass, State}; +use embassy_usb::driver::EndpointError; +use embassy_usb::{Builder, Config}; +use heapless::String; + +use {defmt_rtt as _, panic_probe as _}; + +const MAGIC_REBOOT_MESSAGE: &str = "bootloader"; + +type MyDriver = Driver<'static, peripherals::USBD, HardwareVbusDetect>; + +/// Creates a usb serial device. +/// Sending it [MAGIC_REBOOT_MESSAGE] will reboot the device +/// into serial-only-dfu mode. +pub fn setup_dfu_over_usb(spawner: &Spawner, usbd: USBD) { + spawner.spawn(dfu_over_usb(usbd, *spawner)).unwrap(); +} + +#[embassy_executor::task] +async fn dfu_over_usb(usbd: USBD, spawner: Spawner) { + pac::CLOCK.tasks_hfclkstart().write_value(1); + while pac::CLOCK.events_hfclkstarted().read() != 1 {} + + // Create the driver, from the HAL. + let driver = Driver::new(usbd, Irqs, HardwareVbusDetect::new(Irqs)); + + // Create embassy-usb Config + let mut config = Config::new(0xc0de, 0xcafe); + config.manufacturer = Some("Embassy"); + config.product = Some("USB-serial example"); + config.serial_number = Some("12345678"); + config.max_power = 100; + config.max_packet_size_0 = 64; + + // Create embassy-usb DeviceBuilder using the driver and config. + // It needs some buffers for building the descriptors. + let mut config_descriptor = [0; 256]; + let mut bos_descriptor = [0; 256]; + let mut msos_descriptor = [0; 256]; + let mut control_buf = [0; 64]; + + let mut state = State::new(); + + let mut builder = Builder::new( + driver, + config, + &mut config_descriptor, + &mut bos_descriptor, + &mut msos_descriptor, + &mut control_buf, + ); + + // Create classes on the builder. + let mut class = CdcAcmClass::new(&mut builder, &mut state, 64); + + // Build the builder. + let mut usb = builder.build(); + + // Run the USB device. + let usb_fut = usb.run(); + + // Do stuff with the class! + // let reboot_fut = async { + // loop { + // class.wait_connection().await; + // let _ = reboot_on_magic_message(&mut class).await; + // } + // }; + + let print_fut = async { + let mut count = 1; + loop { + class.wait_connection().await; + info!("Connected"); + + let mut data = String::<32>::new(); + if write!(data, "Count: {}\r\n", count).is_ok() { + if let Err(e) = class.write_packet(data.as_bytes()).await { + info!("Failed to write to serial console: {:?}", e); + } + } + count += 1; + + // Add a delay of 1 second + Timer::after(Duration::from_secs(1)).await; + + info!("Disconnected"); + } + }; + + join(usb_fut, print_fut).await; +} + +struct Disconnected {} + +impl From for Disconnected { + fn from(val: EndpointError) -> Self { + match val { + EndpointError::BufferOverflow => panic!("Buffer overflow"), + EndpointError::Disabled => Disconnected {}, + } + } +} + +async fn reboot_on_magic_message<'d, T: Instance + 'd, P: VbusDetect + 'd>( + class: &mut CdcAcmClass<'d, Driver<'d, T, P>>, +) -> Result<(), Disconnected> { + let mut buf = [0; 64]; + + loop { + let n = class.read_packet(&mut buf).await?; + let data = &buf[..n]; + + if data == MAGIC_REBOOT_MESSAGE.as_bytes() { + // Reboot the controller in DFU mode. + // The magic number has been taken from the arduino bootloader: + // https://github.com/mike1808/PIO_SEEED_Adafruit_nRF52_Arduino/blob/master/cores/nRF5/wiring.c#L26 + let dfu_magic_serial_only_reset = 0x4E; + pac::POWER + .gpregret() + .write(|w| w.0 = dfu_magic_serial_only_reset); + cortex_m::peripheral::SCB::sys_reset(); + } + } +} + +#[embassy_executor::task] +async fn write_task(mut class: CdcAcmClass<'static, MyDriver>) { + let mut count = 1; + loop { + class.wait_connection().await; + info!("Connected"); + + let mut data = String::<32>::new(); + if write!(data, "Count: {}\r\n", count).is_ok() { + if let Err(e) = class.write_packet(data.as_bytes()).await { + info!("Failed to write to serial console: {:?}", e); + } + } + count += 1; + + // Add a delay of 1 second + Timer::after(Duration::from_secs(1)).await; + + info!("Disconnected"); + } +}