From 45affbb3251dd6cb7aa58115ef7ef35cb32f163a Mon Sep 17 00:00:00 2001 From: baldeau Date: Sun, 12 Jan 2025 19:39:49 +0100 Subject: [PATCH 1/2] start to switch to embassy --- .cargo/config.toml | 17 +- Cargo.lock | 987 +++++------------- Cargo.toml | 144 ++- tflite_demo/src/lsm6ds.rs => lsm6ds.rs | 0 tflite_demo/Cargo.toml | 51 +- tflite_demo/src/common.rs | 4 - tflite_demo/src/i2c.rs | 16 - tflite_demo/{ => src}/lsm6ds3tr/consts.rs | 0 tflite_demo/{ => src}/lsm6ds3tr/data.rs | 0 .../{ => src}/lsm6ds3tr/interface/i2c.rs | 0 .../{ => src}/lsm6ds3tr/interface/mod.rs | 0 tflite_demo/{ => src}/lsm6ds3tr/mod.rs | 0 .../lsm6ds3tr/registers/addresses.rs | 261 ----- .../{ => src}/lsm6ds3tr/registers/ctrl1_xl.rs | 0 .../{ => src}/lsm6ds3tr/registers/ctrl2_g.rs | 0 .../{ => src}/lsm6ds3tr/registers/ctrl3_c.rs | 0 .../{ => src}/lsm6ds3tr/registers/ctrl4_c.rs | 0 .../lsm6ds3tr/registers/drdy_pulse_cfg_g.rs | 0 .../lsm6ds3tr/registers/free_fall.rs | 0 .../lsm6ds3tr/registers/int1_ctrl.rs | 0 .../lsm6ds3tr/registers/int2_ctrl.rs | 0 .../{ => src}/lsm6ds3tr/registers/int_dur2.rs | 0 .../{ => src}/lsm6ds3tr/registers/md1_cfg.rs | 0 .../{ => src}/lsm6ds3tr/registers/md2_cfg.rs | 0 .../{ => src}/lsm6ds3tr/registers/mod.rs | 0 .../{ => src}/lsm6ds3tr/registers/tap_cfg.rs | 0 .../{ => src}/lsm6ds3tr/registers/tap_src.rs | 0 .../lsm6ds3tr/registers/tap_ths_6d.rs | 0 .../lsm6ds3tr/registers/wake_up_dur.rs | 0 .../lsm6ds3tr/registers/wake_up_src.rs | 0 .../lsm6ds3tr/registers/wake_up_ths.rs | 0 .../{ => src}/lsm6ds3tr/settings/accel.rs | 0 .../{ => src}/lsm6ds3tr/settings/gyro.rs | 0 .../{ => src}/lsm6ds3tr/settings/irq.rs | 0 .../{ => src}/lsm6ds3tr/settings/mod.rs | 0 tflite_demo/src/main.rs | 352 +++---- 36 files changed, 539 insertions(+), 1293 deletions(-) rename tflite_demo/src/lsm6ds.rs => lsm6ds.rs (100%) delete mode 100644 tflite_demo/src/common.rs delete mode 100644 tflite_demo/src/i2c.rs rename tflite_demo/{ => src}/lsm6ds3tr/consts.rs (100%) rename tflite_demo/{ => src}/lsm6ds3tr/data.rs (100%) rename tflite_demo/{ => src}/lsm6ds3tr/interface/i2c.rs (100%) rename tflite_demo/{ => src}/lsm6ds3tr/interface/mod.rs (100%) rename tflite_demo/{ => src}/lsm6ds3tr/mod.rs (100%) rename tflite_demo/{ => src}/lsm6ds3tr/registers/addresses.rs (55%) rename tflite_demo/{ => src}/lsm6ds3tr/registers/ctrl1_xl.rs (100%) rename tflite_demo/{ => src}/lsm6ds3tr/registers/ctrl2_g.rs (100%) rename tflite_demo/{ => src}/lsm6ds3tr/registers/ctrl3_c.rs (100%) rename tflite_demo/{ => src}/lsm6ds3tr/registers/ctrl4_c.rs (100%) rename tflite_demo/{ => src}/lsm6ds3tr/registers/drdy_pulse_cfg_g.rs (100%) rename tflite_demo/{ => src}/lsm6ds3tr/registers/free_fall.rs (100%) rename tflite_demo/{ => src}/lsm6ds3tr/registers/int1_ctrl.rs (100%) rename tflite_demo/{ => src}/lsm6ds3tr/registers/int2_ctrl.rs (100%) rename tflite_demo/{ => src}/lsm6ds3tr/registers/int_dur2.rs (100%) rename tflite_demo/{ => src}/lsm6ds3tr/registers/md1_cfg.rs (100%) rename tflite_demo/{ => src}/lsm6ds3tr/registers/md2_cfg.rs (100%) rename tflite_demo/{ => src}/lsm6ds3tr/registers/mod.rs (100%) rename tflite_demo/{ => src}/lsm6ds3tr/registers/tap_cfg.rs (100%) rename tflite_demo/{ => src}/lsm6ds3tr/registers/tap_src.rs (100%) rename tflite_demo/{ => src}/lsm6ds3tr/registers/tap_ths_6d.rs (100%) rename tflite_demo/{ => src}/lsm6ds3tr/registers/wake_up_dur.rs (100%) rename tflite_demo/{ => src}/lsm6ds3tr/registers/wake_up_src.rs (100%) rename tflite_demo/{ => src}/lsm6ds3tr/registers/wake_up_ths.rs (100%) rename tflite_demo/{ => src}/lsm6ds3tr/settings/accel.rs (100%) rename tflite_demo/{ => src}/lsm6ds3tr/settings/gyro.rs (100%) rename tflite_demo/{ => src}/lsm6ds3tr/settings/irq.rs (100%) rename tflite_demo/{ => src}/lsm6ds3tr/settings/mod.rs (100%) diff --git a/.cargo/config.toml b/.cargo/config.toml index d1ac1e2..278aa8a 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -1,8 +1,15 @@ +[target.'cfg(all(target_arch = "arm", target_os = "none"))'] +rustflags = [ + "-C", + "link-arg=-Tlink.x", + "-C", + "link-arg=-Tdefmt.x", + "-C", + "link-arg=--nmagic", +] + [build] target = "thumbv7em-none-eabihf" -[target.'cfg(all(target_arch = "arm", target_os = "none"))'] -rustflags = [ - "-C", "link-arg=-Tlink.x", - "-C", "link-arg=--nmagic", -] \ No newline at end of file +[env] +DEFMT_LOG = "debug" diff --git a/Cargo.lock b/Cargo.lock index 3b49a9d..f670490 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3,31 +3,15 @@ version = 4 [[package]] -name = "Inflector" -version = "0.11.4" +name = "ahash" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ - "lazy_static", - "regex", -] - -[[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", + "cfg-if", + "once_cell", + "version_check", + "zerocopy", ] [[package]] @@ -51,6 +35,12 @@ 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" @@ -93,24 +83,30 @@ 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.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1be3f42a67d6d345ecd59f675f3f012d6974981560836e938c22b424b85ce1be" + [[package]] name = "bytemuck" version = "1.21.0" @@ -119,24 +115,9 @@ checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3" [[package]] name = "byteorder" -version = "1.5.0" +version = "1.4.3" 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" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] name = "cfg-if" @@ -144,12 +125,6 @@ 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" @@ -157,7 +132,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ec610d8f49840a5b376c69663b6369e71f4b34484b9b2eb29fb918d92516cb9" dependencies = [ "bare-metal", - "bitfield", + "bitfield 0.13.2", "critical-section", "embedded-hal 0.2.7", "volatile-register", @@ -195,38 +170,14 @@ 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", + "darling_core", + "darling_macro", ] [[package]] @@ -239,28 +190,17 @@ dependencies = [ "ident_case", "proc-macro2", "quote", - "strsim 0.11.1", + "strsim", "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", + "darling_core", "quote", "syn 2.0.94", ] @@ -271,7 +211,7 @@ version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "86f6162c53f659f65d00619fe31f14556a6e9f8752ccc4a41bd177ffcf3d6130" dependencies = [ - "bitflags", + "bitflags 1.3.2", "defmt-macros", ] @@ -307,6 +247,17 @@ dependencies = [ "defmt", ] +[[package]] +name = "defmt-serial" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f58b953e44512ad9e2a5cbd0924d975619e84d017e7f77eb0c94955f73d19813" +dependencies = [ + "critical-section", + "defmt", + "embedded-io", +] + [[package]] name = "document-features" version = "0.2.10" @@ -318,13 +269,13 @@ dependencies = [ [[package]] name = "embassy-embedded-hal" -version = "0.1.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eca4a9380d03e61063067b8239f67d2fa9f108ede7c46b4273804f6b79e59a1d" +checksum = "41fea5ef5bed4d3468dfd44f5c9fa4cda8f54c86d4fb4ae683eacf9d39e2ea12" dependencies = [ "defmt", "embassy-futures", - "embassy-sync", + "embassy-sync 0.6.1", "embassy-time", "embedded-hal 0.2.7", "embedded-hal 1.0.0", @@ -336,26 +287,24 @@ dependencies = [ [[package]] name = "embassy-executor" -version = "0.5.1" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3d8701436bf0dc453703175459805045d049bf7404df7a68e59d05c7fbd1f04" +checksum = "90327bcc66333a507f89ecc4e2d911b265c45f5c9bc241f98eee076752d35ac6" dependencies = [ "cortex-m", "critical-section", "defmt", "document-features", "embassy-executor-macros", - "embassy-time-driver", - "embassy-time-queue-driver", ] [[package]] name = "embassy-executor-macros" -version = "0.4.2" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b11dfbb15afc12c4171ac6e2994567c00881f61a0c13ada4429028a3c7f425f" +checksum = "3577b1e9446f61381179a330fc5324b01d511624c55f25e3c66c9e3c626dbecf" dependencies = [ - "darling 0.20.10", + "darling", "proc-macro2", "quote", "syn 2.0.94", @@ -366,12 +315,15 @@ name = "embassy-futures" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f878075b9794c1e4ac788c95b728f26aa6366d32eeb10c7051389f898f7d067" +dependencies = [ + "defmt", +] [[package]] name = "embassy-hal-internal" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0ec47cf8bab914018d4bd2b4f0aaeb46e4f52ab1e7985df88aeef2c6eda5aed" +checksum = "0ef3bac31ec146321248a169e9c7b5799f1e0b3829c7a9b324cb4600a7438f59" dependencies = [ "cortex-m", "critical-section", @@ -380,11 +332,29 @@ dependencies = [ ] [[package]] -name = "embassy-nrf" -version = "0.1.0" +name = "embassy-net-driver" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2faba661a13ac3417714ef23aa191af65941586dee692dbffe76ff7d3529321b" +checksum = "524eb3c489760508f71360112bca70f6e53173e6fe48fc5f0efd0f5ab217751d" + +[[package]] +name = "embassy-net-driver-channel" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "584ab4da7e5612efaa7d55ee76161d9549adf788eab48d49362eddbf322f9933" dependencies = [ + "embassy-futures", + "embassy-net-driver", + "embassy-sync 0.3.0", +] + +[[package]] +name = "embassy-nrf" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d7494efe1e0183568327c7e681d4b77ed5241921dcb5976426d9a65b65a0c81" +dependencies = [ + "bitflags 2.7.0", "cfg-if", "cortex-m", "cortex-m-rt", @@ -393,9 +363,10 @@ dependencies = [ "document-features", "embassy-embedded-hal", "embassy-hal-internal", - "embassy-sync", + "embassy-sync 0.6.1", "embassy-time", "embassy-time-driver", + "embassy-time-queue-utils", "embassy-usb-driver", "embedded-hal 0.2.7", "embedded-hal 1.0.0", @@ -405,19 +376,22 @@ dependencies = [ "embedded-storage", "embedded-storage-async", "fixed", - "nrf52805-pac", - "nrf52810-pac", - "nrf52811-pac", - "nrf52820-pac", - "nrf52832-pac", - "nrf52833-pac", - "nrf52840-pac", - "nrf5340-app-pac", - "nrf5340-net-pac", - "nrf9160-pac", + "nrf-pac", "rand_core", ] +[[package]] +name = "embassy-sync" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0525b466ca3ace30b57f2db868a35215dfaecd038d8668cb2db03feb7c069a0" +dependencies = [ + "cfg-if", + "critical-section", + "futures-util", + "heapless 0.7.17", +] + [[package]] name = "embassy-sync" version = "0.5.0" @@ -426,45 +400,75 @@ checksum = "dd938f25c0798db4280fcd8026bf4c2f48789aebf8f77b6e5cf8a7693ba114ec" dependencies = [ "cfg-if", "critical-section", - "defmt", "embedded-io-async", "futures-util", - "heapless", + "heapless 0.8.0", ] [[package]] -name = "embassy-time" -version = "0.3.2" +name = "embassy-sync" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "158080d48f824fad101d7b2fae2d83ac39e3f7a6fa01811034f7ab8ffc6e7309" +checksum = "3899a6e39fa3f54bf8aaf00979f9f9c0145a522f7244810533abbb748be6ce82" dependencies = [ "cfg-if", "critical-section", "defmt", + "embedded-io-async", + "futures-sink", + "futures-util", + "heapless 0.8.0", +] + +[[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", "document-features", "embassy-time-driver", - "embassy-time-queue-driver", "embedded-hal 0.2.7", "embedded-hal 1.0.0", "embedded-hal-async", "futures-util", - "heapless", ] [[package]] name = "embassy-time-driver" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e0c214077aaa9206958b16411c157961fb7990d4ea628120a78d1a5a28aed24" +checksum = "8d45f5d833b6d98bd2aab0c2de70b18bfaa10faf661a1578fd8e5dfb15eb7eba" dependencies = [ "document-features", ] [[package]] -name = "embassy-time-queue-driver" +name = "embassy-time-queue-utils" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1177859559ebf42cd24ae7ba8fe6ee707489b01d0bf471f8827b7b12dcb0bc0" +checksum = "dc55c748d16908a65b166d09ce976575fb8852cf60ccd06174092b41064d8f83" +dependencies = [ + "embassy-executor", + "heapless 0.8.0", +] + +[[package]] +name = "embassy-usb" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66444f442f4efc155138a996e250821a6d83a0c40e28ce3de8f0d9033617838b" +dependencies = [ + "embassy-futures", + "embassy-net-driver-channel", + "embassy-sync 0.5.0", + "embassy-usb-driver", + "heapless 0.8.0", + "ssmarshal", + "usbd-hid", +] [[package]] name = "embassy-usb-driver" @@ -476,24 +480,15 @@ dependencies = [ ] [[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" +name = "embassy-usb-logger" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "994f7e5b5cb23521c22304927195f236813053eb9c065dd2226a32ba64695446" +checksum = "ffefdf915abf7230f2e44753b552e60895540e4931fc9a743bb9b1c7dca242f7" dependencies = [ - "stable_deref_trait", + "embassy-futures", + "embassy-sync 0.5.0", + "embassy-usb", + "log", ] [[package]] @@ -551,6 +546,12 @@ 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" @@ -563,58 +564,18 @@ dependencies = [ "typenum", ] -[[package]] -name = "flatbuffers" -version = "23.5.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dac53e22462d78c16d64a1cd22371b54cc3fe94aa15e7886a2fa6e5d1ab8640" -dependencies = [ - "bitflags", - "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" @@ -634,7 +595,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-core", - "futures-sink", "futures-task", "pin-project-lite", "pin-utils", @@ -678,6 +638,15 @@ dependencies = [ "crunchy", ] +[[package]] +name = "hash32" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67" +dependencies = [ + "byteorder", +] + [[package]] name = "hash32" version = "0.3.1" @@ -687,13 +656,35 @@ 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.7.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdc6457c0eb62c71aac4bc17216026d8410337c4126773b9c5daba343f17964f" +dependencies = [ + "atomic-polyfill", + "hash32 0.2.1", + "rustc_version 0.4.1", + "spin", + "stable_deref_trait", +] + [[package]] name = "heapless" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad" dependencies = [ - "hash32", + "hash32 0.3.1", "stable_deref_trait", ] @@ -703,30 +694,6 @@ 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" @@ -734,95 +701,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4ce301924b7887e9d637144fdade93f9dfff9b60981d4ac161db09720d39aa5" [[package]] -name = "lsm6ds3tr" -version = "0.3.0" -dependencies = [ - "embedded-hal 1.0.0", - "nrf52840-hal", -] - -[[package]] -name = "matrixmultiply" -version = "0.3.9" +name = "lock_api" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9380b911e3e96d10c1f415da0876389aaf1b56759054eeb0de7df940c456ba1a" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" dependencies = [ "autocfg", - "rawpointer", + "scopeguard", ] [[package]] -name = "memchr" -version = "2.7.4" +name = "log" +version = "0.4.22" 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", -] +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] name = "nb" @@ -840,227 +732,13 @@ 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-softdevice" +name = "nrf-pac" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225a21d963b2382617dbbff5953dc8c6c43fe56db5c5155f4d20a30c50c2766d" +checksum = "d334027d6703534f2a80de0794ae435c0e029358d28278533d3935e69b221b01" dependencies = [ "cortex-m", "cortex-m-rt", - "critical-section", - "defmt", - "embassy-futures", - "embassy-sync", - "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", - "vcell", -] - -[[package]] -name = "nrf52805-pac" -version = "0.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2da657648039d59f4de6bc31b948dd3a5d03b32529a4d5d19d9e2dd9d4bfa6c" -dependencies = [ - "cortex-m", - "cortex-m-rt", - "vcell", -] - -[[package]] -name = "nrf52810-pac" -version = "0.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c26b12d5af17a9f4bb9a06ca9a1f814bca3d67bc8715b23f8dc230b09a227666" -dependencies = [ - "cortex-m", - "cortex-m-rt", - "vcell", -] - -[[package]] -name = "nrf52811-pac" -version = "0.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4179b2a7ed0b2fd5e109d0fab9b4fc55b3936b2a4916a9306d22e5bc8dc1fd8f" -dependencies = [ - "cortex-m", - "cortex-m-rt", - "vcell", -] - -[[package]] -name = "nrf52820-pac" -version = "0.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4791cff995e6419a5ad1aebc3b3c9539d79125ca85eb5bfd2cff9b470b81071" -dependencies = [ - "cortex-m", - "cortex-m-rt", - "vcell", -] - -[[package]] -name = "nrf52832-pac" -version = "0.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0242b685c9c15648fb803e155628f42ace457478b2cb930868f40cae2db925e0" -dependencies = [ - "cortex-m", - "cortex-m-rt", - "vcell", -] - -[[package]] -name = "nrf52833-pac" -version = "0.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10e1358255b360cdc816dd7b6ef81be8c8499c0998277e5249bed222bd0f5241" -dependencies = [ - "cortex-m", - "cortex-m-rt", - "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 = "nrf5340-app-pac" -version = "0.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c88824573cd150fe9f27c1a48cea31a8cb24d3322df488875775143618c087a" -dependencies = [ - "cortex-m", - "cortex-m-rt", - "vcell", -] - -[[package]] -name = "nrf5340-net-pac" -version = "0.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5c03e44df22fe5888109fe42e523162c7059adf4d30860f4f73ecc8b1fc16fe" -dependencies = [ - "cortex-m", - "cortex-m-rt", - "vcell", -] - -[[package]] -name = "nrf9160-pac" -version = "0.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7344d74afb5684e00c48d175cad9619f36d629cfb0687d33b4d1bb86fba688f4" -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]] @@ -1073,31 +751,21 @@ dependencies = [ ] [[package]] -name = "num_enum" -version = "0.7.3" +name = "once_cell" +version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" -dependencies = [ - "num_enum_derive", -] +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" [[package]] -name = "num_enum_derive" -version = "0.7.3" +name = "panic-probe" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" +checksum = "4047d9235d1423d66cc97da7d07eddb54d4f154d6c13805c6d0793956f4f25b0" dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.94", + "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" @@ -1116,30 +784,6 @@ 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" @@ -1186,53 +830,6 @@ 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" @@ -1252,13 +849,10 @@ dependencies = [ ] [[package]] -name = "safe_arch" -version = "0.7.4" +name = "scopeguard" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96b02de82ddbe1b636e6170c21be622223aea188ef2e139be0a5b219ec215323" -dependencies = [ - "bytemuck", -] +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "semver" @@ -1282,28 +876,42 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] -name = "simba" -version = "0.8.1" +name = "serde" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "061507c94fc6ab4ba1c9a0305018408e312e17c041eb63bef8aa726fa33aceae" +checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" dependencies = [ - "approx", - "num-complex", - "num-traits", - "paste", - "wide", + "serde_derive", ] [[package]] -name = "simba" -version = "0.9.0" +name = "serde_derive" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3a386a501cd104797982c15ae17aafe8b9261315b5d07e3ec803f2ea26be0fa" +checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" dependencies = [ - "approx", - "num-complex", - "num-traits", - "paste", + "proc-macro2", + "quote", + "syn 2.0.94", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + +[[package]] +name = "ssmarshal" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3e6ad23b128192ed337dfa4f1b8099ced0c2bf30d61e551b65fda5916dbb850" +dependencies = [ + "encode_unicode", + "serde", ] [[package]] @@ -1321,54 +929,12 @@ 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" @@ -1395,30 +961,25 @@ dependencies = [ name = "tflite_demo" version = "0.1.0" dependencies = [ + "assign-resources", "atomic-pool", "cortex-m", "cortex-m-rt", "defmt", "defmt-rtt", + "defmt-serial", + "embassy-embedded-hal", "embassy-executor", + "embassy-futures", "embassy-nrf", - "embassy-sync", - "embassy-time", - "embedded-alloc", + "embassy-sync 0.6.1", + "embassy-usb", + "embassy-usb-logger", "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", - "usbd-serial", ] [[package]] @@ -1453,34 +1014,52 @@ 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" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f6cc3adc849b5292b4075fc0d5fdcf2f24866e88e336dd27a8943090a520508" - -[[package]] -name = "usbd-serial" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db75519b86287f12dcf0d171c7cf4ecc839149fe9f3b720ac4cfce52959e1dfe" +checksum = "98816b1accafbb09085168b90f27e93d790b4bfa19d883466b5e53315b5f06a6" dependencies = [ - "embedded-hal 0.2.7", - "nb 0.1.3", - "usb-device", + "heapless 0.8.0", + "portable-atomic", ] [[package]] -name = "uuid" -version = "1.11.1" +name = "usbd-hid" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b913a3b5fe84142e269d63cc62b64319ccaf89b748fc31fe025177f767a756c4" +checksum = "4e49faaa950e4f8bf93fff4bb4355722b8188b019541fb0aab4f10d27eb2f747" +dependencies = [ + "serde", + "ssmarshal", + "usb-device", + "usbd-hid-macros", +] + +[[package]] +name = "usbd-hid-descriptors" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "425346576e9c7e6e6436323eb0d257692b671cc37134c8b482fbe10258ac1dcb" +dependencies = [ + "bitfield 0.14.0", +] + +[[package]] +name = "usbd-hid-macros" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15d4b4288f034e48d96b3f662988774a5b3eb4308e42f515162c1f0ab9212ee8" +dependencies = [ + "byteorder", + "hashbrown", + "log", + "proc-macro2", + "quote", + "serde", + "syn 1.0.109", + "usbd-hid-descriptors", +] [[package]] name = "vcell" @@ -1510,11 +1089,21 @@ dependencies = [ ] [[package]] -name = "wide" -version = "0.7.30" +name = "zerocopy" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58e6db2670d2be78525979e9a5f9c69d296fd7d670549fe9ebf70f8708cb5019" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ - "bytemuck", - "safe_arch", + "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 index e83f316..d912de4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,74 +1,108 @@ [workspace] members = ["tflite_demo"] -[workspace.features] -default = ["ble-l2cap", "ble-gatt-server", "ble-gatt-client", "ble-sec"] +# [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"] +# 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", -] +# nrf52840 = [ +# "embassy-nrf/nrf52840", +# "nrf-softdevice/nrf52840", +# "nrf-softdevice/s140", +# "dep:nrf-softdevice-s140", +# ] [workspace.dependencies] -cortex-m = { version = "0.7.7", features = [ - "critical-section-single-core", - "inline-asm", -] } -cortex-m-rt = "0.7.2" -nrf52840-hal = "0.16.0" -usb-device = "0.2.7" -usbd-serial = "0.1.0" -microflow = { path = "../microflow-rs" } -# microflow = "0.1.3" -nalgebra = { version = "0.33.2", default-features = false, features = [ - "macros", -] } -libm = "0.2" -panic-halt = "1.0.0" -panic-probe = { version = "0.3.1", features = ["print-defmt"] } -heapless = "0.8.0" -lsm6ds3tr = { path = "../lsm6ds3tr-rs" } -embassy-sync = { version = "0.5.0" } -embassy-executor = { version = "0.5.0", features = [ +cortex-m = { version = "0.7.7", features = ["critical-section-single-core"] } +cortex-m-rt = "0.7.5" +defmt = "0.3.10" +defmt-rtt = "0.4.1" +defmt-serial = "0.10.0" +embassy-executor = { version = "0.7.0", features = [ "arch-cortex-m", + "defmt", "executor-thread", "executor-interrupt", - "defmt", - "integrated-timers", ] } -embassy-time = { version = "0.3.0", features = [ +embassy-futures = { version = "0.1.1", features = ["defmt"] } +embassy-nrf = { version = "0.3.1", features = [ + "defmt", + "gpiote", + "nrf52840", + "time", + "time-driver-rtc1", + "unstable-pac", +] } +embassy-sync = { version = "0.6.1", features = ["defmt"] } +embassy-time = { version = "0.4.0", features = [ "defmt", "defmt-timestamp-uptime", ] } -embassy-nrf = { version = "0.1.0", features = [ - "defmt", - "nrf52840", - "time-driver-rtc1", - "gpiote", - "time", -] } -defmt = "0.3.0" -defmt-rtt = "0.4.0" -embedded-storage = "0.3.0" +embassy-embedded-hal = "0.3.0" +embassy-usb = "0.2.0" +embassy-usb-logger = "0.2.0" +panic-probe = { version = "0.3.2", features = ["print-defmt"] } +# cortex-m = { version = "0.7.7", features = [ +# "critical-section-single-core", +# "inline-asm", +# ] } +# cortex-m-rt = "0.7.5" +# nrf52840-hal = "0.16.0" +# usb-device = "0.3.2" +# usbd-serial = "0.2.2" +# microflow = { path = "../microflow-rs" } +# # microflow = "0.1.3" +# nalgebra = { version = "0.33.2", default-features = false, features = [ +# "macros", +# ] } +# libm = "0.2" +# panic-halt = "1.0.0" +# panic-probe = { version = "0.3.2", features = ["print-defmt"] } +# heapless = "0.8.0" +# lsm6ds3tr = { path = "../lsm6ds3tr-rs" } + +# embassy-sync = { version = "0.5.0" } +# # embassy-embedded-hal = "0.3.0" +# embassy-executor = { version = "0.5.0", features = [ +# "arch-cortex-m", +# "executor-thread", +# "executor-interrupt", +# "defmt", +# "integrated-timers", +# ] } +# embassy-time = { version = "0.3.0", features = [ +# "defmt", +# "defmt-timestamp-uptime", +# ] } +# embassy-nrf = { version = "0.1.0", features = [ +# "defmt", +# "nrf52840", +# "time-driver-rtc1", +# "gpiote", +# "time", +# ] } + +# defmt = "0.3.10" +# defmt-rtt = "0.4.1" +# 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" } +# embedded-hal-bus = { version = "0.2.0", features = ["async"] } +# 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" +assign-resources = "0.4.1" diff --git a/tflite_demo/src/lsm6ds.rs b/lsm6ds.rs similarity index 100% rename from tflite_demo/src/lsm6ds.rs rename to lsm6ds.rs diff --git a/tflite_demo/Cargo.toml b/tflite_demo/Cargo.toml index 88b2378..5e4e27f 100644 --- a/tflite_demo/Cargo.toml +++ b/tflite_demo/Cargo.toml @@ -6,27 +6,42 @@ 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 -microflow.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-time.workspace = true embassy-executor.workspace = true embassy-sync.workspace = true +embassy-embedded-hal.workspace = true +embassy-futures.workspace = true +embassy-usb.workspace = true +embassy-usb-logger.workspace = true + +# embedded-alloc.workspace = true +embedded-hal.workspace = true +embedded-hal-async.workspace = true + +cortex-m.workspace = true +cortex-m-rt.workspace = true + +defmt.workspace = true +defmt-rtt.workspace = true + +# nrf52840-hal.workspace = true +# usb-device.workspace = true +# usbd-serial.workspace = true + +# microflow.workspace = true +# libm.workspace = true +# nalgebra.workspace = true + +# heapless.workspace = true +# lsm6ds3tr.workspace = true +# nrf-softdevice.workspace = true +# nrf-softdevice-s140.workspace = true fixed.workspace = true atomic-pool.workspace = true + +panic-probe.workspace = true +defmt-serial.workspace = true static_cell.workspace = true +assign-resources.workspace = true +# embassy-embedded-hal.workspace = true diff --git a/tflite_demo/src/common.rs b/tflite_demo/src/common.rs deleted file mode 100644 index eb65974..0000000 --- a/tflite_demo/src/common.rs +++ /dev/null @@ -1,4 +0,0 @@ -#![macro_use] - -use defmt_rtt as _; // global logger -use embassy_nrf as _; // time driver diff --git a/tflite_demo/src/i2c.rs b/tflite_demo/src/i2c.rs deleted file mode 100644 index 1f64d13..0000000 --- a/tflite_demo/src/i2c.rs +++ /dev/null @@ -1,16 +0,0 @@ -// Hypothetical I2C implementation (replace with your actual hardware I2C) -// struct MyI2c; - -// impl I2c for MyI2c { -// // type Error = I2cError; - -// fn read(&mut self, _address: u8, _buffer: &mut [u8]) -> Result<(), Self::Error> { -// // Simulate reading data -// Ok(()) -// } - -// fn write(&mut self, _address: u8, _bytes: &[u8]) -> Result<(), Self::Error> { -// // Simulate writing data -// Ok(()) -// } -// } diff --git a/tflite_demo/lsm6ds3tr/consts.rs b/tflite_demo/src/lsm6ds3tr/consts.rs similarity index 100% rename from tflite_demo/lsm6ds3tr/consts.rs rename to tflite_demo/src/lsm6ds3tr/consts.rs diff --git a/tflite_demo/lsm6ds3tr/data.rs b/tflite_demo/src/lsm6ds3tr/data.rs similarity index 100% rename from tflite_demo/lsm6ds3tr/data.rs rename to tflite_demo/src/lsm6ds3tr/data.rs diff --git a/tflite_demo/lsm6ds3tr/interface/i2c.rs b/tflite_demo/src/lsm6ds3tr/interface/i2c.rs similarity index 100% rename from tflite_demo/lsm6ds3tr/interface/i2c.rs rename to tflite_demo/src/lsm6ds3tr/interface/i2c.rs diff --git a/tflite_demo/lsm6ds3tr/interface/mod.rs b/tflite_demo/src/lsm6ds3tr/interface/mod.rs similarity index 100% rename from tflite_demo/lsm6ds3tr/interface/mod.rs rename to tflite_demo/src/lsm6ds3tr/interface/mod.rs diff --git a/tflite_demo/lsm6ds3tr/mod.rs b/tflite_demo/src/lsm6ds3tr/mod.rs similarity index 100% rename from tflite_demo/lsm6ds3tr/mod.rs rename to tflite_demo/src/lsm6ds3tr/mod.rs diff --git a/tflite_demo/lsm6ds3tr/registers/addresses.rs b/tflite_demo/src/lsm6ds3tr/registers/addresses.rs similarity index 55% rename from tflite_demo/lsm6ds3tr/registers/addresses.rs rename to tflite_demo/src/lsm6ds3tr/registers/addresses.rs index 5f54c9d..76e40d4 100644 --- a/tflite_demo/lsm6ds3tr/registers/addresses.rs +++ b/tflite_demo/src/lsm6ds3tr/registers/addresses.rs @@ -277,264 +277,3 @@ impl From for RegisterBits::new(0b11111111); - assert_eq!(rb.value, 0b1); - } - - #[test] - fn new_1_1() { - const BITS: u8 = 1; - const POS: u8 = 1; - let rb = RegisterBits::::new(0b11111111); - assert_eq!(rb.value, 0b1); - } - - #[test] - fn new_1_2() { - const BITS: u8 = 1; - const POS: u8 = 2; - let rb = RegisterBits::::new(0b11111111); - assert_eq!(rb.value, 0b1); - } - - #[test] - fn new_2_0() { - const BITS: u8 = 2; - const POS: u8 = 0; - let rb = RegisterBits::::new(0b11111111); - assert_eq!(rb.value, 0b11); - } - - #[test] - fn new_2_1() { - const BITS: u8 = 2; - const POS: u8 = 1; - let rb = RegisterBits::::new(0b11111111); - assert_eq!(rb.value, 0b11); - } - - #[test] - fn new_2_2() { - const BITS: u8 = 2; - const POS: u8 = 2; - let rb = RegisterBits::::new(0b11111111); - assert_eq!(rb.value, 0b11); - } - - #[test] - fn shifted_1_0() { - const BITS: u8 = 1; - const POS: u8 = 0; - let rb = RegisterBits::::new(0b11111111); - assert_eq!(rb.value, 0b1); - assert_eq!(rb.shifted(), 0b1); - } - - #[test] - fn shifted_1_1() { - const BITS: u8 = 1; - const POS: u8 = 1; - let rb = RegisterBits::::new(0b11111111); - assert_eq!(rb.value, 0b1); - assert_eq!(rb.shifted(), 0b10); - } - - #[test] - fn shifted_1_2() { - const BITS: u8 = 1; - const POS: u8 = 2; - let rb = RegisterBits::::new(0b11111111); - assert_eq!(rb.value, 0b1); - assert_eq!(rb.shifted(), 0b100); - } - - #[test] - fn shifted_2_1() { - const BITS: u8 = 2; - const POS: u8 = 1; - let rb = RegisterBits::::new(0b11111111); - assert_eq!(rb.value, 0b11); - assert_eq!(rb.shifted(), 0b110); - } - - #[test] - fn shifted_2_2() { - const BITS: u8 = 2; - const POS: u8 = 2; - let rb = RegisterBits::::new(0b11111111); - assert_eq!(rb.value, 0b11); - assert_eq!(rb.shifted(), 0b1100); - } - - #[test] - fn new_from_reg_1_0() { - const BITS: u8 = 1; - const POS: u8 = 0; - let rb = RegisterBits::::from_reg(0b11111111); - assert_eq!(rb.value, 0b1); - assert_eq!(rb.shifted(), 0b1); - } - - #[test] - fn new_from_reg_1_1() { - const BITS: u8 = 1; - const POS: u8 = 1; - let rb = RegisterBits::::from_reg(0b11111111); - assert_eq!(rb.value, 0b1); - assert_eq!(rb.shifted(), 0b10); - } - - #[test] - fn new_from_reg_2_0() { - const BITS: u8 = 2; - const POS: u8 = 0; - let rb = RegisterBits::::from_reg(0b11111111); - assert_eq!(rb.value, 0b11); - assert_eq!(rb.shifted(), 0b11); - } - - #[test] - fn new_from_reg_2_1() { - const BITS: u8 = 2; - const POS: u8 = 1; - let rb = RegisterBits::::from_reg(0b11111111); - assert_eq!(rb.value, 0b11); - assert_eq!(rb.shifted(), 0b110); - } - - #[test] - fn new_from_reg_2_2() { - const BITS: u8 = 2; - const POS: u8 = 2; - let rb = RegisterBits::::from_reg(0b11111111); - assert_eq!(rb.value, 0b11); - assert_eq!(rb.shifted(), 0b1100); - } - - #[test] - fn from_reg_1_0() { - const BITS: u8 = 1; - const POS: u8 = 0; - let mut rb = RegisterBits::::default(); - let reg: u8 = 0b11111111; - rb.set_from_reg(reg); - assert_eq!(rb.value, 0b1); - assert_eq!(rb.shifted(), 0b1); - } - - #[test] - fn from_reg_1_1() { - const BITS: u8 = 1; - const POS: u8 = 1; - let mut rb = RegisterBits::::default(); - let reg: u8 = 0b11111111; - rb.set_from_reg(reg); - assert_eq!(rb.value, 0b1); - assert_eq!(rb.shifted(), 0b10); - } - - #[test] - fn from_reg_2_0() { - const BITS: u8 = 2; - const POS: u8 = 0; - let mut rb = RegisterBits::::default(); - let reg: u8 = 0b11111111; - rb.set_from_reg(reg); - assert_eq!(rb.value, 0b11); - assert_eq!(rb.shifted(), 0b11); - } - - #[test] - fn from_reg_2_1() { - const BITS: u8 = 2; - const POS: u8 = 1; - let mut rb = RegisterBits::::default(); - let reg: u8 = 0b11111111; - rb.set_from_reg(reg); - assert_eq!(rb.value, 0b11); - assert_eq!(rb.shifted(), 0b110); - } - - #[test] - fn from_reg_2_2() { - const BITS: u8 = 2; - const POS: u8 = 2; - let mut rb = RegisterBits::::default(); - let reg: u8 = 0b11111111; - rb.set_from_reg(reg); - assert_eq!(rb.value, 0b11); - assert_eq!(rb.shifted(), 0b1100); - } - - #[test] - fn bit_mask_1_0() { - const BITS: u8 = 1; - const POS: u8 = 0; - assert_eq!(RegisterBits::::bit_mask(), 0b1); - } - - #[test] - fn bit_mask_2_0() { - const BITS: u8 = 2; - const POS: u8 = 0; - assert_eq!(RegisterBits::::bit_mask(), 0b11); - } - - #[test] - fn bit_mask_3_0() { - const BITS: u8 = 3; - const POS: u8 = 0; - assert_eq!(RegisterBits::::bit_mask(), 0b111); - } - - #[test] - fn bit_shifted_mask_1_0() { - const BITS: u8 = 1; - const POS: u8 = 0; - assert_eq!(RegisterBits::::bit_shifted_mask(), 0b1); - } - - #[test] - fn bit_shifted_mask_1_1() { - const BITS: u8 = 1; - const POS: u8 = 1; - assert_eq!(RegisterBits::::bit_shifted_mask(), 0b10); - } - - #[test] - fn bit_shifted_mask_2_0() { - const BITS: u8 = 2; - const POS: u8 = 0; - assert_eq!(RegisterBits::::bit_shifted_mask(), 0b11); - } - - #[test] - fn bit_shifted_mask_2_1() { - const BITS: u8 = 2; - const POS: u8 = 1; - assert_eq!(RegisterBits::::bit_shifted_mask(), 0b110); - } - - #[test] - fn bit_shifted_mask_3_0() { - const BITS: u8 = 3; - const POS: u8 = 0; - assert_eq!(RegisterBits::::bit_shifted_mask(), 0b111); - } - - #[test] - fn bit_shifted_mask_3_1() { - const BITS: u8 = 3; - const POS: u8 = 1; - assert_eq!(RegisterBits::::bit_shifted_mask(), 0b1110); - } -} diff --git a/tflite_demo/lsm6ds3tr/registers/ctrl1_xl.rs b/tflite_demo/src/lsm6ds3tr/registers/ctrl1_xl.rs similarity index 100% rename from tflite_demo/lsm6ds3tr/registers/ctrl1_xl.rs rename to tflite_demo/src/lsm6ds3tr/registers/ctrl1_xl.rs diff --git a/tflite_demo/lsm6ds3tr/registers/ctrl2_g.rs b/tflite_demo/src/lsm6ds3tr/registers/ctrl2_g.rs similarity index 100% rename from tflite_demo/lsm6ds3tr/registers/ctrl2_g.rs rename to tflite_demo/src/lsm6ds3tr/registers/ctrl2_g.rs diff --git a/tflite_demo/lsm6ds3tr/registers/ctrl3_c.rs b/tflite_demo/src/lsm6ds3tr/registers/ctrl3_c.rs similarity index 100% rename from tflite_demo/lsm6ds3tr/registers/ctrl3_c.rs rename to tflite_demo/src/lsm6ds3tr/registers/ctrl3_c.rs diff --git a/tflite_demo/lsm6ds3tr/registers/ctrl4_c.rs b/tflite_demo/src/lsm6ds3tr/registers/ctrl4_c.rs similarity index 100% rename from tflite_demo/lsm6ds3tr/registers/ctrl4_c.rs rename to tflite_demo/src/lsm6ds3tr/registers/ctrl4_c.rs diff --git a/tflite_demo/lsm6ds3tr/registers/drdy_pulse_cfg_g.rs b/tflite_demo/src/lsm6ds3tr/registers/drdy_pulse_cfg_g.rs similarity index 100% rename from tflite_demo/lsm6ds3tr/registers/drdy_pulse_cfg_g.rs rename to tflite_demo/src/lsm6ds3tr/registers/drdy_pulse_cfg_g.rs diff --git a/tflite_demo/lsm6ds3tr/registers/free_fall.rs b/tflite_demo/src/lsm6ds3tr/registers/free_fall.rs similarity index 100% rename from tflite_demo/lsm6ds3tr/registers/free_fall.rs rename to tflite_demo/src/lsm6ds3tr/registers/free_fall.rs diff --git a/tflite_demo/lsm6ds3tr/registers/int1_ctrl.rs b/tflite_demo/src/lsm6ds3tr/registers/int1_ctrl.rs similarity index 100% rename from tflite_demo/lsm6ds3tr/registers/int1_ctrl.rs rename to tflite_demo/src/lsm6ds3tr/registers/int1_ctrl.rs diff --git a/tflite_demo/lsm6ds3tr/registers/int2_ctrl.rs b/tflite_demo/src/lsm6ds3tr/registers/int2_ctrl.rs similarity index 100% rename from tflite_demo/lsm6ds3tr/registers/int2_ctrl.rs rename to tflite_demo/src/lsm6ds3tr/registers/int2_ctrl.rs diff --git a/tflite_demo/lsm6ds3tr/registers/int_dur2.rs b/tflite_demo/src/lsm6ds3tr/registers/int_dur2.rs similarity index 100% rename from tflite_demo/lsm6ds3tr/registers/int_dur2.rs rename to tflite_demo/src/lsm6ds3tr/registers/int_dur2.rs diff --git a/tflite_demo/lsm6ds3tr/registers/md1_cfg.rs b/tflite_demo/src/lsm6ds3tr/registers/md1_cfg.rs similarity index 100% rename from tflite_demo/lsm6ds3tr/registers/md1_cfg.rs rename to tflite_demo/src/lsm6ds3tr/registers/md1_cfg.rs diff --git a/tflite_demo/lsm6ds3tr/registers/md2_cfg.rs b/tflite_demo/src/lsm6ds3tr/registers/md2_cfg.rs similarity index 100% rename from tflite_demo/lsm6ds3tr/registers/md2_cfg.rs rename to tflite_demo/src/lsm6ds3tr/registers/md2_cfg.rs diff --git a/tflite_demo/lsm6ds3tr/registers/mod.rs b/tflite_demo/src/lsm6ds3tr/registers/mod.rs similarity index 100% rename from tflite_demo/lsm6ds3tr/registers/mod.rs rename to tflite_demo/src/lsm6ds3tr/registers/mod.rs diff --git a/tflite_demo/lsm6ds3tr/registers/tap_cfg.rs b/tflite_demo/src/lsm6ds3tr/registers/tap_cfg.rs similarity index 100% rename from tflite_demo/lsm6ds3tr/registers/tap_cfg.rs rename to tflite_demo/src/lsm6ds3tr/registers/tap_cfg.rs diff --git a/tflite_demo/lsm6ds3tr/registers/tap_src.rs b/tflite_demo/src/lsm6ds3tr/registers/tap_src.rs similarity index 100% rename from tflite_demo/lsm6ds3tr/registers/tap_src.rs rename to tflite_demo/src/lsm6ds3tr/registers/tap_src.rs diff --git a/tflite_demo/lsm6ds3tr/registers/tap_ths_6d.rs b/tflite_demo/src/lsm6ds3tr/registers/tap_ths_6d.rs similarity index 100% rename from tflite_demo/lsm6ds3tr/registers/tap_ths_6d.rs rename to tflite_demo/src/lsm6ds3tr/registers/tap_ths_6d.rs diff --git a/tflite_demo/lsm6ds3tr/registers/wake_up_dur.rs b/tflite_demo/src/lsm6ds3tr/registers/wake_up_dur.rs similarity index 100% rename from tflite_demo/lsm6ds3tr/registers/wake_up_dur.rs rename to tflite_demo/src/lsm6ds3tr/registers/wake_up_dur.rs diff --git a/tflite_demo/lsm6ds3tr/registers/wake_up_src.rs b/tflite_demo/src/lsm6ds3tr/registers/wake_up_src.rs similarity index 100% rename from tflite_demo/lsm6ds3tr/registers/wake_up_src.rs rename to tflite_demo/src/lsm6ds3tr/registers/wake_up_src.rs diff --git a/tflite_demo/lsm6ds3tr/registers/wake_up_ths.rs b/tflite_demo/src/lsm6ds3tr/registers/wake_up_ths.rs similarity index 100% rename from tflite_demo/lsm6ds3tr/registers/wake_up_ths.rs rename to tflite_demo/src/lsm6ds3tr/registers/wake_up_ths.rs diff --git a/tflite_demo/lsm6ds3tr/settings/accel.rs b/tflite_demo/src/lsm6ds3tr/settings/accel.rs similarity index 100% rename from tflite_demo/lsm6ds3tr/settings/accel.rs rename to tflite_demo/src/lsm6ds3tr/settings/accel.rs diff --git a/tflite_demo/lsm6ds3tr/settings/gyro.rs b/tflite_demo/src/lsm6ds3tr/settings/gyro.rs similarity index 100% rename from tflite_demo/lsm6ds3tr/settings/gyro.rs rename to tflite_demo/src/lsm6ds3tr/settings/gyro.rs diff --git a/tflite_demo/lsm6ds3tr/settings/irq.rs b/tflite_demo/src/lsm6ds3tr/settings/irq.rs similarity index 100% rename from tflite_demo/lsm6ds3tr/settings/irq.rs rename to tflite_demo/src/lsm6ds3tr/settings/irq.rs diff --git a/tflite_demo/lsm6ds3tr/settings/mod.rs b/tflite_demo/src/lsm6ds3tr/settings/mod.rs similarity index 100% rename from tflite_demo/lsm6ds3tr/settings/mod.rs rename to tflite_demo/src/lsm6ds3tr/settings/mod.rs diff --git a/tflite_demo/src/main.rs b/tflite_demo/src/main.rs index 6b6be73..8c62598 100644 --- a/tflite_demo/src/main.rs +++ b/tflite_demo/src/main.rs @@ -1,265 +1,147 @@ #![no_main] #![no_std] -mod common; -mod i2c; -mod lsm6ds; +mod lsm6ds3tr; -use core::fmt::Write; -use embedded_alloc::LlffHeap; -use libm::sinf; -use lsm6ds::Lsm6ds33; -// use lsm6ds3tr::{ -// interface::{I2cInterface, SpiInterface}, -// LsmSettings, LSM6DS3TR, -// }; -// use lsm6ds3tr::{interface::SpiInterface, AccelScale, LsmSettings, LSM6DS3TR}; -use microflow::model; -use nalgebra::matrix; -use nrf52840_hal::{self as hal, twim, Spim, Twim}; -// use nrf_softdevice::{ -// ble::{EncryptionInfo, IdentityKey, MasterId, Uuid}, -// Softdevice, -// }; -use usb_device::class_prelude::UsbBusAllocator; +use defmt::{info, panic}; +use embassy_embedded_hal::shared_bus::asynch::i2c::I2cDevice; +use embassy_executor::Spawner; +use embassy_futures::join::join; +use embassy_nrf::peripherals::TWISPI0; +use embassy_nrf::twim::Twim; +use embassy_nrf::usb::vbus_detect::{HardwareVbusDetect, VbusDetect}; +use embassy_nrf::usb::{Driver, Instance}; +use embassy_nrf::{bind_interrupts, pac, peripherals, twim, usb}; +use embassy_sync::blocking_mutex::raw::NoopRawMutex; +use embassy_sync::mutex::Mutex; +use embassy_usb::class::cdc_acm::{CdcAcmClass, State}; +use embassy_usb::driver::EndpointError; +use embassy_usb::{Builder, Config}; -use nrf52840_hal::{ - gpio::Level, - prelude::{OutputPin, PinState, _embedded_hal_timer_CountDown}, - uarte::{Baudrate, Parity, Pins, Uarte}, - Rtc, -}; +use lsm6ds3tr::interface::i2c::I2cInterface; +// use embassy_embedded_hal::shared_bus::blocking::i2c::I2cDevice; +use static_cell::StaticCell; -use heapless::String; +use {defmt_serial as _, panic_probe as _}; -// const BATTERY_SERVICE: Uuid = Uuid::new_16(0x180f); -// const BATTERY_LEVEL: Uuid = Uuid::new_16(0x2a19); +static I2C_BUS: StaticCell>> = StaticCell::new(); -// const LED_SERVICE_UUID: Uuid = Uuid::new_16(0x112f); -// const LED_CONTROL_CHAR_UUID: Uuid = Uuid::new_16(0x321f); +bind_interrupts!(struct Irqs { + USBD => usb::InterruptHandler; + CLOCK_POWER => usb::vbus_detect::InterruptHandler; +}); -const RTC_FREQ_MHZ: f32 = 0.032_768; +#[embassy_executor::main] +async fn main(_spawner: Spawner) { + let p = embassy_nrf::init(Default::default()); -#[global_allocator] -static HEAP: LlffHeap = LlffHeap::empty(); + info!("Enabling ext hfosc..."); + pac::CLOCK.tasks_hfclkstart().write_value(1); + while pac::CLOCK.events_hfclkstarted().read() != 1 {} -// #[embassy_executor::task] -// async fn softdevice_task(sd: &'static Softdevice) { -// sd.run().await; -// } + // Create the driver, from the HAL. + let driver = Driver::new(p.USBD, Irqs, HardwareVbusDetect::new(Irqs)); -// #[derive(Debug, Clone, Copy)] -// struct Peer { -// master_id: MasterId, -// key: EncryptionInfo, -// peer_id: IdentityKey, -// } + // 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; -#[panic_handler] // panicking behavior -fn panic(_: &core::panic::PanicInfo) -> ! { - reset_into_dfu(); -} + // 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]; -#[model("tflite_demo/models/sine.tflite")] -struct Sine; + let mut state = State::new(); -#[model("tflite_demo/models/speech.tflite")] -struct Speech; + let mut builder = Builder::new( + driver, + config, + &mut config_descriptor, + &mut bos_descriptor, + &mut msos_descriptor, + &mut control_buf, + ); -/// Resets the device into Device Firmware Update mode (DFU). -fn reset_into_dfu() -> ! { - // Via https://devzone.nordicsemi.com/f/nordic-q-a/50839/start-dfu-mode-or-open_bootloader-from-application-by-function-call - unsafe { - (*hal::pac::POWER::PTR).gpregret.write(|w| w.bits(0xB1)); + // 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 echo_fut = async { + loop { + class.wait_connection().await; + info!("Connected"); + let _ = echo(&mut class).await; + info!("Disconnected"); + } }; - hal::pac::SCB::sys_reset() -} + // Run everything concurrently. + // If we had made everything `'static` above instead, we could do this using separate tasks instead. + join(usb_fut, echo_fut).await; -#[derive(Clone, Copy)] -enum LightState { - Red = 0, - Green = 1, - Blue = 2, -} + // let config = twim::Config::default(); + // let i2c = embassy_nrf::twim::Twim::new(p.TWISPI0, Irqs2, p.P0_07, p.P0_27, config); -#[cortex_m_rt::entry] -fn main() -> ! { - { - use core::mem::MaybeUninit; - const HEAP_SIZE: usize = 1024; - static mut HEAP_MEM: [MaybeUninit; HEAP_SIZE] = [MaybeUninit::uninit(); HEAP_SIZE]; - unsafe { HEAP.init(HEAP_MEM.as_ptr() as usize, HEAP_SIZE) } - } + let i2c_bus = { + use embassy_nrf::{ + bind_interrupts, + peripherals::{self}, + }; + // bind_interrupts!(struct Irqs { + // SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0 => twim::InterruptHandler; + // }); + bind_interrupts!(struct Irqs2 { + TWISPI0 => twim::InterruptHandler; + }); + let config = twim::Config::default(); + let i2c = Twim::new(p.TWISPI0, Irqs2, p.P0_07, p.P0_27, config); + let i2c_bus = Mutex::::new(i2c); + I2C_BUS.init(i2c_bus) + }; - let p = hal::pac::Peripherals::take().unwrap(); - let port0 = hal::gpio::p0::Parts::new(p.P0); - let mut led_red = port0.p0_26.into_push_pull_output(Level::Low); - let mut led_green = port0.p0_30.into_push_pull_output(Level::Low); - let mut led_blue = port0.p0_06.into_push_pull_output(Level::Low); + let i2c = I2cDevice::new(i2c_bus); - let clocks = hal::clocks::Clocks::new(p.CLOCK); - let clocks = clocks.enable_ext_hfosc(); - let usb_peripheral = hal::usbd::UsbPeripheral::new(p.USBD, &clocks); - let usb_bus = UsbBusAllocator::new(hal::usbd::Usbd::new(usb_peripheral)); - let mut serial_port = usbd_serial::SerialPort::new(&usb_bus); + let interface = I2cInterface::new(i2c); + let imu = lsm6ds3tr::LSM6DS3TR::new(interface); - // let spiclk = port0.p0_24.into_push_pull_output(Level::Low).degrade(); - // let spimosi = port0.p0_23.into_push_pull_output(Level::Low).degrade(); - // let spimiso = port0.p0_22.into_floating_input().degrade(); - - // let pins = nrf52840_hal::spim::Pins { - // sck: Some(spiclk), - // miso: Some(spimiso), - // mosi: Some(spimosi), - // }; - - // let spim = Spim::new( - // p.SPIM2, - // pins, - // nrf52840_hal::spim::Frequency::K125, - // nrf52840_hal::spim::MODE_0, - // 0, - // ); - - // let spi_interface = SpiInterface::new(spim); - - // let settings = LsmSettings::basic(); - // let mut imu = LSM6DS3TR::new(spi_interface); - // imu.init().expect("Couldn't initialize the LSM6 sensor!"); - - // let scl = port0.p0_27.into_floating_input().degrade(); - // let sda = port0.p0_07.into_floating_input().degrade(); - - // let pins = twim::Pins { scl: scl, sda: sda }; - - // let i2c = Twim::new(p.TWIM0, pins, twim::Frequency::K100); - - // let i2c_interface = I2cInterface::new(i2c); - - // let mut imu = LSM6DS3TR::new(I2cInterface::new("")); - - // let mut imu = Lsm6ds33::new(i2c, addr); - - let rtc = Rtc::new(p.RTC0, 0).unwrap(); - rtc.enable_counter(); - - let mut usb_device = usb_device::device::UsbDeviceBuilder::new( - &usb_bus, - usb_device::device::UsbVidPid(0x16c0, 0x27dd), - ) - .manufacturer("HSRW") - .product("HSRW Pet Tracker nRF52840") - .serial_number("pet1") - .device_class(usbd_serial::USB_CLASS_CDC) - .max_packet_size_0(64) // makes control transfers 8x faster says https://github.com/nrf-rs/nrf-hal/blob/master/examples/usb/src/bin/serial.rs - .build(); - - let x = 0.5; - let start = rtc.get_counter(); - let y_predicted = Sine::predict(matrix![x])[0]; - let end = rtc.get_counter(); - let y_exact = sinf(x); - - // TIMER0 is reserved by Softdevice - // https://devzone.nordicsemi.com/f/nordic-q-a/1160/soft-device-and-timers---how-do-they-work-together - let mut timer = hal::Timer::new(p.TIMER1).into_periodic(); - timer.start(hal::Timer::::TICKS_PER_SECOND); - - let mut light = LightState::Red; + // let mut serial_port = usbd_serial::SerialPort::new(&usb); loop { - light = match light { - LightState::Red => LightState::Green, - LightState::Green => LightState::Blue, - LightState::Blue => LightState::Red, - }; - match light { - LightState::Red => { - led_red.set_state(PinState::Low).unwrap(); - led_green.set_state(PinState::High).unwrap(); - led_blue.set_state(PinState::High).unwrap(); - } - LightState::Green => { - led_red.set_state(PinState::High).unwrap(); - led_green.set_state(PinState::Low).unwrap(); - led_blue.set_state(PinState::High).unwrap(); - } - LightState::Blue => { - led_red.set_state(PinState::High).unwrap(); - led_green.set_state(PinState::High).unwrap(); - led_blue.set_state(PinState::Low).unwrap(); - //reset_into_dfu(); - } - } + info!("Hello, world!"); + } +} - // if !usb_dev.poll(&mut [&mut serial]) { - // continue; - // } +struct Disconnected {} - let mut buf = [0u8; 64]; - - match serial_port.read(&mut buf) { - Ok(count) if count > 0 => { - // Check if received data equals to 'reset' - for i in 0..count - 4 { - if buf[i] == b'r' - && buf[i + 1] == b'e' - && buf[i + 2] == b's' - && buf[i + 3] == b'e' - && buf[i + 4] == b't' - { - reset_into_dfu(); - } - } - - if buf[..12].iter().all(|&x| x == 0) { - reset_into_dfu(); - } - - // Echo back in upper case - for c in buf[0..count].iter_mut() { - if 0x61 <= *c && *c <= 0x7a { - *c &= !0x20; - } - } - - let mut write_offset = 0; - while write_offset < count { - match serial_port.write(&buf[write_offset..count]) { - Ok(len) if len > 0 => { - write_offset += len; - } - _ => {} - } - } - } - _ => {} - } - - let text = y_predicted.to_bits(); - let mut data = String::<32>::new(); - - let text2 = y_exact.to_bits(); - let mut data2 = String::<32>::new(); - - let _ = serial_port.write("Hello World\n".as_bytes()); - - let _ = serial_port.write("Predicted Y: ".as_bytes()); - let _ = write!(data, "data:{text}"); - let _ = serial_port.write(data.as_bytes()); - let _ = serial_port.write("\n".as_bytes()); - - let _ = serial_port.write("Exact Y: ".as_bytes()); - let _ = write!(data2, "data:{text2}"); - let _ = serial_port.write(data2.as_bytes()); - let _ = serial_port.write("\n".as_bytes()); - - while timer.wait().is_err() { - // TODO: sleep. - // Spec says poll needs to be called at least every 10ms. - usb_device.poll(&mut [&mut serial_port]); - continue; +impl From for Disconnected { + fn from(val: EndpointError) -> Self { + match val { + EndpointError::BufferOverflow => panic!("Buffer overflow"), + EndpointError::Disabled => Disconnected {}, } } } + +async fn echo<'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]; + info!("data: {:x}", data); + class.write_packet(data).await?; + } +} From d1b1bb10380ef219234d5ae9f21227181fc062f1 Mon Sep 17 00:00:00 2001 From: baldeau Date: Sun, 12 Jan 2025 23:02:30 +0100 Subject: [PATCH 2/2] figured out how to print text to the console --- Cargo.lock | 316 ++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 20 ++- tflite_demo/Cargo.toml | 10 +- tflite_demo/src/main.rs | 160 ++++++++++++++------ 4 files changed, 447 insertions(+), 59 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f670490..80b9b51 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -14,6 +14,15 @@ dependencies = [ "zerocopy", ] +[[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" @@ -83,6 +92,12 @@ 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" @@ -119,12 +134,27 @@ version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +[[package]] +name = "byterepr" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7eb1a05c2ec66850db33d8dd2119626aef815662a074656a74bbe47a562fdf4" +dependencies = [ + "bytemuck", +] + [[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" @@ -428,6 +458,7 @@ checksum = "f820157f198ada183ad62e0a66f554c610cdcd1a9f27d4b316358103ced7a1f8" dependencies = [ "cfg-if", "critical-section", + "defmt", "document-features", "embassy-time-driver", "embedded-hal 0.2.7", @@ -491,6 +522,18 @@ dependencies = [ "log", ] +[[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-hal" version = "0.2.7" @@ -564,6 +607,16 @@ dependencies = [ "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" @@ -694,6 +747,24 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" +[[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" @@ -716,6 +787,83 @@ version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +[[package]] +name = "matrixmultiply" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9380b911e3e96d10c1f415da0876389aaf1b56759054eeb0de7df940c456ba1a" +dependencies = [ + "autocfg", + "rawpointer", +] + +[[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" @@ -741,6 +889,34 @@ dependencies = [ "cortex-m-rt", ] +[[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" @@ -766,6 +942,12 @@ dependencies = [ "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" @@ -784,6 +966,30 @@ 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" @@ -830,6 +1036,24 @@ 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 = "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" @@ -848,6 +1072,15 @@ 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 = "scopeguard" version = "1.2.0" @@ -895,6 +1128,31 @@ dependencies = [ "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 = "spin" version = "0.9.8" @@ -935,6 +1193,42 @@ 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" @@ -973,11 +1267,17 @@ dependencies = [ "embassy-futures", "embassy-nrf", "embassy-sync 0.6.1", + "embassy-time", "embassy-usb", "embassy-usb-logger", + "embedded-alloc", "embedded-hal 1.0.0", "embedded-hal-async", "fixed", + "heapless 0.8.0", + "libm", + "microflow", + "nalgebra 0.33.2", "panic-probe", "static_cell", ] @@ -1014,6 +1314,12 @@ 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.3.2" @@ -1088,6 +1394,16 @@ dependencies = [ "vcell", ] +[[package]] +name = "wide" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41b5576b9a81633f3e8df296ce0063042a73507636cbe956c61133dd7034ab22" +dependencies = [ + "bytemuck", + "safe_arch", +] + [[package]] name = "zerocopy" version = "0.7.35" diff --git a/Cargo.toml b/Cargo.toml index d912de4..3c7e966 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,7 +17,10 @@ members = ["tflite_demo"] # ] [workspace.dependencies] -cortex-m = { version = "0.7.7", features = ["critical-section-single-core"] } +cortex-m = { version = "0.7.7", features = [ + "critical-section-single-core", + "inline-asm", +] } cortex-m-rt = "0.7.5" defmt = "0.3.10" defmt-rtt = "0.4.1" @@ -54,15 +57,15 @@ panic-probe = { version = "0.3.2", features = ["print-defmt"] } # nrf52840-hal = "0.16.0" # usb-device = "0.3.2" # usbd-serial = "0.2.2" -# microflow = { path = "../microflow-rs" } +microflow = { path = "../microflow-rs" } # # microflow = "0.1.3" -# nalgebra = { version = "0.33.2", default-features = false, features = [ -# "macros", -# ] } -# libm = "0.2" +nalgebra = { version = "0.33.2", default-features = false, features = [ + "macros", +] } +libm = "0.2" # panic-halt = "1.0.0" # panic-probe = { version = "0.3.2", features = ["print-defmt"] } -# heapless = "0.8.0" +heapless = "0.8.0" # lsm6ds3tr = { path = "../lsm6ds3tr-rs" } # embassy-sync = { version = "0.5.0" } @@ -91,8 +94,9 @@ panic-probe = { version = "0.3.2", features = ["print-defmt"] } # embedded-storage = "0.3.0" embedded-hal = "1.0.0" embedded-hal-async = { version = "1.0.0" } +embedded-alloc = "0.6.0" + # embedded-hal-bus = { version = "0.2.0", features = ["async"] } -# embedded-alloc = "0.6.0" # nrf-softdevice = { version = "0.1.0", features = [ # "defmt", # "ble-peripheral", diff --git a/tflite_demo/Cargo.toml b/tflite_demo/Cargo.toml index 5e4e27f..30fdfe2 100644 --- a/tflite_demo/Cargo.toml +++ b/tflite_demo/Cargo.toml @@ -14,8 +14,9 @@ embassy-embedded-hal.workspace = true embassy-futures.workspace = true embassy-usb.workspace = true embassy-usb-logger.workspace = true +embassy-time.workspace = true -# embedded-alloc.workspace = true +embedded-alloc.workspace = true embedded-hal.workspace = true embedded-hal-async.workspace = true @@ -29,9 +30,9 @@ defmt-rtt.workspace = true # usb-device.workspace = true # usbd-serial.workspace = true -# microflow.workspace = true -# libm.workspace = true -# nalgebra.workspace = true +microflow.workspace = true +libm.workspace = true +nalgebra.workspace = true # heapless.workspace = true # lsm6ds3tr.workspace = true @@ -39,6 +40,7 @@ defmt-rtt.workspace = true # nrf-softdevice-s140.workspace = true fixed.workspace = true atomic-pool.workspace = true +heapless.workspace = true panic-probe.workspace = true defmt-serial.workspace = true diff --git a/tflite_demo/src/main.rs b/tflite_demo/src/main.rs index 8c62598..4f8642f 100644 --- a/tflite_demo/src/main.rs +++ b/tflite_demo/src/main.rs @@ -3,25 +3,29 @@ mod lsm6ds3tr; -use defmt::{info, panic}; +use core::fmt::Write; +use defmt::{info, panic, unwrap}; use embassy_embedded_hal::shared_bus::asynch::i2c::I2cDevice; use embassy_executor::Spawner; -use embassy_futures::join::join; use embassy_nrf::peripherals::TWISPI0; use embassy_nrf::twim::Twim; -use embassy_nrf::usb::vbus_detect::{HardwareVbusDetect, VbusDetect}; -use embassy_nrf::usb::{Driver, Instance}; +use embassy_nrf::usb::vbus_detect::HardwareVbusDetect; +use embassy_nrf::usb::Driver; use embassy_nrf::{bind_interrupts, pac, peripherals, twim, usb}; use embassy_sync::blocking_mutex::raw::NoopRawMutex; 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}; +use embassy_usb::{Builder, Config, UsbDevice}; +use embedded_alloc::LlffHeap; use lsm6ds3tr::interface::i2c::I2cInterface; // use embassy_embedded_hal::shared_bus::blocking::i2c::I2cDevice; use static_cell::StaticCell; +use heapless::String; + use {defmt_serial as _, panic_probe as _}; static I2C_BUS: StaticCell>> = StaticCell::new(); @@ -31,8 +35,91 @@ bind_interrupts!(struct Irqs { CLOCK_POWER => usb::vbus_detect::InterruptHandler; }); +type MyDriver = Driver<'static, peripherals::USBD, HardwareVbusDetect>; + +#[global_allocator] +static HEAP: LlffHeap = LlffHeap::empty(); + +#[embassy_executor::task] +async fn usb_task(mut device: UsbDevice<'static, MyDriver>) { + device.run().await; +} + +#[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"); + } +} + +#[embassy_executor::task] +// async fn write_task( +// mut class: CdcAcmClass<'static, MyDriver>, +// mut imu: lsm6ds3tr::LSM6DS3TR< +// I2cInterface>>, +// >, +// ) { +// loop { +// class.wait_connection().await; +// info!("Connected"); + +// // Read accelerometer data from the IMU +// let accel_data = imu.read_accel().await.unwrap(); + +// let mut data = String::<32>::new(); +// if write!( +// data, +// "Accel: x={}, y={}, z={}\r\n", +// accel_data.x, accel_data.y, accel_data.z +// ) +// .is_ok() +// { +// if let Err(e) = class.write_packet(data.as_bytes()).await { +// info!("Failed to write to serial console: {:?}", e); +// } +// } + +// // // Format the accelerometer data +// // let message = format!( +// // "Accel: x={}, y={}, z={}\r\n", +// // accel_data.x, accel_data.y, accel_data.z +// // ); +// // if let Err(e) = class.write_packet(message.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"); +// } +// } +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::main] -async fn main(_spawner: Spawner) { +async fn main(spawner: Spawner) { let p = embassy_nrf::init(Default::default()); info!("Enabling ext hfosc..."); @@ -50,49 +137,30 @@ async fn main(_spawner: Spawner) { 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. - // 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(); - + 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_descriptor, - &mut bos_descriptor, - &mut msos_descriptor, - &mut control_buf, + &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, &mut state, 64); + let class = CdcAcmClass::new(&mut builder, state, 64); // Build the builder. - let mut usb = builder.build(); + let usb = builder.build(); - // Run the USB device. - let usb_fut = usb.run(); - - // Do stuff with the class! - let echo_fut = async { - loop { - class.wait_connection().await; - info!("Connected"); - let _ = echo(&mut class).await; - info!("Disconnected"); - } - }; - - // Run everything concurrently. - // If we had made everything `'static` above instead, we could do this using separate tasks instead. - join(usb_fut, echo_fut).await; - - // let config = twim::Config::default(); - // let i2c = embassy_nrf::twim::Twim::new(p.TWISPI0, Irqs2, p.P0_07, p.P0_27, config); + unwrap!(spawner.spawn(usb_task(usb))); let i2c_bus = { use embassy_nrf::{ @@ -114,13 +182,13 @@ async fn main(_spawner: Spawner) { let i2c = I2cDevice::new(i2c_bus); let interface = I2cInterface::new(i2c); - let imu = lsm6ds3tr::LSM6DS3TR::new(interface); + let mut imu = lsm6ds3tr::LSM6DS3TR::new(interface); - // let mut serial_port = usbd_serial::SerialPort::new(&usb); + // imu.init().await.unwrap(); - loop { - info!("Hello, world!"); - } + // imu.read_accel().await.unwrap(); + + unwrap!(spawner.spawn(write_task(class))); } struct Disconnected {} @@ -134,9 +202,7 @@ impl From for Disconnected { } } -async fn echo<'d, T: Instance + 'd, P: VbusDetect + 'd>( - class: &mut CdcAcmClass<'d, Driver<'d, T, P>>, -) -> Result<(), 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?;