[INFO] cloning repository https://github.com/swamy18/Arcturus
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/swamy18/Arcturus" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fswamy18%2FArcturus", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fswamy18%2FArcturus'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 779fd03ec66537ba6baf5c14e1594e9df8b87fdf
[INFO] checking swamy18/Arcturus against eca445e5ae4a6679cc27d3a09106ce245e13a5a6 for pr-162478
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fswamy18%2FArcturus" "/workspace/builds/worker-0-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-0-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/swamy18/Arcturus
[INFO] finished tweaking git repo https://github.com/swamy18/Arcturus
[INFO] tweaked toml for git repo https://github.com/swamy18/Arcturus written to /workspace/builds/worker-0-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/swamy18/Arcturus on toolchain eca445e5ae4a6679cc27d3a09106ce245e13a5a6
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+eca445e5ae4a6679cc27d3a09106ce245e13a5a6" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/swamy18/Arcturus already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+eca445e5ae4a6679cc27d3a09106ce245e13a5a6" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr] warning: unused workspace dependency `cortex-m`
[INFO] [stderr]   --> Cargo.toml:17:1
[INFO] [stderr]    |
[INFO] [stderr] 17 | cortex-m = "0.7"
[INFO] [stderr]    | ^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `cargo::unused_workspace_dependencies` is set to `warn` by default
[INFO] [stderr] help: consider removing the workspace dependency `cortex-m`
[INFO] [stderr] warning: unused workspace dependency `cortex-m-rt`
[INFO] [stderr]   --> Cargo.toml:18:1
[INFO] [stderr]    |
[INFO] [stderr] 18 | cortex-m-rt = "0.7"
[INFO] [stderr]    | ^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr] help: consider removing the workspace dependency `cortex-m-rt`
[INFO] [stderr] warning: unused field `repository` in `workspace.package`
[INFO] [stderr]   --> Cargo.toml:44:1
[INFO] [stderr]    |
[INFO] [stderr] 44 | repository = "https://github.com/arcturus-os/arcturus"
[INFO] [stderr]    | ^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `cargo::unused_workspace_package_fields` is set to `warn` by default
[INFO] [stderr] help: consider removing the field `workspace.package.repository`
[INFO] [stderr] warning: workspace (manifest) generated 3 warnings
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded thiserror-impl v1.0.69
[INFO] [stderr]   Downloaded windows-link v0.2.1
[INFO] [stderr]   Downloaded const-default v1.0.0
[INFO] [stderr]   Downloaded anstyle-wincon v3.0.11
[INFO] [stderr]   Downloaded num-integer v0.1.46
[INFO] [stderr]   Downloaded panic-halt v0.2.0
[INFO] [stderr]   Downloaded thiserror v1.0.69
[INFO] [stderr]   Downloaded quote v1.0.46
[INFO] [stderr]   Downloaded autocfg v1.5.1
[INFO] [stderr]   Downloaded svgbobdoc v0.3.0
[INFO] [stderr]   Downloaded approx v0.5.1
[INFO] [stderr]   Downloaded fastrand v2.4.1
[INFO] [stderr]   Downloaded wasi v0.11.1+wasi-snapshot-preview1
[INFO] [stderr]   Downloaded rustversion v1.0.22
[INFO] [stderr]   Downloaded redox_syscall v0.5.18
[INFO] [stderr]   Downloaded proc-macro2 v1.0.106
[INFO] [stderr]   Downloaded num-rational v0.4.2
[INFO] [stderr]   Downloaded clap_lex v1.1.0
[INFO] [stderr]   Downloaded windows-targets v0.52.6
[INFO] [stderr]   Downloaded libudev v0.3.0
[INFO] [stderr]   Downloaded once_cell_polyfill v1.70.2
[INFO] [stderr]   Downloaded riscv-rt-macros v0.2.2
[INFO] [stderr]   Downloaded hash32 v0.3.1
[INFO] [stderr]   Downloaded riscv-rt v0.12.2
[INFO] [stderr]   Downloaded rawpointer v0.2.1
[INFO] [stderr]   Downloaded nalgebra-macros v0.2.2
[INFO] [stderr]   Downloaded nb v1.1.0
[INFO] [stderr]   Downloaded libudev-sys v0.1.4
[INFO] [stderr]   Downloaded embedded-alloc v0.6.0
[INFO] [stderr]   Downloaded riscv v0.11.1
[INFO] [stderr]   Downloaded num-complex v0.4.6
[INFO] [stderr]   Downloaded unescaper v0.1.8
[INFO] [stderr]   Downloaded io-kit-sys v0.4.1
[INFO] [stderr]   Downloaded clap_derive v4.6.1
[INFO] [stderr]   Downloaded smallvec v1.15.2
[INFO] [stderr]   Downloaded thiserror v2.0.18
[INFO] [stderr]   Downloaded core-foundation-sys v0.8.7
[INFO] [stderr]   Downloaded rlsf v0.2.2
[INFO] [stderr]   Downloaded serde_derive v1.0.228
[INFO] [stderr]   Downloaded zmij v1.0.21
[INFO] [stderr]   Downloaded paste v1.0.15
[INFO] [stderr]   Downloaded pkg-config v0.3.33
[INFO] [stderr]   Downloaded byteorder v1.5.0
[INFO] [stderr]   Downloaded tokio-macros v2.7.0
[INFO] [stderr]   Downloaded signal-hook-registry v1.4.8
[INFO] [stderr]   Downloaded lock_api v0.4.14
[INFO] [stderr]   Downloaded thiserror-impl v2.0.18
[INFO] [stderr]   Downloaded core-foundation v0.10.1
[INFO] [stderr]   Downloaded mach2 v0.4.3
[INFO] [stderr]   Downloaded parking_lot v0.12.5
[INFO] [stderr]   Downloaded critical-section v1.2.0
[INFO] [stderr]   Downloaded num-traits v0.2.19
[INFO] [stderr]   Downloaded serde_core v1.0.228
[INFO] [stderr]   Downloaded simba v0.9.1
[INFO] [stderr]   Downloaded bytemuck v1.25.0
[INFO] [stderr]   Downloaded bitflags v2.13.0
[INFO] [stderr]   Downloaded parking_lot_core v0.9.12
[INFO] [stderr]   Downloaded embedded-hal v1.0.0
[INFO] [stderr]   Downloaded linked_list_allocator v0.10.6
[INFO] [stderr]   Downloaded clap v4.6.1
[INFO] [stderr]   Downloaded r-efi v6.0.0
[INFO] [stderr]   Downloaded safe_arch v0.7.4
[INFO] [stderr]   Downloaded anyhow v1.0.103
[INFO] [stderr]   Downloaded bytes v1.12.0
[INFO] [stderr]   Downloaded base64 v0.13.1
[INFO] [stderr]   Downloaded serde v1.0.228
[INFO] [stderr]   Downloaded memchr v2.8.2
[INFO] [stderr]   Downloaded wide v0.7.33
[INFO] [stderr]   Downloaded socket2 v0.6.4
[INFO] [stderr]   Downloaded serialport v4.9.0
[INFO] [stderr]   Downloaded typenum v1.20.1
[INFO] [stderr]   Downloaded num-bigint v0.4.6
[INFO] [stderr]   Downloaded heapless v0.8.0
[INFO] [stderr]   Downloaded mio v1.2.1
[INFO] [stderr]   Downloaded serde_json v1.0.150
[INFO] [stderr]   Downloaded libm v0.2.16
[INFO] [stderr]   Downloaded clap_builder v4.6.0
[INFO] [stderr]   Downloaded syn v1.0.109
[INFO] [stderr]   Downloaded ndarray v0.15.6
[INFO] [stderr]   Downloaded nix v0.26.4
[INFO] [stderr]   Downloaded unicode-width v0.1.14
[INFO] [stderr]   Downloaded syn v2.0.118
[INFO] [stderr]   Downloaded nalgebra v0.33.3
[INFO] [stderr]   Downloaded windows_aarch64_gnullvm v0.52.6
[INFO] [stderr]   Downloaded windows_x86_64_gnullvm v0.52.6
[INFO] [stderr]   Downloaded windows_i686_gnullvm v0.52.6
[INFO] [stderr]   Downloaded libc v0.2.186
[INFO] [stderr]   Downloaded windows_x86_64_msvc v0.52.6
[INFO] [stderr]   Downloaded windows_x86_64_gnu v0.52.6
[INFO] [stderr]   Downloaded windows_aarch64_msvc v0.52.6
[INFO] [stderr]   Downloaded tokio v1.52.3
[INFO] [stderr]   Downloaded windows_i686_msvc v0.52.6
[INFO] [stderr]   Downloaded windows_i686_gnu v0.52.6
[INFO] [stderr]   Downloaded windows-sys v0.52.0
[INFO] [stderr]   Downloaded windows-sys v0.61.2
[INFO] [stderr]   Downloaded matrixmultiply v0.3.10
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:8683fc1fc2eb5c9ac98e0d076ab094b2ffac7f99da555d2b6a2e27f346de2ec7" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] ce9a5bb9a6dd9f0cc7776ec4f21a52e59bacc4027261cbdef88abca703ea4368
[INFO] running `Command { std: "docker" "start" "ce9a5bb9a6dd9f0cc7776ec4f21a52e59bacc4027261cbdef88abca703ea4368", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "ce9a5bb9a6dd9f0cc7776ec4f21a52e59bacc4027261cbdef88abca703ea4368", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-w" "/opt/rustwide/workdir" "--user" "0:0" "ce9a5bb9a6dd9f0cc7776ec4f21a52e59bacc4027261cbdef88abca703ea4368" "/opt/rustwide/cargo-home/bin/cargo" "+eca445e5ae4a6679cc27d3a09106ce245e13a5a6" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "ce9a5bb9a6dd9f0cc7776ec4f21a52e59bacc4027261cbdef88abca703ea4368", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-w" "/opt/rustwide/workdir" "--user" "0:0" "ce9a5bb9a6dd9f0cc7776ec4f21a52e59bacc4027261cbdef88abca703ea4368" "/opt/rustwide/cargo-home/bin/cargo" "+eca445e5ae4a6679cc27d3a09106ce245e13a5a6" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr] warning: unused workspace dependency `cortex-m`
[INFO] [stderr]   --> Cargo.toml:17:1
[INFO] [stderr]    |
[INFO] [stderr] 17 | cortex-m = "0.7"
[INFO] [stderr]    | ^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `cargo::unused_workspace_dependencies` is set to `warn` by default
[INFO] [stderr] help: consider removing the workspace dependency `cortex-m`
[INFO] [stderr] warning: unused workspace dependency `cortex-m-rt`
[INFO] [stderr]   --> Cargo.toml:18:1
[INFO] [stderr]    |
[INFO] [stderr] 18 | cortex-m-rt = "0.7"
[INFO] [stderr]    | ^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr] help: consider removing the workspace dependency `cortex-m-rt`
[INFO] [stderr] warning: unused field `repository` in `workspace.package`
[INFO] [stderr]   --> Cargo.toml:44:1
[INFO] [stderr]    |
[INFO] [stderr] 44 | repository = "https://github.com/arcturus-os/arcturus"
[INFO] [stderr]    | ^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `cargo::unused_workspace_package_fields` is set to `warn` by default
[INFO] [stderr] help: consider removing the field `workspace.package.repository`
[INFO] [stderr] warning: workspace (manifest) generated 3 warnings
[INFO] [stderr]    Compiling proc-macro2 v1.0.106
[INFO] [stderr]    Compiling unicode-ident v1.0.24
[INFO] [stderr]    Compiling quote v1.0.46
[INFO] [stderr]    Compiling libc v0.2.186
[INFO] [stderr]    Compiling autocfg v1.5.1
[INFO] [stderr]    Compiling serde_core v1.0.228
[INFO] [stderr]     Checking cfg-if v1.0.4
[INFO] [stderr]    Compiling zmij v1.0.21
[INFO] [stderr]    Compiling paste v1.0.15
[INFO] [stderr]    Compiling anyhow v1.0.103
[INFO] [stderr]    Compiling pkg-config v0.3.33
[INFO] [stderr]    Compiling serde_json v1.0.150
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling heck v0.5.0
[INFO] [stderr]    Compiling thiserror v1.0.69
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling matrixmultiply v0.3.10
[INFO] [stderr]    Compiling thiserror v2.0.18
[INFO] [stderr]    Compiling syn v1.0.109
[INFO] [stderr]    Compiling libudev-sys v0.1.4
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling syn v2.0.118
[INFO] [stderr]    Compiling rustversion v1.0.22
[INFO] [stderr]     Checking utf8parse v0.2.2
[INFO] [stderr]     Checking anstyle-parse v1.0.0
[INFO] [stderr]     Checking anstyle-query v1.1.5
[INFO] [stderr]    Compiling base64 v0.13.1
[INFO] [stderr]     Checking bytemuck v1.25.0
[INFO] [stderr]     Checking is_terminal_polyfill v1.70.2
[INFO] [stderr]    Compiling unicode-width v0.1.14
[INFO] [stderr]     Checking colorchoice v1.0.5
[INFO] [stderr]    Compiling riscv v0.11.1
[INFO] [stderr]     Checking anstyle v1.0.14
[INFO] [stderr]     Checking safe_arch v0.7.4
[INFO] [stderr]     Checking anstream v1.0.0
[INFO] [stderr]     Checking num-complex v0.4.6
[INFO] [stderr]     Checking num-integer v0.1.46
[INFO] [stderr]     Checking rawpointer v0.2.1
[INFO] [stderr]     Checking strsim v0.11.1
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling getrandom v0.4.3
[INFO] [stderr]     Checking clap_lex v1.1.0
[INFO] [stderr]     Checking bitflags v2.13.0
[INFO] [stderr]     Checking clap_builder v4.6.0
[INFO] [stderr]     Checking wide v0.7.33
[INFO] [stderr]     Checking approx v0.5.1
[INFO] [stderr]     Checking itoa v1.0.18
[INFO] [stderr]    Compiling riscv-rt v0.12.2
[INFO] [stderr]     Checking memchr v2.8.2
[INFO] [stderr]     Checking scopeguard v1.2.0
[INFO] [stderr]     Checking linux-raw-sys v0.12.1
[INFO] [stderr]    Compiling heapless v0.8.0
[INFO] [stderr]    Compiling svgbobdoc v0.3.0
[INFO] [stderr]    Compiling libm v0.2.16
[INFO] [stderr]     Checking simba v0.9.1
[INFO] [stderr]     Checking num-rational v0.4.2
[INFO] [stderr]     Checking smallvec v1.15.2
[INFO] [stderr]     Checking once_cell v1.21.4
[INFO] [stderr]     Checking fastrand v2.4.1
[INFO] [stderr]     Checking typenum v1.20.1
[INFO] [stderr]     Checking critical-section v1.2.0
[INFO] [stderr]     Checking tempfile v3.27.0
[INFO] [stderr]     Checking lock_api v0.4.14
[INFO] [stderr]     Checking ndarray v0.15.6
[INFO] [stderr]     Checking errno v0.3.14
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling clap_derive v4.6.1
[INFO] [stderr]    Compiling thiserror-impl v2.0.18
[INFO] [stderr]    Compiling nalgebra-macros v0.2.2
[INFO] [stderr]    Compiling tokio-macros v2.7.0
[INFO] [stderr]    Compiling riscv-rt-macros v0.2.2
[INFO] [stderr]     Checking nalgebra v0.33.3
[INFO] [stderr]     Checking byteorder v1.5.0
[INFO] [stderr]     Checking embedded-hal v1.0.0
[INFO] [stderr]     Checking clap v4.6.1
[INFO] [stderr]     Checking bitflags v1.3.2
[INFO] [stderr]     Checking const-default v1.0.0
[INFO] [stderr]     Checking unescaper v0.1.8
[INFO] [stderr]     Checking nix v0.26.4
[INFO] [stderr]     Checking rlsf v0.2.2
[INFO] [stderr]     Checking hash32 v0.3.1
[INFO] [stderr]     Checking signal-hook-registry v1.4.8
[INFO] [stderr]     Checking libudev v0.3.0
[INFO] [stderr]     Checking parking_lot v0.12.5
[INFO] [stderr]     Checking socket2 v0.6.4
[INFO] [stderr]     Checking mio v1.2.1
[INFO] [stderr]     Checking linked_list_allocator v0.10.6
[INFO] [stderr]     Checking stable_deref_trait v1.2.1
[INFO] [stderr]     Checking pin-project-lite v0.2.17
[INFO] [stderr]     Checking bytes v1.12.0
[INFO] [stderr]     Checking serialport v4.9.0
[INFO] [stderr]     Checking tokio v1.52.3
[INFO] [stderr]     Checking embedded-alloc v0.6.0
[INFO] [stderr]     Checking panic-halt v0.2.0
[INFO] [stderr]     Checking nb v1.1.0
[INFO] [stderr]     Checking arcturus-firmware v0.1.0 (/opt/rustwide/workdir/firmware)
[INFO] [stdout] warning: type parameter `PHASE_SEL` should have an upper camel case name
[INFO] [stdout]   --> firmware/src/hal/gpio.rs:20:28
[INFO] [stdout]    |
[INFO] [stdout] 20 | ...                   PHASE_SEL, COND_SEL>
[INFO] [stdout]    |                       ^^^^^^^^^ help: convert the identifier to upper camel case: `PhaseSel`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(non_camel_case_types)]` (part of `#[warn(nonstandard_style)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type parameter `COND_SEL` should have an upper camel case name
[INFO] [stdout]   --> firmware/src/hal/gpio.rs:20:39
[INFO] [stdout]    |
[INFO] [stdout] 20 | ...                   PHASE_SEL, COND_SEL>
[INFO] [stdout]    |                                  ^^^^^^^^ help: convert the identifier to upper camel case: `CondSel`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type parameter `PHASE_SEL` should have an upper camel case name
[INFO] [stdout]   --> firmware/src/hal/gpio.rs:42:6
[INFO] [stdout]    |
[INFO] [stdout] 42 |      PHASE_SEL, COND_SEL>
[INFO] [stdout]    |      ^^^^^^^^^ help: convert the identifier to upper camel case: `PhaseSel`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type parameter `COND_SEL` should have an upper camel case name
[INFO] [stdout]   --> firmware/src/hal/gpio.rs:42:17
[INFO] [stdout]    |
[INFO] [stdout] 42 |      PHASE_SEL, COND_SEL>
[INFO] [stdout]    |                 ^^^^^^^^ help: convert the identifier to upper camel case: `CondSel`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ErrorType`
[INFO] [stdout]   --> firmware/src/hal/spi.rs:11:25
[INFO] [stdout]    |
[INFO] [stdout] 11 | use embedded_hal::spi::{ErrorType, SpiBus, SpiDevice};
[INFO] [stdout]    |                         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Fixed`, `MemoryBank`, and `float_to_fixed`
[INFO] [stdout]   --> firmware/src/memory/edge_cache.rs:11:13
[INFO] [stdout]    |
[INFO] [stdout] 11 | use super::{MemoryBank, Fixed, float_to_fixed};
[INFO] [stdout]    |             ^^^^^^^^^^  ^^^^^  ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Add`, `Mul`, and `Sub`
[INFO] [stdout]   --> firmware/src/memory/mod.rs:13:17
[INFO] [stdout]    |
[INFO] [stdout] 13 | use core::ops::{Add, Mul, Sub};
[INFO] [stdout]    |                 ^^^  ^^^  ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `fixed_div`, `fixed_sqrt`, and `fixed_to_float`
[INFO] [stdout]   --> firmware/src/compute/mod.rs:17:53
[INFO] [stdout]    |
[INFO] [stdout] 17 | use super::memory::{Complex, Fixed, float_to_fixed, fixed_to_float, fixed_mul, fixed_div, fixed_sqrt};
[INFO] [stdout]    |                                                     ^^^^^^^^^^^^^^             ^^^^^^^^^  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `CorrelationStrength` and `MAX_CORRELATION`
[INFO] [stdout]   --> firmware/src/sync/block_universe.rs:16:24
[INFO] [stdout]    |
[INFO] [stdout] 16 | use super::{TimeState, CorrelationStrength, MAX_CORRELATION, ENTANGLEMENT_THRESHOLD};
[INFO] [stdout]    |                        ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `fixed_to_float` and `float_to_fixed`
[INFO] [stdout]   --> firmware/src/sync/block_universe.rs:17:39
[INFO] [stdout]    |
[INFO] [stdout] 17 | use crate::memory::{Fixed, FIXED_ONE, float_to_fixed, fixed_to_float};
[INFO] [stdout]    |                                       ^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable statement
[INFO] [stdout]    --> firmware/src/compute/evolution.rs:128:9
[INFO] [stdout]     |
[INFO] [stdout] 125 |         return Ok(());
[INFO] [stdout]     |         ------------- any code following this expression is unreachable
[INFO] [stdout] ...
[INFO] [stdout] 128 |         w_new.clear();
[INFO] [stdout]     |         ^^^^^^^^^^^^^^ unreachable statement
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unreachable_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `w`
[INFO] [stdout]    --> firmware/src/compute/evolution.rs:196:9
[INFO] [stdout]     |
[INFO] [stdout] 196 |         w: &mut SparseMatrix<MAX_ELEM>,
[INFO] [stdout]     |         ^ help: if this is intentional, prefix it with an underscore: `_w`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type parameter `PHASE_SEL` should have an upper camel case name
[INFO] [stdout]   --> firmware/src/hal/gpio.rs:20:28
[INFO] [stdout]    |
[INFO] [stdout] 20 | ...                   PHASE_SEL, COND_SEL>
[INFO] [stdout]    |                       ^^^^^^^^^ help: convert the identifier to upper camel case: `PhaseSel`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(non_camel_case_types)]` (part of `#[warn(nonstandard_style)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type parameter `COND_SEL` should have an upper camel case name
[INFO] [stdout]   --> firmware/src/hal/gpio.rs:20:39
[INFO] [stdout]    |
[INFO] [stdout] 20 | ...                   PHASE_SEL, COND_SEL>
[INFO] [stdout]    |                                  ^^^^^^^^ help: convert the identifier to upper camel case: `CondSel`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type parameter `PHASE_SEL` should have an upper camel case name
[INFO] [stdout]   --> firmware/src/hal/gpio.rs:42:6
[INFO] [stdout]    |
[INFO] [stdout] 42 |      PHASE_SEL, COND_SEL>
[INFO] [stdout]    |      ^^^^^^^^^ help: convert the identifier to upper camel case: `PhaseSel`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type parameter `COND_SEL` should have an upper camel case name
[INFO] [stdout]   --> firmware/src/hal/gpio.rs:42:17
[INFO] [stdout]    |
[INFO] [stdout] 42 |      PHASE_SEL, COND_SEL>
[INFO] [stdout]    |                 ^^^^^^^^ help: convert the identifier to upper camel case: `CondSel`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ErrorType`
[INFO] [stdout]   --> firmware/src/hal/spi.rs:11:25
[INFO] [stdout]    |
[INFO] [stdout] 11 | use embedded_hal::spi::{ErrorType, SpiBus, SpiDevice};
[INFO] [stdout]    |                         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Fixed`, `MemoryBank`, and `float_to_fixed`
[INFO] [stdout]   --> firmware/src/memory/edge_cache.rs:11:13
[INFO] [stdout]    |
[INFO] [stdout] 11 | use super::{MemoryBank, Fixed, float_to_fixed};
[INFO] [stdout]    |             ^^^^^^^^^^  ^^^^^  ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Add`, `Mul`, and `Sub`
[INFO] [stdout]   --> firmware/src/memory/mod.rs:13:17
[INFO] [stdout]    |
[INFO] [stdout] 13 | use core::ops::{Add, Mul, Sub};
[INFO] [stdout]    |                 ^^^  ^^^  ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `fixed_div` and `fixed_sqrt`
[INFO] [stdout]   --> firmware/src/compute/mod.rs:17:80
[INFO] [stdout]    |
[INFO] [stdout] 17 | use super::memory::{Complex, Fixed, float_to_fixed, fixed_to_float, fixed_mul, fixed_div, fixed_sqrt};
[INFO] [stdout]    |                                                                                ^^^^^^^^^  ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `CorrelationStrength` and `MAX_CORRELATION`
[INFO] [stdout]   --> firmware/src/sync/block_universe.rs:16:24
[INFO] [stdout]    |
[INFO] [stdout] 16 | use super::{TimeState, CorrelationStrength, MAX_CORRELATION, ENTANGLEMENT_THRESHOLD};
[INFO] [stdout]    |                        ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `fixed_to_float` and `float_to_fixed`
[INFO] [stdout]   --> firmware/src/sync/block_universe.rs:17:39
[INFO] [stdout]    |
[INFO] [stdout] 17 | use crate::memory::{Fixed, FIXED_ONE, float_to_fixed, fixed_to_float};
[INFO] [stdout]    |                                       ^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `cmd`
[INFO] [stdout]    --> firmware/src/api/mod.rs:421:21
[INFO] [stdout]     |
[INFO] [stdout] 421 |     fn handle_write(cmd: &CommandPacket) -> ResponsePacket {
[INFO] [stdout]     |                     ^^^ help: if this is intentional, prefix it with an underscore: `_cmd`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `firmware_main` is never used
[INFO] [stdout]    --> firmware/src/main.rs:142:4
[INFO] [stdout]     |
[INFO] [stdout] 142 | fn firmware_main() -> ! {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `idle_wait` is never used
[INFO] [stdout]    --> firmware/src/main.rs:197:4
[INFO] [stdout]     |
[INFO] [stdout] 197 | fn idle_wait() {
[INFO] [stdout]     |    ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SYS_CLOCK_HZ` is never used
[INFO] [stdout]   --> firmware/src/hal/mod.rs:16:11
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub const SYS_CLOCK_HZ: u32 = 100_000_000;
[INFO] [stdout]    |           ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `NUM_NODES` is never used
[INFO] [stdout]   --> firmware/src/hal/mod.rs:19:11
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub const NUM_NODES: usize = 10_000;
[INFO] [stdout]    |           ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `GRID_SIZE` is never used
[INFO] [stdout]   --> firmware/src/hal/mod.rs:22:11
[INFO] [stdout]    |
[INFO] [stdout] 22 | pub const GRID_SIZE: usize = 100;
[INFO] [stdout]    |           ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `NUM_LONG_RANGE_EDGES` is never used
[INFO] [stdout]   --> firmware/src/hal/mod.rs:25:11
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub const NUM_LONG_RANGE_EDGES: usize = 100;
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PSRAM_SPI_MAX_HZ` is never used
[INFO] [stdout]   --> firmware/src/hal/mod.rs:28:11
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub const PSRAM_SPI_MAX_HZ: u32 = 50_000_000;
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `HalError` is never used
[INFO] [stdout]   --> firmware/src/hal/mod.rs:32:10
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub enum HalError {
[INFO] [stdout]    |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `HalResult` is never used
[INFO] [stdout]   --> firmware/src/hal/mod.rs:43:10
[INFO] [stdout]    |
[INFO] [stdout] 43 | pub type HalResult<T> = Result<T, HalError>;
[INFO] [stdout]    |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SystemHal` is never constructed
[INFO] [stdout]   --> firmware/src/hal/mod.rs:46:12
[INFO] [stdout]    |
[INFO] [stdout] 46 | pub struct SystemHal<SPI, GPIO, ADC, DAC>
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `select_node` are never used
[INFO] [stdout]   --> firmware/src/hal/mod.rs:69:12
[INFO] [stdout]    |
[INFO] [stdout] 63 | / impl<SPI, GPIO, ADC, DAC> SystemHal<SPI, GPIO, ADC, DAC>
[INFO] [stdout] 64 | | where
[INFO] [stdout] 65 | |     SPI: SpiDevice,
[INFO] [stdout] 66 | |     GPIO: OutputPin,
[INFO] [stdout]    | |____________________- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 69 |       pub fn new(spi: SPI, gpio: GPIO, adc: ADC, dac: DAC) -> Self {
[INFO] [stdout]    |              ^^^
[INFO] [stdout] ...
[INFO] [stdout] 80 |       pub fn select_node(&mut self, node_id: u16) -> HalResult<()> {
[INFO] [stdout]    |              ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ROW_ADDR_BITS` is never used
[INFO] [stdout]  --> firmware/src/hal/gpio.rs:9:11
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub const ROW_ADDR_BITS: usize = 7;
[INFO] [stdout]   |           ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `COL_ADDR_BITS` is never used
[INFO] [stdout]   --> firmware/src/hal/gpio.rs:12:11
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub const COL_ADDR_BITS: usize = 7;
[INFO] [stdout]    |           ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TOTAL_ADDR_BITS` is never used
[INFO] [stdout]   --> firmware/src/hal/gpio.rs:15:11
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub const TOTAL_ADDR_BITS: usize = ROW_ADDR_BITS + COL_ADDR_BITS;
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `NodeAddressGpio` is never constructed
[INFO] [stdout]   --> firmware/src/hal/gpio.rs:18:12
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub struct NodeAddressGpio<ROW0, ROW1, ROW2, ROW3, ROW4, ROW5, ROW6,
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> firmware/src/hal/gpio.rs:54:12
[INFO] [stdout]     |
[INFO] [stdout]  40 | / impl<ROW0, ROW1, ROW2, ROW3, ROW4, ROW5, ROW6,
[INFO] [stdout]  41 | |      COL0, COL1, COL2, COL3, COL4, COL5, COL6,
[INFO] [stdout]  42 | |      PHASE_SEL, COND_SEL>
[INFO] [stdout]  43 | | NodeAddressGpio<ROW0, ROW1, ROW2, ROW3, ROW4, ROW5, ROW6,
[INFO] [stdout] ...   |
[INFO] [stdout]  50 | |     COL4: OutputPin, COL5: OutputPin, COL6: OutputPin,
[INFO] [stdout]  51 | |     PHASE_SEL: OutputPin, COND_SEL: OutputPin,
[INFO] [stdout]     | |______________________________________________- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  54 |       pub fn new(
[INFO] [stdout]     |              ^^^
[INFO] [stdout] ...
[INFO] [stdout]  71 |       pub fn node_to_coords(node_id: u16) -> (u8, u8) {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  78 |       pub fn coords_to_node(row: u8, col: u8) -> u16 {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  83 |       fn set_row_address(&mut self, row: u8) -> Result<(), GpioError> {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  90 |       fn set_col_address(&mut self, col: u8) -> Result<(), GpioError> {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  97 |       fn to_7bit(value: u8) -> [bool; 7] {
[INFO] [stdout]     |          ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 110 |       fn set_row_bits(&mut self, bits: [bool; 7]) -> Result<(), GpioError> {
[INFO] [stdout]     |          ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 132 |       fn set_col_bits(&mut self, bits: [bool; 7]) -> Result<(), GpioError> {
[INFO] [stdout]     |          ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 153 |       pub fn select_node(&mut self, node_id: u16) -> Result<(), GpioError> {
[INFO] [stdout]     |              ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 167 |       pub fn enable_phase_injection(&mut self) -> Result<(), GpioError> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 172 |       pub fn disable_phase_injection(&mut self) -> Result<(), GpioError> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 177 |       pub fn enable_conductance_measurement(&mut self) -> Result<(), GpioError> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 182 |       pub fn disable_conductance_measurement(&mut self) -> Result<(), GpioError> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `GpioError` is never used
[INFO] [stdout]    --> firmware/src/hal/gpio.rs:189:10
[INFO] [stdout]     |
[INFO] [stdout] 189 | pub enum GpioError {
[INFO] [stdout]     |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `SpiError` is never used
[INFO] [stdout]   --> firmware/src/hal/spi.rs:15:10
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub enum SpiError {
[INFO] [stdout]    |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `BANK_SIZE` is never used
[INFO] [stdout]   --> firmware/src/hal/spi.rs:26:11
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub const BANK_SIZE: u32 = 64 * 1024;
[INFO] [stdout]    |           ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PSRAM_CAPACITY_BYTES` is never used
[INFO] [stdout]   --> firmware/src/hal/spi.rs:29:11
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub const PSRAM_CAPACITY_BYTES: u32 = 64 * 1024 * 1024;
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `PsramCommand` is never used
[INFO] [stdout]   --> firmware/src/hal/spi.rs:34:10
[INFO] [stdout]    |
[INFO] [stdout] 34 | pub enum PsramCommand {
[INFO] [stdout]    |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PsramState` is never constructed
[INFO] [stdout]   --> firmware/src/hal/spi.rs:58:8
[INFO] [stdout]    |
[INFO] [stdout] 58 | struct PsramState {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> firmware/src/hal/spi.rs:64:8
[INFO] [stdout]    |
[INFO] [stdout] 63 | impl PsramState {
[INFO] [stdout]    | --------------- associated function in this implementation
[INFO] [stdout] 64 |     fn new() -> Self {
[INFO] [stdout]    |        ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `with_psram_state` is never used
[INFO] [stdout]   --> firmware/src/hal/spi.rs:83:4
[INFO] [stdout]    |
[INFO] [stdout] 83 | fn with_psram_state<R>(f: impl FnOnce(&mut PsramState) -> R) -> R {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `encode_address` is never used
[INFO] [stdout]   --> firmware/src/hal/spi.rs:94:4
[INFO] [stdout]    |
[INFO] [stdout] 94 | fn encode_address(addr: u32) -> [u8; 3] {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `validate_psram_range` is never used
[INFO] [stdout]   --> firmware/src/hal/spi.rs:98:4
[INFO] [stdout]    |
[INFO] [stdout] 98 | fn validate_psram_range(addr: u32, len: usize) -> Result<(), SpiError> {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `psram_enable` is never used
[INFO] [stdout]    --> firmware/src/hal/spi.rs:111:8
[INFO] [stdout]     |
[INFO] [stdout] 111 | pub fn psram_enable() -> Result<(), SpiError> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `psram_reset` is never used
[INFO] [stdout]    --> firmware/src/hal/spi.rs:122:8
[INFO] [stdout]     |
[INFO] [stdout] 122 | pub fn psram_reset() -> Result<(), SpiError> {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `psram_write` is never used
[INFO] [stdout]    --> firmware/src/hal/spi.rs:133:8
[INFO] [stdout]     |
[INFO] [stdout] 133 | pub fn psram_write(addr: u32, data: &[u8]) -> Result<(), SpiError> {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `psram_read` is never used
[INFO] [stdout]    --> firmware/src/hal/spi.rs:157:8
[INFO] [stdout]     |
[INFO] [stdout] 157 | pub fn psram_read(addr: u32, len: usize) -> Result<Vec<u8>, SpiError> {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PsramController` is never constructed
[INFO] [stdout]    --> firmware/src/hal/spi.rs:180:12
[INFO] [stdout]     |
[INFO] [stdout] 180 | pub struct PsramController<BUS>
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> firmware/src/hal/spi.rs:200:12
[INFO] [stdout]     |
[INFO] [stdout] 194 | / impl<BUS> PsramController<BUS>
[INFO] [stdout] 195 | | where
[INFO] [stdout] 196 | |     BUS: SpiBus,
[INFO] [stdout] 197 | |     BUS::Error: core::fmt::Debug,
[INFO] [stdout]     | |_________________________________- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 200 |       pub fn new(spi: BUS) -> Self {
[INFO] [stdout]     |              ^^^
[INFO] [stdout] ...
[INFO] [stdout] 210 |       pub fn read_jedec_id(&mut self) -> Result<(u8, u8, u8), SpiError> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 221 |       pub fn read_status(&mut self) -> Result<u8, SpiError> {
[INFO] [stdout]     |              ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 232 |       pub fn write_enable(&mut self) -> Result<(), SpiError> {
[INFO] [stdout]     |              ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 238 |       pub fn write_disable(&mut self) -> Result<(), SpiError> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 244 |       pub fn read(&mut self, address: u32, buffer: &mut [u8]) -> Result<(), SpiError> {
[INFO] [stdout]     |              ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 263 |       pub fn write(&mut self, address: u32, data: &[u8]) -> Result<(), SpiError> {
[INFO] [stdout]     |              ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 294 |       pub fn sector_erase(&mut self, address: u32) -> Result<(), SpiError> {
[INFO] [stdout]     |              ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PcInterface` is never constructed
[INFO] [stdout]    --> firmware/src/hal/spi.rs:320:12
[INFO] [stdout]     |
[INFO] [stdout] 320 | pub struct PcInterface<DEVICE>
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `receive_command`, and `send_response` are never used
[INFO] [stdout]    --> firmware/src/hal/spi.rs:334:12
[INFO] [stdout]     |
[INFO] [stdout] 328 | / impl<DEVICE> PcInterface<DEVICE>
[INFO] [stdout] 329 | | where
[INFO] [stdout] 330 | |     DEVICE: SpiDevice,
[INFO] [stdout] 331 | |     DEVICE::Error: core::fmt::Debug,
[INFO] [stdout]     | |____________________________________- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 334 |       pub fn new(device: DEVICE) -> Self {
[INFO] [stdout]     |              ^^^
[INFO] [stdout] ...
[INFO] [stdout] 342 |       pub fn receive_command(&mut self) -> Result<HostCommand, SpiError> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 364 |       pub fn send_response(&mut self, response: HostResponse) -> Result<(), SpiError> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `HostCommand` is never used
[INFO] [stdout]    --> firmware/src/hal/spi.rs:372:10
[INFO] [stdout]     |
[INFO] [stdout] 372 | pub enum HostCommand {
[INFO] [stdout]     |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `decode` is never used
[INFO] [stdout]    --> firmware/src/hal/spi.rs:393:12
[INFO] [stdout]     |
[INFO] [stdout] 391 | impl HostCommand {
[INFO] [stdout]     | ---------------- associated function in this implementation
[INFO] [stdout] 392 |     /// Decode command from raw bytes
[INFO] [stdout] 393 |     pub fn decode(cmd_id: u8, param1: u8, param2: u8, data: &[u8]) -> Option<Self> {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `HostResponse` is never used
[INFO] [stdout]    --> firmware/src/hal/spi.rs:430:10
[INFO] [stdout]     |
[INFO] [stdout] 430 | pub enum HostResponse {
[INFO] [stdout]     |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `encode` is never used
[INFO] [stdout]    --> firmware/src/hal/spi.rs:458:12
[INFO] [stdout]     |
[INFO] [stdout] 456 | impl HostResponse {
[INFO] [stdout]     | ----------------- method in this implementation
[INFO] [stdout] 457 |     /// Encode response to bytes
[INFO] [stdout] 458 |     pub fn encode(&self) -> [u8; 8] {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `PhaseAngle` is never used
[INFO] [stdout]  --> firmware/src/hal/analog.rs:9:10
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub type PhaseAngle = u16;
[INFO] [stdout]   |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `ConductanceValue` is never used
[INFO] [stdout]   --> firmware/src/hal/analog.rs:12:10
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub type ConductanceValue = u16;
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DAC_RESOLUTION` is never used
[INFO] [stdout]   --> firmware/src/hal/analog.rs:15:11
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub const DAC_RESOLUTION: u8 = 16;
[INFO] [stdout]    |           ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ADC_RESOLUTION` is never used
[INFO] [stdout]   --> firmware/src/hal/analog.rs:18:11
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub const ADC_RESOLUTION: u8 = 12;
[INFO] [stdout]    |           ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `DacWrite` is never used
[INFO] [stdout]   --> firmware/src/hal/analog.rs:24:11
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub trait DacWrite {
[INFO] [stdout]    |           ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `AdcRead` is never used
[INFO] [stdout]   --> firmware/src/hal/analog.rs:32:11
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub trait AdcRead<PIN> {
[INFO] [stdout]    |           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `phase_to_radians` is never used
[INFO] [stdout]   --> firmware/src/hal/analog.rs:40:8
[INFO] [stdout]    |
[INFO] [stdout] 40 | pub fn phase_to_radians(phase: PhaseAngle) -> f32 {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `radians_to_phase` is never used
[INFO] [stdout]   --> firmware/src/hal/analog.rs:45:8
[INFO] [stdout]    |
[INFO] [stdout] 45 | pub fn radians_to_phase(radians: f32) -> PhaseAngle {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PhaseDac` is never constructed
[INFO] [stdout]   --> firmware/src/hal/analog.rs:51:12
[INFO] [stdout]    |
[INFO] [stdout] 51 | pub struct PhaseDac<DAC> {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `vref`, `current_value`, and `phase_to_voltage` are never used
[INFO] [stdout]   --> firmware/src/hal/analog.rs:59:12
[INFO] [stdout]    |
[INFO] [stdout] 57 | impl<DAC> PhaseDac<DAC> {
[INFO] [stdout]    | ----------------------- associated items in this implementation
[INFO] [stdout] 58 |     /// Create a new phase DAC driver
[INFO] [stdout] 59 |     pub fn new(dac: DAC, vref_mv: f32) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 68 |     pub fn vref(&self) -> f32 {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 73 |     pub fn current_value(&self) -> u16 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 79 |     pub fn phase_to_voltage(phase: PhaseAngle, vref_mv: f32) -> f32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `set_phase`, `set_phase_rad`, and `disable` are never used
[INFO] [stdout]    --> firmware/src/hal/analog.rs:90:12
[INFO] [stdout]     |
[INFO] [stdout]  85 | / impl<DAC> PhaseDac<DAC>
[INFO] [stdout]  86 | | where
[INFO] [stdout]  87 | |     DAC: DacWrite<Word = u16>,
[INFO] [stdout]     | |______________________________- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  90 |       pub fn set_phase(&mut self, phase: PhaseAngle) -> Result<(), DacError> {
[INFO] [stdout]     |              ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  98 |       pub fn set_phase_rad(&mut self, radians: f32) -> Result<(), DacError> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 104 |       pub fn disable(&mut self) -> Result<(), DacError> {
[INFO] [stdout]     |              ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ConductanceAdc` is never constructed
[INFO] [stdout]    --> firmware/src/hal/analog.rs:112:12
[INFO] [stdout]     |
[INFO] [stdout] 112 | pub struct ConductanceAdc<ADC, PIN> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `adc_to_conductance`, and `quantize_conductance` are never used
[INFO] [stdout]    --> firmware/src/hal/analog.rs:121:12
[INFO] [stdout]     |
[INFO] [stdout] 119 | impl<ADC, PIN> ConductanceAdc<ADC, PIN> {
[INFO] [stdout]     | --------------------------------------- associated items in this implementation
[INFO] [stdout] 120 |     /// Create a new conductance ADC driver
[INFO] [stdout] 121 |     pub fn new(adc: ADC, pin: PIN, vref_mv: f32, sense_resistor_ohms: f32) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 132 |     pub fn adc_to_conductance(&self, adc_raw: u16, adc_max: u16) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 148 |     pub fn quantize_conductance(&self, conductance: f32) -> u8 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `measure` and `measure_raw` are never used
[INFO] [stdout]    --> firmware/src/hal/analog.rs:160:12
[INFO] [stdout]     |
[INFO] [stdout] 155 | / impl<ADC, PIN> ConductanceAdc<ADC, PIN>
[INFO] [stdout] 156 | | where
[INFO] [stdout] 157 | |     ADC: AdcRead<PIN, Word = u16>,
[INFO] [stdout]     | |__________________________________- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 160 |       pub fn measure(&mut self) -> Result<ConductanceValue, AdcError> {
[INFO] [stdout]     |              ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 173 |       pub fn measure_raw(&mut self) -> Result<u16, AdcError> {
[INFO] [stdout]     |              ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `DacError` is never used
[INFO] [stdout]    --> firmware/src/hal/analog.rs:180:10
[INFO] [stdout]     |
[INFO] [stdout] 180 | pub enum DacError {
[INFO] [stdout]     |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `AdcError` is never used
[INFO] [stdout]    --> firmware/src/hal/analog.rs:187:10
[INFO] [stdout]     |
[INFO] [stdout] 187 | pub enum AdcError {
[INFO] [stdout]     |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `Fixed` is never used
[INFO] [stdout]   --> firmware/src/memory/mod.rs:17:10
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub type Fixed = i32;
[INFO] [stdout]    |          ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `FIXED_ONE` is never used
[INFO] [stdout]   --> firmware/src/memory/mod.rs:20:11
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub const FIXED_ONE: Fixed = 1 << 16;
[INFO] [stdout]    |           ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `float_to_fixed` is never used
[INFO] [stdout]   --> firmware/src/memory/mod.rs:24:8
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub fn float_to_fixed(f: f32) -> Fixed {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `fixed_to_float` is never used
[INFO] [stdout]   --> firmware/src/memory/mod.rs:30:8
[INFO] [stdout]    |
[INFO] [stdout] 30 | pub fn fixed_to_float(f: Fixed) -> f32 {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `fixed_mul` is never used
[INFO] [stdout]   --> firmware/src/memory/mod.rs:36:8
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub fn fixed_mul(a: Fixed, b: Fixed) -> Fixed {
[INFO] [stdout]    |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `fixed_div` is never used
[INFO] [stdout]   --> firmware/src/memory/mod.rs:42:8
[INFO] [stdout]    |
[INFO] [stdout] 42 | pub fn fixed_div(a: Fixed, b: Fixed) -> Fixed {
[INFO] [stdout]    |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `fixed_sqrt` is never used
[INFO] [stdout]   --> firmware/src/memory/mod.rs:52:8
[INFO] [stdout]    |
[INFO] [stdout] 52 | pub fn fixed_sqrt(x: Fixed) -> Fixed {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Complex` is never constructed
[INFO] [stdout]   --> firmware/src/memory/mod.rs:81:12
[INFO] [stdout]    |
[INFO] [stdout] 81 | pub struct Complex {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> firmware/src/memory/mod.rs:88:12
[INFO] [stdout]     |
[INFO] [stdout]  86 | impl Complex {
[INFO] [stdout]     | ------------ associated items in this implementation
[INFO] [stdout]  87 |     /// Create a new complex number
[INFO] [stdout]  88 |     pub fn new(re: Fixed, im: Fixed) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  93 |     pub fn from_float(re: f32, im: f32) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 101 |     pub fn norm_sqr(&self) -> Fixed {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 106 |     pub fn conj(&self) -> Self {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 114 |     pub fn mul(&self, other: &Self) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 122 |     pub fn add(&self, other: &Self) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 130 |     pub fn scale(&self, factor: Fixed) -> Self {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `MemoryBank` is never used
[INFO] [stdout]    --> firmware/src/memory/mod.rs:141:10
[INFO] [stdout]     |
[INFO] [stdout] 141 | pub enum MemoryBank {
[INFO] [stdout]     |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `to_id` and `from_id` are never used
[INFO] [stdout]    --> firmware/src/memory/mod.rs:157:12
[INFO] [stdout]     |
[INFO] [stdout] 155 | impl MemoryBank {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout] 156 |     /// Convert to numeric bank ID
[INFO] [stdout] 157 |     pub fn to_id(self) -> u16 {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 168 |     pub fn from_id(id: u16) -> Self {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `NUM_TIME_BANKS` is never used
[INFO] [stdout]   --> firmware/src/memory/time_slicer.rs:19:11
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub const NUM_TIME_BANKS: usize = 1000;
[INFO] [stdout]    |           ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `TimeBankIndex` is never used
[INFO] [stdout]   --> firmware/src/memory/time_slicer.rs:22:10
[INFO] [stdout]    |
[INFO] [stdout] 22 | pub type TimeBankIndex = u16;
[INFO] [stdout]    |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `LOCAL_MATRIX_ELEMENTS` is never used
[INFO] [stdout]   --> firmware/src/memory/time_slicer.rs:27:11
[INFO] [stdout]    |
[INFO] [stdout] 27 | pub const LOCAL_MATRIX_ELEMENTS: usize = 65536; // 256KB for matrix data
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `WElement` is never constructed
[INFO] [stdout]   --> firmware/src/memory/time_slicer.rs:31:12
[INFO] [stdout]    |
[INFO] [stdout] 31 | pub struct WElement {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]   --> firmware/src/memory/time_slicer.rs:40:12
[INFO] [stdout]    |
[INFO] [stdout] 38 | impl WElement {
[INFO] [stdout]    | ------------- associated items in this implementation
[INFO] [stdout] 39 |     /// Create a new W matrix element
[INFO] [stdout] 40 |     pub fn new(re: Fixed, im: Fixed) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 45 |     pub fn from_float(re: f32, im: f32) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 53 |     pub fn to_complex(&self) -> Complex {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 58 |     pub fn from_complex(c: &Complex) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 66 |     pub fn norm_sqr(&self) -> Fixed {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 73 |     pub fn add(&self, other: &Self) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 81 |     pub fn scale(&self, factor: Fixed) -> Self {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SparseWMatrix` is never constructed
[INFO] [stdout]   --> firmware/src/memory/time_slicer.rs:94:12
[INFO] [stdout]    |
[INFO] [stdout] 94 | pub struct SparseWMatrix<const MAX_ELEMENTS: usize> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> firmware/src/memory/time_slicer.rs:103:12
[INFO] [stdout]     |
[INFO] [stdout] 101 | impl<const MAX_ELEMENTS: usize> SparseWMatrix<MAX_ELEMENTS> {
[INFO] [stdout]     | ----------------------------------------------------------- associated items in this implementation
[INFO] [stdout] 102 |     /// Create a new empty sparse matrix
[INFO] [stdout] 103 |     pub fn new(dimension: u16) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 111 |     pub fn set(&mut self, row: u16, col: u16, value: WElement) -> Result<(), ()> {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 129 |     pub fn get(&self, row: u16, col: u16) -> WElement {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 153 |     pub fn serialize(&self) -> Result<StdVec<u8>, ()> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 175 |     pub fn deserialize(data: &[u8]) -> Result<Self, ()> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 214 |     pub fn frobenius_norm_sqr(&self) -> i64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 224 |     pub fn clear(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 229 |     pub fn len(&self) -> usize {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 234 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TimeSlicer` is never constructed
[INFO] [stdout]    --> firmware/src/memory/time_slicer.rs:240:12
[INFO] [stdout]     |
[INFO] [stdout] 240 | pub struct TimeSlicer<const MAX_ELEMENTS: usize> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> firmware/src/memory/time_slicer.rs:253:12
[INFO] [stdout]     |
[INFO] [stdout] 251 | impl<const MAX_ELEMENTS: usize> TimeSlicer<MAX_ELEMENTS> {
[INFO] [stdout]     | -------------------------------------------------------- associated items in this implementation
[INFO] [stdout] 252 |     /// Create a new time slicer
[INFO] [stdout] 253 |     pub fn new(psram_base: u32, bank_capacity: u32) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 265 |     pub fn current_time(&self) -> TimeBankIndex {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 270 |     pub fn current_w(&self) -> &SparseWMatrix<MAX_ELEMENTS> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 275 |     pub fn current_w_mut(&mut self) -> &mut SparseWMatrix<MAX_ELEMENTS> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 281 |     pub fn save_to_bank(&mut self, bank: TimeBankIndex) -> Result<(), ()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 298 |     pub fn load_from_bank(&mut self, bank: TimeBankIndex) -> Result<(), ()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 312 |     pub fn step_forward(&mut self) -> Result<(), ()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 327 |     pub fn step_backward(&mut self) -> Result<(), ()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 345 |     pub fn jump_to(&mut self, bank: TimeBankIndex) -> Result<(), ()> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 357 |     pub fn reset(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 364 |     pub fn verify_norm_conservation(&self, expected_norm_sq: i64, tolerance: i64) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `NUM_EIGENVALUES` is never used
[INFO] [stdout]   --> firmware/src/memory/eigen_manager.rs:15:11
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub const NUM_EIGENVALUES: usize = 10000;
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `STORAGE_MODES` is never used
[INFO] [stdout]   --> firmware/src/memory/eigen_manager.rs:18:11
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub const STORAGE_MODES: usize = 1024;
[INFO] [stdout]    |           ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `EIGEN_PERTURBATION_DELTA` is never used
[INFO] [stdout]   --> firmware/src/memory/eigen_manager.rs:22:11
[INFO] [stdout]    |
[INFO] [stdout] 22 | pub const EIGEN_PERTURBATION_DELTA: Fixed = 0x00001000; // Small fixed-point value
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MIN_EIGEN_INDEX` is never used
[INFO] [stdout]   --> firmware/src/memory/eigen_manager.rs:25:11
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub const MIN_EIGEN_INDEX: usize = 1;
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_EIGEN_INDEX` is never used
[INFO] [stdout]   --> firmware/src/memory/eigen_manager.rs:28:11
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub const MAX_EIGEN_INDEX: usize = MIN_EIGEN_INDEX + STORAGE_MODES;
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `base_eigenvalue` is never used
[INFO] [stdout]   --> firmware/src/memory/eigen_manager.rs:33:8
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub fn base_eigenvalue(index: usize) -> Fixed {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `EigenDataValue` is never used
[INFO] [stdout]   --> firmware/src/memory/eigen_manager.rs:56:10
[INFO] [stdout]    |
[INFO] [stdout] 56 | pub enum EigenDataValue {
[INFO] [stdout]    |          ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `EigenModeStorage` is never constructed
[INFO] [stdout]   --> firmware/src/memory/eigen_manager.rs:83:12
[INFO] [stdout]    |
[INFO] [stdout] 83 | pub struct EigenModeStorage {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `perturbed_value`, and `verify` are never used
[INFO] [stdout]    --> firmware/src/memory/eigen_manager.rs:94:12
[INFO] [stdout]     |
[INFO] [stdout]  92 | impl EigenModeStorage {
[INFO] [stdout]     | --------------------- associated items in this implementation
[INFO] [stdout]  93 |     /// Create a new eigenmode storage entry
[INFO] [stdout]  94 |     pub fn new(index: u16, data: EigenDataValue) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 104 |     pub fn perturbed_value(&self) -> Fixed {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 112 |     pub fn verify(&self, measured: Fixed, tolerance: Fixed) -> bool {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `EigenManager` is never constructed
[INFO] [stdout]    --> firmware/src/memory/eigen_manager.rs:124:12
[INFO] [stdout]     |
[INFO] [stdout] 124 | pub struct EigenManager {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> firmware/src/memory/eigen_manager.rs:133:12
[INFO] [stdout]     |
[INFO] [stdout] 131 | impl EigenManager {
[INFO] [stdout]     | ----------------- associated items in this implementation
[INFO] [stdout] 132 |     /// Create a new eigenbasis manager
[INFO] [stdout] 133 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 141 |     pub fn initialize_zeros(&mut self) -> Result<(), ()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 151 |     pub fn write_mode(&mut self, mode_index: usize, data: EigenDataValue) -> Result<(), ()> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 169 |     pub fn read_mode(&self, mode_index: usize) -> EigenDataValue {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 174 |     pub fn get_mode(&self, mode_index: usize) -> Option<&EigenModeStorage> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 181 |     pub fn project_to_spectral(&self, _w_matrix: &super::time_slicer::SparseWMatrix<100>)
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 195 |     pub fn reconstruct_from_spectral(&self, _coeffs: &[Complex])
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 203 |     pub fn spectral_energy(&self) -> Result<Vec<i64, STORAGE_MODES>, ()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 214 |     pub fn iter_modes(&self) -> impl Iterator<Item = &EigenModeStorage> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 219 |     pub fn num_modes(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 224 |     pub fn clear(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CONDUCTANCE_LEVELS` is never used
[INFO] [stdout]   --> firmware/src/memory/edge_cache.rs:15:11
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub const CONDUCTANCE_LEVELS: u8 = 4;
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `LEVEL_THRESHOLDS` is never used
[INFO] [stdout]   --> firmware/src/memory/edge_cache.rs:19:11
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub const LEVEL_THRESHOLDS: [u16; 4] = [
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `LEVEL_0_MAX` is never used
[INFO] [stdout]   --> firmware/src/memory/edge_cache.rs:27:11
[INFO] [stdout]    |
[INFO] [stdout] 27 | pub const LEVEL_0_MAX: u16 = 4095;
[INFO] [stdout]    |           ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `LEVEL_1_MIN` is never used
[INFO] [stdout]   --> firmware/src/memory/edge_cache.rs:30:11
[INFO] [stdout]    |
[INFO] [stdout] 30 | pub const LEVEL_1_MIN: u16 = 4096;
[INFO] [stdout]    |           ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `LEVEL_1_MAX` is never used
[INFO] [stdout]   --> firmware/src/memory/edge_cache.rs:31:11
[INFO] [stdout]    |
[INFO] [stdout] 31 | pub const LEVEL_1_MAX: u16 = 8191;
[INFO] [stdout]    |           ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `LEVEL_2_MIN` is never used
[INFO] [stdout]   --> firmware/src/memory/edge_cache.rs:34:11
[INFO] [stdout]    |
[INFO] [stdout] 34 | pub const LEVEL_2_MIN: u16 = 8192;
[INFO] [stdout]    |           ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `LEVEL_2_MAX` is never used
[INFO] [stdout]   --> firmware/src/memory/edge_cache.rs:35:11
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub const LEVEL_2_MAX: u16 = 12287;
[INFO] [stdout]    |           ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `LEVEL_3_MIN` is never used
[INFO] [stdout]   --> firmware/src/memory/edge_cache.rs:38:11
[INFO] [stdout]    |
[INFO] [stdout] 38 | pub const LEVEL_3_MIN: u16 = 12288;
[INFO] [stdout]    |           ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `LEVEL_3_MAX` is never used
[INFO] [stdout]   --> firmware/src/memory/edge_cache.rs:39:11
[INFO] [stdout]    |
[INFO] [stdout] 39 | pub const LEVEL_3_MAX: u16 = 16383;
[INFO] [stdout]    |           ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `EdgeCacheEntry` is never constructed
[INFO] [stdout]   --> firmware/src/memory/edge_cache.rs:43:12
[INFO] [stdout]    |
[INFO] [stdout] 43 | pub struct EdgeCacheEntry {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> firmware/src/memory/edge_cache.rs:60:12
[INFO] [stdout]     |
[INFO] [stdout]  58 | impl EdgeCacheEntry {
[INFO] [stdout]     | ------------------- associated items in this implementation
[INFO] [stdout]  59 |     /// Create a new empty cache entry
[INFO] [stdout]  60 |     pub fn new(node_id: u16) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  72 |     pub fn update_from_conductance(&mut self, conductance: u16, timestamp: u32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  80 |     pub fn target_conductance(&self) -> u16 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  85 |     pub fn conductance_to_data(conductance: u16) -> u8 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  95 |     pub fn data_to_conductance(data: u8) -> u16 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 105 |     pub fn mark_dirty(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 110 |     pub fn mark_clean(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 115 |     pub fn invalidate(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `EdgeCache` is never constructed
[INFO] [stdout]    --> firmware/src/memory/edge_cache.rs:123:12
[INFO] [stdout]     |
[INFO] [stdout] 123 | pub struct EdgeCache<const NUM_ENTRIES: usize> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CacheStats` is never constructed
[INFO] [stdout]    --> firmware/src/memory/edge_cache.rs:134:12
[INFO] [stdout]     |
[INFO] [stdout] 134 | pub struct CacheStats {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `hit_rate` and `reset` are never used
[INFO] [stdout]    --> firmware/src/memory/edge_cache.rs:147:12
[INFO] [stdout]     |
[INFO] [stdout] 145 | impl CacheStats {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] 146 |     /// Calculate hit rate as percentage
[INFO] [stdout] 147 |     pub fn hit_rate(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 157 |     pub fn reset(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> firmware/src/memory/edge_cache.rs:164:12
[INFO] [stdout]     |
[INFO] [stdout] 162 | impl<const NUM_ENTRIES: usize> EdgeCache<NUM_ENTRIES> {
[INFO] [stdout]     | ----------------------------------------------------- associated items in this implementation
[INFO] [stdout] 163 |     /// Create a new edge cache
[INFO] [stdout] 164 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 180 |     pub fn timestamp(&self) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 185 |     pub fn tick(&mut self) {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 191 |     pub fn lookup(&self, node_id: u16) -> Option<(usize, &EdgeCacheEntry)> {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 204 |     pub fn read(&mut self, node_id: u16) -> Option<u8> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 215 |     pub fn write(&mut self, node_id: u16, data: u8) -> Result<(), ()> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 246 |     pub fn invalidate(&mut self, node_id: u16) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 260 |     pub fn flush(&mut self) -> u32 {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 275 |     pub fn stats(&self) -> &CacheStats {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 280 |     pub fn reset_stats(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 285 |     pub fn valid_entries(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 290 |     pub fn dirty_entries(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `EdgeCacheBulk` is never constructed
[INFO] [stdout]    --> firmware/src/memory/edge_cache.rs:302:12
[INFO] [stdout]     |
[INFO] [stdout] 302 | pub struct EdgeCacheBulk<const NUM_ENTRIES: usize> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> firmware/src/memory/edge_cache.rs:313:12
[INFO] [stdout]     |
[INFO] [stdout] 311 | impl<const NUM_ENTRIES: usize> EdgeCacheBulk<NUM_ENTRIES> {
[INFO] [stdout]     | --------------------------------------------------------- associated items in this implementation
[INFO] [stdout] 312 |     /// Create a new bulk cache interface
[INFO] [stdout] 313 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 322 |     pub fn queue_write(&mut self, node_id: u16, data: u8) -> Result<(), ()> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 327 |     pub fn queue_prefetch(&mut self, node_id: u16) -> Result<(), ()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 332 |     pub fn flush_writes(&mut self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 344 |     pub fn execute_prefetches(&mut self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 357 |     pub fn cache(&self) -> &EdgeCache<NUM_ENTRIES> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 362 |     pub fn cache_mut(&mut self) -> &mut EdgeCache<NUM_ENTRIES> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_DIMENSION` is never used
[INFO] [stdout]   --> firmware/src/compute/mod.rs:20:11
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub const MAX_DIMENSION: usize = 10000;
[INFO] [stdout]    |           ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `GRID_SIZE` is never used
[INFO] [stdout]   --> firmware/src/compute/mod.rs:23:11
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub const GRID_SIZE: usize = 100;
[INFO] [stdout]    |           ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `NUM_NEAREST_NEIGHBORS` is never used
[INFO] [stdout]   --> firmware/src/compute/mod.rs:26:11
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub const NUM_NEAREST_NEIGHBORS: usize = 4;
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `NUM_LONG_RANGE_EDGES` is never used
[INFO] [stdout]   --> firmware/src/compute/mod.rs:29:11
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub const NUM_LONG_RANGE_EDGES: usize = 100;
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ALPHA_DEAD_ZONE` is never used
[INFO] [stdout]   --> firmware/src/compute/mod.rs:33:11
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub const ALPHA_DEAD_ZONE: Fixed = 0x0000CCCD; // ~0.8 in fixed-point
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DEFAULT_ALPHA` is never used
[INFO] [stdout]   --> firmware/src/compute/mod.rs:36:11
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub const DEFAULT_ALPHA: Fixed = 0x00002666; // 0.15 in fixed-point
[INFO] [stdout]    |           ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `MatrixIndex` is never used
[INFO] [stdout]   --> firmware/src/compute/mod.rs:39:10
[INFO] [stdout]    |
[INFO] [stdout] 39 | pub type MatrixIndex = u16;
[INFO] [stdout]    |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SparseElement` is never constructed
[INFO] [stdout]   --> firmware/src/compute/mod.rs:43:12
[INFO] [stdout]    |
[INFO] [stdout] 43 | pub struct SparseElement {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]   --> firmware/src/compute/mod.rs:56:12
[INFO] [stdout]    |
[INFO] [stdout] 54 | impl SparseElement {
[INFO] [stdout]    | ------------------ associated items in this implementation
[INFO] [stdout] 55 |     /// Create a new sparse element
[INFO] [stdout] 56 |     pub fn new(row: MatrixIndex, col: MatrixIndex, re: Fixed, im: Fixed) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 61 |     pub fn real(row: MatrixIndex, col: MatrixIndex, re: Fixed) -> Self {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 66 |     pub fn complex(row: MatrixIndex, col: MatrixIndex, c: &Complex) -> Self {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 76 |     pub fn to_complex(&self) -> Complex {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 81 |     pub fn conj(&self) -> Self {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 91 |     pub fn is_diagonal(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 96 |     pub fn norm_sqr(&self) -> Fixed {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SparseMatrix` is never constructed
[INFO] [stdout]    --> firmware/src/compute/mod.rs:106:12
[INFO] [stdout]     |
[INFO] [stdout] 106 | pub struct SparseMatrix<const MAX_ELEM: usize> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> firmware/src/compute/mod.rs:117:12
[INFO] [stdout]     |
[INFO] [stdout] 115 | impl<const MAX_ELEM: usize> SparseMatrix<MAX_ELEM> {
[INFO] [stdout]     | -------------------------------------------------- associated items in this implementation
[INFO] [stdout] 116 |     /// Create a new empty sparse matrix
[INFO] [stdout] 117 |     pub fn new(dimension: MatrixIndex) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 126 |     pub fn len(&self) -> usize {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 131 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 136 |     pub fn clear(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 142 |     pub fn set(&mut self, row: MatrixIndex, col: MatrixIndex, re: Fixed, im: Fixed) -> Result<(), ()> {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 167 |     pub fn get(&self, row: MatrixIndex, col: MatrixIndex) -> SparseElement {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 182 |     pub fn get_ref(&self, row: MatrixIndex, col: MatrixIndex) -> Option<&SparseElement> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 191 |     pub fn sort(&mut self) {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 221 |     pub fn row_iter(&self, row: MatrixIndex) -> impl Iterator<Item = &SparseElement> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 226 |     pub fn diagonal_iter(&self) -> impl Iterator<Item = &SparseElement> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 231 |     pub fn frobenius_norm_sqr(&self) -> i64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 241 |     pub fn frobenius_norm(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 246 |     pub fn transpose(&self) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 260 |     pub fn sparse_mul<const RHS_MAX: usize>(
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 284 |     pub fn is_hermitian(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 305 |     pub fn matvec(&self, x: &[Complex], y: &mut [Complex]) -> usize {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 335 |     pub fn to_dense(&self) -> heapless::Vec<Complex, 4096> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `LaplacianMatrix` is never used
[INFO] [stdout]    --> firmware/src/compute/mod.rs:367:10
[INFO] [stdout]     |
[INFO] [stdout] 367 | pub type LaplacianMatrix<const MAX_ELEM: usize> = SparseMatrix<MAX_ELEM>;
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `UnitaryMatrixType` is never used
[INFO] [stdout]    --> firmware/src/compute/mod.rs:368:10
[INFO] [stdout]     |
[INFO] [stdout] 368 | pub type UnitaryMatrixType<const MAX_ELEM: usize> = SparseMatrix<MAX_ELEM>;
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `WMatrixType` is never used
[INFO] [stdout]    --> firmware/src/compute/mod.rs:369:10
[INFO] [stdout]     |
[INFO] [stdout] 369 | pub type WMatrixType<const MAX_ELEM: usize> = SparseMatrix<MAX_ELEM>;
[INFO] [stdout]     |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `EdgeType` is never used
[INFO] [stdout]   --> firmware/src/compute/laplacian.rs:15:10
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub enum EdgeType {
[INFO] [stdout]    |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Edge` is never constructed
[INFO] [stdout]   --> firmware/src/compute/laplacian.rs:24:12
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub struct Edge {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `nearest_neighbor`, `long_range`, `transpose`, and `is_self_loop` are never used
[INFO] [stdout]   --> firmware/src/compute/laplacian.rs:37:12
[INFO] [stdout]    |
[INFO] [stdout] 35 | impl Edge {
[INFO] [stdout]    | --------- associated items in this implementation
[INFO] [stdout] 36 |     /// Create a new edge
[INFO] [stdout] 37 |     pub fn new(from: MatrixIndex, to: MatrixIndex, edge_type: EdgeType, weight: Fixed) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 42 |     pub fn nearest_neighbor(from: MatrixIndex, to: MatrixIndex) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 47 |     pub fn long_range(from: MatrixIndex, to: MatrixIndex, weight: Fixed) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 52 |     pub fn transpose(&self) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 62 |     pub fn is_self_loop(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AdjacencyList` is never constructed
[INFO] [stdout]   --> firmware/src/compute/laplacian.rs:68:12
[INFO] [stdout]    |
[INFO] [stdout] 68 | pub struct AdjacencyList {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> firmware/src/compute/laplacian.rs:79:12
[INFO] [stdout]     |
[INFO] [stdout]  77 | impl AdjacencyList {
[INFO] [stdout]     | ------------------ associated items in this implementation
[INFO] [stdout]  78 |     /// Create a new empty adjacency list
[INFO] [stdout]  79 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  98 |     pub fn add_edge(&mut self, u: MatrixIndex, v: MatrixIndex, weight: Fixed) -> Result<(), ()> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 118 |     pub fn degree(&self, node: MatrixIndex) -> Fixed {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 131 |     pub fn num_neighbors(&self, node: MatrixIndex) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 139 |     pub fn iter_neighbors(&self, node: MatrixIndex) -> impl Iterator<Item = &(MatrixIndex, Fixed)> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 148 |     pub fn num_nodes(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 154 |     pub fn num_edges(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 159 |     pub fn clear(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `GridTopology` is never constructed
[INFO] [stdout]    --> firmware/src/compute/laplacian.rs:174:12
[INFO] [stdout]     |
[INFO] [stdout] 174 | pub struct GridTopology {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `standard_100x100`, `coord_to_id`, `id_to_coord`, `generate_adjacency_list`, `num_nodes`, and `dimensions` are never used
[INFO] [stdout]    --> firmware/src/compute/laplacian.rs:187:12
[INFO] [stdout]     |
[INFO] [stdout] 185 | impl GridTopology {
[INFO] [stdout]     | ----------------- associated items in this implementation
[INFO] [stdout] 186 |     /// Create a standard 100x100 grid topology
[INFO] [stdout] 187 |     pub fn standard_100x100() -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 197 |     pub fn coord_to_id(&self, row: usize, col: usize) -> MatrixIndex {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 202 |     pub fn id_to_coord(&self, id: MatrixIndex) -> (usize, usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 208 |     pub fn generate_adjacency_list(&self) -> AdjacencyList {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 261 |     pub fn num_nodes(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 266 |     pub fn dimensions(&self) -> (usize, usize) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `LaplacianBuilder` is never constructed
[INFO] [stdout]    --> firmware/src/compute/laplacian.rs:278:12
[INFO] [stdout]     |
[INFO] [stdout] 278 | pub struct LaplacianBuilder;
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `build_combinatorial` and `build_normalized` are never used
[INFO] [stdout]    --> firmware/src/compute/laplacian.rs:283:12
[INFO] [stdout]     |
[INFO] [stdout] 280 | impl LaplacianBuilder {
[INFO] [stdout]     | --------------------- associated functions in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 283 |     pub fn build_combinatorial<const MAX_ELEM: usize>(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 314 |     pub fn build_normalized<const MAX_ELEM: usize>(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ALPHA_MIN` is never used
[INFO] [stdout]   --> firmware/src/compute/evolution.rs:24:11
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub const ALPHA_MIN: Fixed = 0;           // 0
[INFO] [stdout]    |           ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ALPHA_MAX` is never used
[INFO] [stdout]   --> firmware/src/compute/evolution.rs:25:11
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub const ALPHA_MAX: Fixed = 0x00020000;  // 2.0 in fixed-point
[INFO] [stdout]    |           ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ALPHA_DEFAULT` is never used
[INFO] [stdout]   --> firmware/src/compute/evolution.rs:26:11
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub const ALPHA_DEFAULT: Fixed = 0x00002666; // 0.15 in fixed-point
[INFO] [stdout]    |           ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ALPHA_DEAD_ZONE` is never used
[INFO] [stdout]   --> firmware/src/compute/evolution.rs:27:11
[INFO] [stdout]    |
[INFO] [stdout] 27 | pub const ALPHA_DEAD_ZONE: Fixed = 0x0000CCCD; // ~0.8
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_LANCZOS_ITER` is never used
[INFO] [stdout]   --> firmware/src/compute/evolution.rs:30:11
[INFO] [stdout]    |
[INFO] [stdout] 30 | pub const MAX_LANCZOS_ITER: usize = 20;
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `KRYLOV_DIM` is never used
[INFO] [stdout]   --> firmware/src/compute/evolution.rs:33:11
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub const KRYLOV_DIM: usize = 20;
[INFO] [stdout]    |           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `EvolutionEngine` is never constructed
[INFO] [stdout]   --> firmware/src/compute/evolution.rs:36:12
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub struct EvolutionEngine {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> firmware/src/compute/evolution.rs:47:12
[INFO] [stdout]     |
[INFO] [stdout]  45 | impl EvolutionEngine {
[INFO] [stdout]     | -------------------- associated items in this implementation
[INFO] [stdout]  46 |     /// Create a new evolution engine
[INFO] [stdout]  47 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  56 |     pub fn set_alpha(&mut self, alpha: Fixed) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  67 |     pub fn set_alpha_float(&mut self, alpha: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  73 |     pub fn alpha(&self) -> Fixed {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  78 |     pub fn initialize<const MAX_ELEM: usize>(&mut self, w_matrix: &SparseMatrix<MAX_ELEM>) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  85 |     pub fn check_norm_conservation<const MAX_ELEM: usize>(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 105 |     pub fn evolve_step<const MAX_ELEM: usize>(
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 157 |     fn compute_lwl_product<const MAX_ELEM: usize>(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 194 |     pub fn evolve_euler<const MAX_ELEM: usize>(
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `matrix_exp_pade1` is never used
[INFO] [stdout]    --> firmware/src/compute/evolution.rs:214:8
[INFO] [stdout]     |
[INFO] [stdout] 214 | pub fn matrix_exp_pade1<const MAX_ELEM: usize>(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `unitary_evolution_operator` is never used
[INFO] [stdout]    --> firmware/src/compute/evolution.rs:239:8
[INFO] [stdout]     |
[INFO] [stdout] 239 | pub fn unitary_evolution_operator<const MAX_ELEM: usize>(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `dense_identity` is never used
[INFO] [stdout]    --> firmware/src/compute/evolution.rs:294:4
[INFO] [stdout]     |
[INFO] [stdout] 294 | fn dense_identity(n: usize) -> Vec<super::super::memory::Complex> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `dense_add` is never used
[INFO] [stdout]    --> firmware/src/compute/evolution.rs:302:4
[INFO] [stdout]     |
[INFO] [stdout] 302 | fn dense_add(
[INFO] [stdout]     |    ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `dense_sub` is never used
[INFO] [stdout]    --> firmware/src/compute/evolution.rs:309:4
[INFO] [stdout]     |
[INFO] [stdout] 309 | fn dense_sub(
[INFO] [stdout]     |    ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `dense_scale` is never used
[INFO] [stdout]    --> firmware/src/compute/evolution.rs:324:4
[INFO] [stdout]     |
[INFO] [stdout] 324 | fn dense_scale(
[INFO] [stdout]     |    ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `dense_mul` is never used
[INFO] [stdout]    --> firmware/src/compute/evolution.rs:338:4
[INFO] [stdout]     |
[INFO] [stdout] 338 | fn dense_mul(
[INFO] [stdout]     |    ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `complex_div` is never used
[INFO] [stdout]    --> firmware/src/compute/evolution.rs:363:4
[INFO] [stdout]     |
[INFO] [stdout] 363 | fn complex_div(
[INFO] [stdout]     |    ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `dense_inverse` is never used
[INFO] [stdout]    --> firmware/src/compute/evolution.rs:381:4
[INFO] [stdout]     |
[INFO] [stdout] 381 | fn dense_inverse(
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `build_unitary_operator_dense` is never used
[INFO] [stdout]    --> firmware/src/compute/evolution.rs:452:4
[INFO] [stdout]     |
[INFO] [stdout] 452 | fn build_unitary_operator_dense<const MAX_ELEM: usize>(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `TimeState` is never used
[INFO] [stdout]   --> firmware/src/sync/mod.rs:14:10
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub enum TimeState {
[INFO] [stdout]    |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `CorrelationStrength` is never used
[INFO] [stdout]   --> firmware/src/sync/mod.rs:22:10
[INFO] [stdout]    |
[INFO] [stdout] 22 | pub type CorrelationStrength = Fixed;
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_CORRELATION` is never used
[INFO] [stdout]   --> firmware/src/sync/mod.rs:25:11
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub const MAX_CORRELATION: Fixed = FIXED_ONE;
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ENTANGLEMENT_THRESHOLD` is never used
[INFO] [stdout]   --> firmware/src/sync/mod.rs:28:11
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub const ENTANGLEMENT_THRESHOLD: Fixed = 0x0000B333; // ~0.7
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `NUM_TIME_SLICES` is never used
[INFO] [stdout]   --> firmware/src/sync/block_universe.rs:20:11
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub const NUM_TIME_SLICES: usize = 3;
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PAST` is never used
[INFO] [stdout]   --> firmware/src/sync/block_universe.rs:23:11
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub const PAST: usize = 0;
[INFO] [stdout]    |           ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PRESENT` is never used
[INFO] [stdout]   --> firmware/src/sync/block_universe.rs:24:11
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub const PRESENT: usize = 1;
[INFO] [stdout]    |           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `FUTURE` is never used
[INFO] [stdout]   --> firmware/src/sync/block_universe.rs:25:11
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub const FUTURE: usize = 2;
[INFO] [stdout]    |           ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `CorrelationMatrix` is never used
[INFO] [stdout]   --> firmware/src/sync/block_universe.rs:29:10
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub type CorrelationMatrix = [[Fixed; NUM_TIME_SLICES]; NUM_TIME_SLICES];
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `BlockUniverse` is never constructed
[INFO] [stdout]   --> firmware/src/sync/block_universe.rs:33:12
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub struct BlockUniverse {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> firmware/src/sync/block_universe.rs:48:12
[INFO] [stdout]     |
[INFO] [stdout]  46 | impl BlockUniverse {
[INFO] [stdout]     | ------------------ associated items in this implementation
[INFO] [stdout]  47 |     /// Create a new block universe with no correlations
[INFO] [stdout]  48 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  60 |     pub fn initialize_ghz(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  79 |     pub fn correlation(&self, slice_a: usize, slice_b: usize) -> Fixed {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  88 |     pub fn set_correlation(&mut self, slice_a: usize, slice_b: usize, value: Fixed) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  96 |     pub fn is_entangled(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 106 |     pub fn synchronize(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 122 |     pub fn evolve_correlations(&mut self, _alpha: Fixed) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 140 |     pub fn ghz_fidelity(&self) -> Fixed {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 150 |     pub fn reset(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `BlockUniverseSync` is never constructed
[INFO] [stdout]    --> firmware/src/sync/block_universe.rs:163:12
[INFO] [stdout]     |
[INFO] [stdout] 163 | pub struct BlockUniverseSync {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `initialize_ghz`, `synchronize`, `is_synchronized`, and `status` are never used
[INFO] [stdout]    --> firmware/src/sync/block_universe.rs:176:12
[INFO] [stdout]     |
[INFO] [stdout] 174 | impl BlockUniverseSync {
[INFO] [stdout]     | ---------------------- associated items in this implementation
[INFO] [stdout] 175 |     /// Create a new block universe synchronizer
[INFO] [stdout] 176 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 186 |     pub fn initialize_ghz(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 192 |     pub fn synchronize(&mut self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 203 |     pub fn is_synchronized(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 208 |     pub fn status(&self) -> (bool, Fixed, u32) {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `CommandId` is never used
[INFO] [stdout]   --> firmware/src/api/mod.rs:12:10
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub enum CommandId {
[INFO] [stdout]    |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `from_u8` is never used
[INFO] [stdout]   --> firmware/src/api/mod.rs:55:12
[INFO] [stdout]    |
[INFO] [stdout] 53 | impl CommandId {
[INFO] [stdout]    | -------------- associated function in this implementation
[INFO] [stdout] 54 |     /// Convert from raw byte
[INFO] [stdout] 55 |     pub fn from_u8(value: u8) -> Option<Self> {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `StatusCode` is never used
[INFO] [stdout]   --> firmware/src/api/mod.rs:85:10
[INFO] [stdout]    |
[INFO] [stdout] 85 | pub enum StatusCode {
[INFO] [stdout]    |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CommandPacket` is never constructed
[INFO] [stdout]    --> firmware/src/api/mod.rs:110:12
[INFO] [stdout]     |
[INFO] [stdout] 110 | pub struct CommandPacket {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `with_data`, `serialize`, and `deserialize` are never used
[INFO] [stdout]    --> firmware/src/api/mod.rs:125:12
[INFO] [stdout]     |
[INFO] [stdout] 123 | impl CommandPacket {
[INFO] [stdout]     | ------------------ associated items in this implementation
[INFO] [stdout] 124 |     /// Create a new command packet
[INFO] [stdout] 125 |     pub fn new(cmd: CommandId, param1: u8, param2: u8) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 136 |     pub fn with_data(mut self, data: &[u8]) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 144 |     pub fn serialize(&self, buffer: &mut [u8]) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 164 |     pub fn deserialize(buffer: &[u8]) -> Option<Self> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ResponsePacket` is never constructed
[INFO] [stdout]    --> firmware/src/api/mod.rs:191:12
[INFO] [stdout]     |
[INFO] [stdout] 191 | pub struct ResponsePacket {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `ok`, `error`, `with_data`, `with_u32`, `with_u16`, and `serialize` are never used
[INFO] [stdout]    --> firmware/src/api/mod.rs:202:12
[INFO] [stdout]     |
[INFO] [stdout] 200 | impl ResponsePacket {
[INFO] [stdout]     | ------------------- associated items in this implementation
[INFO] [stdout] 201 |     /// Create a success response
[INFO] [stdout] 202 |     pub fn ok() -> Self {
[INFO] [stdout]     |            ^^
[INFO] [stdout] ...
[INFO] [stdout] 211 |     pub fn error(code: StatusCode) -> Self {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 220 |     pub fn with_data(mut self, data: &[u8]) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 228 |     pub fn with_u32(self, value: u32) -> Self {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 233 |     pub fn with_u16(self, value: u16) -> Self {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 238 |     pub fn serialize(&self) -> [u8; 8] {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ApiHandler` is never constructed
[INFO] [stdout]    --> firmware/src/api/mod.rs:248:12
[INFO] [stdout]     |
[INFO] [stdout] 248 | pub struct ApiHandler {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `HandlerState` is never used
[INFO] [stdout]    --> firmware/src/api/mod.rs:264:6
[INFO] [stdout]     |
[INFO] [stdout] 264 | enum HandlerState {
[INFO] [stdout]     |      ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> firmware/src/api/mod.rs:273:12
[INFO] [stdout]     |
[INFO] [stdout] 271 | impl ApiHandler {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout] 272 |     /// Create a new API handler
[INFO] [stdout] 273 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 286 |     pub fn rx_byte(&mut self, byte: u8) -> bool {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 309 |     pub fn get_command(&self) -> Option<CommandPacket> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 314 |     pub fn start_tx(&mut self, response: &ResponsePacket) {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 323 |     pub fn tx_byte(&mut self) -> Option<u8> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 339 |     pub fn is_idle(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 344 |     pub fn reset(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CommandProcessor` is never constructed
[INFO] [stdout]    --> firmware/src/api/mod.rs:360:12
[INFO] [stdout]     |
[INFO] [stdout] 360 | pub struct CommandProcessor;
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated functions are never used
[INFO] [stdout]    --> firmware/src/api/mod.rs:364:12
[INFO] [stdout]     |
[INFO] [stdout] 362 | impl CommandProcessor {
[INFO] [stdout]     | --------------------- associated functions in this implementation
[INFO] [stdout] 363 |     /// Process a command and return a response
[INFO] [stdout] 364 |     pub fn process(cmd: &CommandPacket) -> ResponsePacket {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 388 |     fn handle_get_status() -> ResponsePacket {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 404 |     fn handle_reset() -> ResponsePacket {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 409 |     fn handle_read(cmd: &CommandPacket) -> ResponsePacket {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 421 |     fn handle_write(cmd: &CommandPacket) -> ResponsePacket {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 427 |     fn handle_apply_phase(cmd: &CommandPacket) -> ResponsePacket {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 442 |     fn handle_measure_conductance(cmd: &CommandPacket) -> ResponsePacket {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 452 |     fn handle_evolve(cmd: &CommandPacket) -> ResponsePacket {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 463 |     fn handle_sync_time() -> ResponsePacket {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 468 |     fn handle_set_alpha(cmd: &CommandPacket) -> ResponsePacket {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 477 |     fn handle_get_time_bank() -> ResponsePacket {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 483 |     fn handle_jump_time_bank(cmd: &CommandPacket) -> ResponsePacket {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 490 |     fn handle_read_eigen(cmd: &CommandPacket) -> ResponsePacket {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 497 |     fn handle_write_eigen(cmd: &CommandPacket) -> ResponsePacket {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 504 |     fn handle_read_edge_cache(cmd: &CommandPacket) -> ResponsePacket {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 511 |     fn handle_write_edge_cache(cmd: &CommandPacket) -> ResponsePacket {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 520 |     fn handle_batch_read(cmd: &CommandPacket) -> ResponsePacket {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 527 |     fn handle_batch_write(cmd: &CommandPacket) -> ResponsePacket {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: creating a shared reference to mutable static
[INFO] [stdout]   --> firmware/src/hal/spi.rs:87:12
[INFO] [stdout]    |
[INFO] [stdout] 87 |         if STATE.is_none() {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^ shared reference to mutable static
[INFO] [stdout]    |
[INFO] [stdout]    = note: shared references to mutable statics are dangerous; it's undefined behavior if the static is mutated or if a mutable reference is created for it while the shared reference lives
[INFO] [stdout]    = help: use a type that relies on "interior mutability" instead; to read more on this, visit <https://doc.rust-lang.org/reference/interior-mutability.html>
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/static-mut-references.html>
[INFO] [stdout]    = note: `#[warn(static_mut_refs)]` (part of `#[warn(rust_2024_compatibility)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: creating a mutable reference to mutable static
[INFO] [stdout]   --> firmware/src/hal/spi.rs:90:11
[INFO] [stdout]    |
[INFO] [stdout] 90 |         f(STATE.as_mut().expect("psram state not initialized"))
[INFO] [stdout]    |           ^^^^^^^^^^^^^^ mutable reference to mutable static
[INFO] [stdout]    |
[INFO] [stdout]    = note: mutable references to mutable statics are dangerous; it's undefined behavior if any other pointer to the static is used or if any other reference is created for the static while the mutable reference lives
[INFO] [stdout]    = help: use a type that relies on "interior mutability" instead; to read more on this, visit <https://doc.rust-lang.org/reference/interior-mutability.html>
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/static-mut-references.html>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable statement
[INFO] [stdout]    --> firmware/src/compute/evolution.rs:128:9
[INFO] [stdout]     |
[INFO] [stdout] 125 |         return Ok(());
[INFO] [stdout]     |         ------------- any code following this expression is unreachable
[INFO] [stdout] ...
[INFO] [stdout] 128 |         w_new.clear();
[INFO] [stdout]     |         ^^^^^^^^^^^^^^ unreachable statement
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unreachable_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `w`
[INFO] [stdout]    --> firmware/src/compute/evolution.rs:196:9
[INFO] [stdout]     |
[INFO] [stdout] 196 |         w: &mut SparseMatrix<MAX_ELEM>,
[INFO] [stdout]     |         ^ help: if this is intentional, prefix it with an underscore: `_w`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `cmd`
[INFO] [stdout]    --> firmware/src/api/mod.rs:421:21
[INFO] [stdout]     |
[INFO] [stdout] 421 |     fn handle_write(cmd: &CommandPacket) -> ResponsePacket {
[INFO] [stdout]     |                     ^^^ help: if this is intentional, prefix it with an underscore: `_cmd`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `firmware_main` is never used
[INFO] [stdout]    --> firmware/src/main.rs:142:4
[INFO] [stdout]     |
[INFO] [stdout] 142 | fn firmware_main() -> ! {
[INFO] [stdout]     |    ^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `idle_wait` is never used
[INFO] [stdout]    --> firmware/src/main.rs:197:4
[INFO] [stdout]     |
[INFO] [stdout] 197 | fn idle_wait() {
[INFO] [stdout]     |    ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SYS_CLOCK_HZ` is never used
[INFO] [stdout]   --> firmware/src/hal/mod.rs:16:11
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub const SYS_CLOCK_HZ: u32 = 100_000_000;
[INFO] [stdout]    |           ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `NUM_NODES` is never used
[INFO] [stdout]   --> firmware/src/hal/mod.rs:19:11
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub const NUM_NODES: usize = 10_000;
[INFO] [stdout]    |           ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `GRID_SIZE` is never used
[INFO] [stdout]   --> firmware/src/hal/mod.rs:22:11
[INFO] [stdout]    |
[INFO] [stdout] 22 | pub const GRID_SIZE: usize = 100;
[INFO] [stdout]    |           ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `NUM_LONG_RANGE_EDGES` is never used
[INFO] [stdout]   --> firmware/src/hal/mod.rs:25:11
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub const NUM_LONG_RANGE_EDGES: usize = 100;
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PSRAM_SPI_MAX_HZ` is never used
[INFO] [stdout]   --> firmware/src/hal/mod.rs:28:11
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub const PSRAM_SPI_MAX_HZ: u32 = 50_000_000;
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `HalError` is never used
[INFO] [stdout]   --> firmware/src/hal/mod.rs:32:10
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub enum HalError {
[INFO] [stdout]    |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `HalResult` is never used
[INFO] [stdout]   --> firmware/src/hal/mod.rs:43:10
[INFO] [stdout]    |
[INFO] [stdout] 43 | pub type HalResult<T> = Result<T, HalError>;
[INFO] [stdout]    |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SystemHal` is never constructed
[INFO] [stdout]   --> firmware/src/hal/mod.rs:46:12
[INFO] [stdout]    |
[INFO] [stdout] 46 | pub struct SystemHal<SPI, GPIO, ADC, DAC>
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new` and `select_node` are never used
[INFO] [stdout]   --> firmware/src/hal/mod.rs:69:12
[INFO] [stdout]    |
[INFO] [stdout] 63 | / impl<SPI, GPIO, ADC, DAC> SystemHal<SPI, GPIO, ADC, DAC>
[INFO] [stdout] 64 | | where
[INFO] [stdout] 65 | |     SPI: SpiDevice,
[INFO] [stdout] 66 | |     GPIO: OutputPin,
[INFO] [stdout]    | |____________________- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 69 |       pub fn new(spi: SPI, gpio: GPIO, adc: ADC, dac: DAC) -> Self {
[INFO] [stdout]    |              ^^^
[INFO] [stdout] ...
[INFO] [stdout] 80 |       pub fn select_node(&mut self, node_id: u16) -> HalResult<()> {
[INFO] [stdout]    |              ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ROW_ADDR_BITS` is never used
[INFO] [stdout]  --> firmware/src/hal/gpio.rs:9:11
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub const ROW_ADDR_BITS: usize = 7;
[INFO] [stdout]   |           ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `COL_ADDR_BITS` is never used
[INFO] [stdout]   --> firmware/src/hal/gpio.rs:12:11
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub const COL_ADDR_BITS: usize = 7;
[INFO] [stdout]    |           ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TOTAL_ADDR_BITS` is never used
[INFO] [stdout]   --> firmware/src/hal/gpio.rs:15:11
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub const TOTAL_ADDR_BITS: usize = ROW_ADDR_BITS + COL_ADDR_BITS;
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `NodeAddressGpio` is never constructed
[INFO] [stdout]   --> firmware/src/hal/gpio.rs:18:12
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub struct NodeAddressGpio<ROW0, ROW1, ROW2, ROW3, ROW4, ROW5, ROW6,
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> firmware/src/hal/gpio.rs:54:12
[INFO] [stdout]     |
[INFO] [stdout]  40 | / impl<ROW0, ROW1, ROW2, ROW3, ROW4, ROW5, ROW6,
[INFO] [stdout]  41 | |      COL0, COL1, COL2, COL3, COL4, COL5, COL6,
[INFO] [stdout]  42 | |      PHASE_SEL, COND_SEL>
[INFO] [stdout]  43 | | NodeAddressGpio<ROW0, ROW1, ROW2, ROW3, ROW4, ROW5, ROW6,
[INFO] [stdout] ...   |
[INFO] [stdout]  50 | |     COL4: OutputPin, COL5: OutputPin, COL6: OutputPin,
[INFO] [stdout]  51 | |     PHASE_SEL: OutputPin, COND_SEL: OutputPin,
[INFO] [stdout]     | |______________________________________________- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  54 |       pub fn new(
[INFO] [stdout]     |              ^^^
[INFO] [stdout] ...
[INFO] [stdout]  71 |       pub fn node_to_coords(node_id: u16) -> (u8, u8) {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  78 |       pub fn coords_to_node(row: u8, col: u8) -> u16 {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  83 |       fn set_row_address(&mut self, row: u8) -> Result<(), GpioError> {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  90 |       fn set_col_address(&mut self, col: u8) -> Result<(), GpioError> {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  97 |       fn to_7bit(value: u8) -> [bool; 7] {
[INFO] [stdout]     |          ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 110 |       fn set_row_bits(&mut self, bits: [bool; 7]) -> Result<(), GpioError> {
[INFO] [stdout]     |          ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 132 |       fn set_col_bits(&mut self, bits: [bool; 7]) -> Result<(), GpioError> {
[INFO] [stdout]     |          ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 153 |       pub fn select_node(&mut self, node_id: u16) -> Result<(), GpioError> {
[INFO] [stdout]     |              ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 167 |       pub fn enable_phase_injection(&mut self) -> Result<(), GpioError> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 172 |       pub fn disable_phase_injection(&mut self) -> Result<(), GpioError> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 177 |       pub fn enable_conductance_measurement(&mut self) -> Result<(), GpioError> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 182 |       pub fn disable_conductance_measurement(&mut self) -> Result<(), GpioError> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `GpioError` is never used
[INFO] [stdout]    --> firmware/src/hal/gpio.rs:189:10
[INFO] [stdout]     |
[INFO] [stdout] 189 | pub enum GpioError {
[INFO] [stdout]     |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `BusError`, `DeviceError`, `Timeout`, and `BufferTooLarge` are never constructed
[INFO] [stdout]   --> firmware/src/hal/spi.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub enum SpiError {
[INFO] [stdout]    |          -------- variants in this enum
[INFO] [stdout] 16 |     BusError,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 17 |     DeviceError,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 18 |     Timeout,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 19 |     InvalidAddress,
[INFO] [stdout] 20 |     BufferTooLarge,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SpiError` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `BANK_SIZE` is never used
[INFO] [stdout]   --> firmware/src/hal/spi.rs:26:11
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub const BANK_SIZE: u32 = 64 * 1024;
[INFO] [stdout]    |           ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple variants are never constructed
[INFO] [stdout]   --> firmware/src/hal/spi.rs:38:5
[INFO] [stdout]    |
[INFO] [stdout] 34 | pub enum PsramCommand {
[INFO] [stdout]    |          ------------ variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 38 |     FastRead = 0x0B,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 42 |     SectorErase = 0x20,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 43 |     /// Block erase (64KB)
[INFO] [stdout] 44 |     BlockErase = 0xD8,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 45 |     /// Chip erase
[INFO] [stdout] 46 |     ChipErase = 0xC7,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 47 |     /// Read status register
[INFO] [stdout] 48 |     ReadStatus = 0x05,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 49 |     /// Write enable
[INFO] [stdout] 50 |     WriteEnable = 0x06,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 51 |     /// Write disable
[INFO] [stdout] 52 |     WriteDisable = 0x04,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 53 |     /// Read JEDEC ID
[INFO] [stdout] 54 |     ReadJedecId = 0x9F,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `PsramCommand` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PsramController` is never constructed
[INFO] [stdout]    --> firmware/src/hal/spi.rs:180:12
[INFO] [stdout]     |
[INFO] [stdout] 180 | pub struct PsramController<BUS>
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> firmware/src/hal/spi.rs:200:12
[INFO] [stdout]     |
[INFO] [stdout] 194 | / impl<BUS> PsramController<BUS>
[INFO] [stdout] 195 | | where
[INFO] [stdout] 196 | |     BUS: SpiBus,
[INFO] [stdout] 197 | |     BUS::Error: core::fmt::Debug,
[INFO] [stdout]     | |_________________________________- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 200 |       pub fn new(spi: BUS) -> Self {
[INFO] [stdout]     |              ^^^
[INFO] [stdout] ...
[INFO] [stdout] 210 |       pub fn read_jedec_id(&mut self) -> Result<(u8, u8, u8), SpiError> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 221 |       pub fn read_status(&mut self) -> Result<u8, SpiError> {
[INFO] [stdout]     |              ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 232 |       pub fn write_enable(&mut self) -> Result<(), SpiError> {
[INFO] [stdout]     |              ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 238 |       pub fn write_disable(&mut self) -> Result<(), SpiError> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 244 |       pub fn read(&mut self, address: u32, buffer: &mut [u8]) -> Result<(), SpiError> {
[INFO] [stdout]     |              ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 263 |       pub fn write(&mut self, address: u32, data: &[u8]) -> Result<(), SpiError> {
[INFO] [stdout]     |              ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 294 |       pub fn sector_erase(&mut self, address: u32) -> Result<(), SpiError> {
[INFO] [stdout]     |              ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PcInterface` is never constructed
[INFO] [stdout]    --> firmware/src/hal/spi.rs:320:12
[INFO] [stdout]     |
[INFO] [stdout] 320 | pub struct PcInterface<DEVICE>
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `receive_command`, and `send_response` are never used
[INFO] [stdout]    --> firmware/src/hal/spi.rs:334:12
[INFO] [stdout]     |
[INFO] [stdout] 328 | / impl<DEVICE> PcInterface<DEVICE>
[INFO] [stdout] 329 | | where
[INFO] [stdout] 330 | |     DEVICE: SpiDevice,
[INFO] [stdout] 331 | |     DEVICE::Error: core::fmt::Debug,
[INFO] [stdout]     | |____________________________________- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 334 |       pub fn new(device: DEVICE) -> Self {
[INFO] [stdout]     |              ^^^
[INFO] [stdout] ...
[INFO] [stdout] 342 |       pub fn receive_command(&mut self) -> Result<HostCommand, SpiError> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 364 |       pub fn send_response(&mut self, response: HostResponse) -> Result<(), SpiError> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `HostCommand` is never used
[INFO] [stdout]    --> firmware/src/hal/spi.rs:372:10
[INFO] [stdout]     |
[INFO] [stdout] 372 | pub enum HostCommand {
[INFO] [stdout]     |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `decode` is never used
[INFO] [stdout]    --> firmware/src/hal/spi.rs:393:12
[INFO] [stdout]     |
[INFO] [stdout] 391 | impl HostCommand {
[INFO] [stdout]     | ---------------- associated function in this implementation
[INFO] [stdout] 392 |     /// Decode command from raw bytes
[INFO] [stdout] 393 |     pub fn decode(cmd_id: u8, param1: u8, param2: u8, data: &[u8]) -> Option<Self> {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `HostResponse` is never used
[INFO] [stdout]    --> firmware/src/hal/spi.rs:430:10
[INFO] [stdout]     |
[INFO] [stdout] 430 | pub enum HostResponse {
[INFO] [stdout]     |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `encode` is never used
[INFO] [stdout]    --> firmware/src/hal/spi.rs:458:12
[INFO] [stdout]     |
[INFO] [stdout] 456 | impl HostResponse {
[INFO] [stdout]     | ----------------- method in this implementation
[INFO] [stdout] 457 |     /// Encode response to bytes
[INFO] [stdout] 458 |     pub fn encode(&self) -> [u8; 8] {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `PhaseAngle` is never used
[INFO] [stdout]  --> firmware/src/hal/analog.rs:9:10
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub type PhaseAngle = u16;
[INFO] [stdout]   |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `ConductanceValue` is never used
[INFO] [stdout]   --> firmware/src/hal/analog.rs:12:10
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub type ConductanceValue = u16;
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DAC_RESOLUTION` is never used
[INFO] [stdout]   --> firmware/src/hal/analog.rs:15:11
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub const DAC_RESOLUTION: u8 = 16;
[INFO] [stdout]    |           ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ADC_RESOLUTION` is never used
[INFO] [stdout]   --> firmware/src/hal/analog.rs:18:11
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub const ADC_RESOLUTION: u8 = 12;
[INFO] [stdout]    |           ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `DacWrite` is never used
[INFO] [stdout]   --> firmware/src/hal/analog.rs:24:11
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub trait DacWrite {
[INFO] [stdout]    |           ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `AdcRead` is never used
[INFO] [stdout]   --> firmware/src/hal/analog.rs:32:11
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub trait AdcRead<PIN> {
[INFO] [stdout]    |           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `phase_to_radians` is never used
[INFO] [stdout]   --> firmware/src/hal/analog.rs:40:8
[INFO] [stdout]    |
[INFO] [stdout] 40 | pub fn phase_to_radians(phase: PhaseAngle) -> f32 {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `radians_to_phase` is never used
[INFO] [stdout]   --> firmware/src/hal/analog.rs:45:8
[INFO] [stdout]    |
[INFO] [stdout] 45 | pub fn radians_to_phase(radians: f32) -> PhaseAngle {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PhaseDac` is never constructed
[INFO] [stdout]   --> firmware/src/hal/analog.rs:51:12
[INFO] [stdout]    |
[INFO] [stdout] 51 | pub struct PhaseDac<DAC> {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `vref`, `current_value`, and `phase_to_voltage` are never used
[INFO] [stdout]   --> firmware/src/hal/analog.rs:59:12
[INFO] [stdout]    |
[INFO] [stdout] 57 | impl<DAC> PhaseDac<DAC> {
[INFO] [stdout]    | ----------------------- associated items in this implementation
[INFO] [stdout] 58 |     /// Create a new phase DAC driver
[INFO] [stdout] 59 |     pub fn new(dac: DAC, vref_mv: f32) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 68 |     pub fn vref(&self) -> f32 {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 73 |     pub fn current_value(&self) -> u16 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 79 |     pub fn phase_to_voltage(phase: PhaseAngle, vref_mv: f32) -> f32 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `set_phase`, `set_phase_rad`, and `disable` are never used
[INFO] [stdout]    --> firmware/src/hal/analog.rs:90:12
[INFO] [stdout]     |
[INFO] [stdout]  85 | / impl<DAC> PhaseDac<DAC>
[INFO] [stdout]  86 | | where
[INFO] [stdout]  87 | |     DAC: DacWrite<Word = u16>,
[INFO] [stdout]     | |______________________________- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  90 |       pub fn set_phase(&mut self, phase: PhaseAngle) -> Result<(), DacError> {
[INFO] [stdout]     |              ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  98 |       pub fn set_phase_rad(&mut self, radians: f32) -> Result<(), DacError> {
[INFO] [stdout]     |              ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 104 |       pub fn disable(&mut self) -> Result<(), DacError> {
[INFO] [stdout]     |              ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ConductanceAdc` is never constructed
[INFO] [stdout]    --> firmware/src/hal/analog.rs:112:12
[INFO] [stdout]     |
[INFO] [stdout] 112 | pub struct ConductanceAdc<ADC, PIN> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `adc_to_conductance`, and `quantize_conductance` are never used
[INFO] [stdout]    --> firmware/src/hal/analog.rs:121:12
[INFO] [stdout]     |
[INFO] [stdout] 119 | impl<ADC, PIN> ConductanceAdc<ADC, PIN> {
[INFO] [stdout]     | --------------------------------------- associated items in this implementation
[INFO] [stdout] 120 |     /// Create a new conductance ADC driver
[INFO] [stdout] 121 |     pub fn new(adc: ADC, pin: PIN, vref_mv: f32, sense_resistor_ohms: f32) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 132 |     pub fn adc_to_conductance(&self, adc_raw: u16, adc_max: u16) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 148 |     pub fn quantize_conductance(&self, conductance: f32) -> u8 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `measure` and `measure_raw` are never used
[INFO] [stdout]    --> firmware/src/hal/analog.rs:160:12
[INFO] [stdout]     |
[INFO] [stdout] 155 | / impl<ADC, PIN> ConductanceAdc<ADC, PIN>
[INFO] [stdout] 156 | | where
[INFO] [stdout] 157 | |     ADC: AdcRead<PIN, Word = u16>,
[INFO] [stdout]     | |__________________________________- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 160 |       pub fn measure(&mut self) -> Result<ConductanceValue, AdcError> {
[INFO] [stdout]     |              ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 173 |       pub fn measure_raw(&mut self) -> Result<u16, AdcError> {
[INFO] [stdout]     |              ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `DacError` is never used
[INFO] [stdout]    --> firmware/src/hal/analog.rs:180:10
[INFO] [stdout]     |
[INFO] [stdout] 180 | pub enum DacError {
[INFO] [stdout]     |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `AdcError` is never used
[INFO] [stdout]    --> firmware/src/hal/analog.rs:187:10
[INFO] [stdout]     |
[INFO] [stdout] 187 | pub enum AdcError {
[INFO] [stdout]     |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `fixed_div` is never used
[INFO] [stdout]   --> firmware/src/memory/mod.rs:42:8
[INFO] [stdout]    |
[INFO] [stdout] 42 | pub fn fixed_div(a: Fixed, b: Fixed) -> Fixed {
[INFO] [stdout]    |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `fixed_sqrt` is never used
[INFO] [stdout]   --> firmware/src/memory/mod.rs:52:8
[INFO] [stdout]    |
[INFO] [stdout] 52 | pub fn fixed_sqrt(x: Fixed) -> Fixed {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `conj` and `scale` are never used
[INFO] [stdout]    --> firmware/src/memory/mod.rs:106:12
[INFO] [stdout]     |
[INFO] [stdout]  86 | impl Complex {
[INFO] [stdout]     | ------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 106 |     pub fn conj(&self) -> Self {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 130 |     pub fn scale(&self, factor: Fixed) -> Self {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `MemoryBank` is never used
[INFO] [stdout]    --> firmware/src/memory/mod.rs:141:10
[INFO] [stdout]     |
[INFO] [stdout] 141 | pub enum MemoryBank {
[INFO] [stdout]     |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `to_id` and `from_id` are never used
[INFO] [stdout]    --> firmware/src/memory/mod.rs:157:12
[INFO] [stdout]     |
[INFO] [stdout] 155 | impl MemoryBank {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout] 156 |     /// Convert to numeric bank ID
[INFO] [stdout] 157 |     pub fn to_id(self) -> u16 {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 168 |     pub fn from_id(id: u16) -> Self {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `LOCAL_MATRIX_ELEMENTS` is never used
[INFO] [stdout]   --> firmware/src/memory/time_slicer.rs:27:11
[INFO] [stdout]    |
[INFO] [stdout] 27 | pub const LOCAL_MATRIX_ELEMENTS: usize = 65536; // 256KB for matrix data
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `from_float`, `to_complex`, and `from_complex` are never used
[INFO] [stdout]   --> firmware/src/memory/time_slicer.rs:45:12
[INFO] [stdout]    |
[INFO] [stdout] 38 | impl WElement {
[INFO] [stdout]    | ------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 45 |     pub fn from_float(re: f32, im: f32) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 53 |     pub fn to_complex(&self) -> Complex {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 58 |     pub fn from_complex(c: &Complex) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `is_empty` is never used
[INFO] [stdout]    --> firmware/src/memory/time_slicer.rs:234:12
[INFO] [stdout]     |
[INFO] [stdout] 101 | impl<const MAX_ELEMENTS: usize> SparseWMatrix<MAX_ELEMENTS> {
[INFO] [stdout]     | ----------------------------------------------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 234 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `psram_base` is never read
[INFO] [stdout]    --> firmware/src/memory/time_slicer.rs:246:5
[INFO] [stdout]     |
[INFO] [stdout] 240 | pub struct TimeSlicer<const MAX_ELEMENTS: usize> {
[INFO] [stdout]     |            ---------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 246 |     psram_base: u32,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `current_w`, `current_w_mut`, `jump_to`, `reset`, and `verify_norm_conservation` are never used
[INFO] [stdout]    --> firmware/src/memory/time_slicer.rs:270:12
[INFO] [stdout]     |
[INFO] [stdout] 251 | impl<const MAX_ELEMENTS: usize> TimeSlicer<MAX_ELEMENTS> {
[INFO] [stdout]     | -------------------------------------------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 270 |     pub fn current_w(&self) -> &SparseWMatrix<MAX_ELEMENTS> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 275 |     pub fn current_w_mut(&mut self) -> &mut SparseWMatrix<MAX_ELEMENTS> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 345 |     pub fn jump_to(&mut self, bank: TimeBankIndex) -> Result<(), ()> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 357 |     pub fn reset(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 364 |     pub fn verify_norm_conservation(&self, expected_norm_sq: i64, tolerance: i64) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `NUM_EIGENVALUES` is never used
[INFO] [stdout]   --> firmware/src/memory/eigen_manager.rs:15:11
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub const NUM_EIGENVALUES: usize = 10000;
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `verify` is never used
[INFO] [stdout]    --> firmware/src/memory/eigen_manager.rs:112:12
[INFO] [stdout]     |
[INFO] [stdout]  92 | impl EigenModeStorage {
[INFO] [stdout]     | --------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 112 |     pub fn verify(&self, measured: Fixed, tolerance: Fixed) -> bool {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `current_mode` is never read
[INFO] [stdout]    --> firmware/src/memory/eigen_manager.rs:128:5
[INFO] [stdout]     |
[INFO] [stdout] 124 | pub struct EigenManager {
[INFO] [stdout]     |            ------------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 128 |     current_mode: usize,
[INFO] [stdout]     |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_mode`, `project_to_spectral`, `reconstruct_from_spectral`, `spectral_energy`, and `iter_modes` are never used
[INFO] [stdout]    --> firmware/src/memory/eigen_manager.rs:174:12
[INFO] [stdout]     |
[INFO] [stdout] 131 | impl EigenManager {
[INFO] [stdout]     | ----------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 174 |     pub fn get_mode(&self, mode_index: usize) -> Option<&EigenModeStorage> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 181 |     pub fn project_to_spectral(&self, _w_matrix: &super::time_slicer::SparseWMatrix<100>)
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 195 |     pub fn reconstruct_from_spectral(&self, _coeffs: &[Complex])
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 203 |     pub fn spectral_energy(&self) -> Result<Vec<i64, STORAGE_MODES>, ()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 214 |     pub fn iter_modes(&self) -> impl Iterator<Item = &EigenModeStorage> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CONDUCTANCE_LEVELS` is never used
[INFO] [stdout]   --> firmware/src/memory/edge_cache.rs:15:11
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub const CONDUCTANCE_LEVELS: u8 = 4;
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `LEVEL_THRESHOLDS` is never used
[INFO] [stdout]   --> firmware/src/memory/edge_cache.rs:19:11
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub const LEVEL_THRESHOLDS: [u16; 4] = [
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `mark_dirty`, `mark_clean`, and `invalidate` are never used
[INFO] [stdout]    --> firmware/src/memory/edge_cache.rs:105:12
[INFO] [stdout]     |
[INFO] [stdout]  58 | impl EdgeCacheEntry {
[INFO] [stdout]     | ------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 105 |     pub fn mark_dirty(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 110 |     pub fn mark_clean(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 115 |     pub fn invalidate(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `invalidations` is never read
[INFO] [stdout]    --> firmware/src/memory/edge_cache.rs:142:9
[INFO] [stdout]     |
[INFO] [stdout] 134 | pub struct CacheStats {
[INFO] [stdout]     |            ---------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 142 |     pub invalidations: u32,
[INFO] [stdout]     |         ^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `CacheStats` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `hit_rate` and `reset` are never used
[INFO] [stdout]    --> firmware/src/memory/edge_cache.rs:147:12
[INFO] [stdout]     |
[INFO] [stdout] 145 | impl CacheStats {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] 146 |     /// Calculate hit rate as percentage
[INFO] [stdout] 147 |     pub fn hit_rate(&self) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 157 |     pub fn reset(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> firmware/src/memory/edge_cache.rs:180:12
[INFO] [stdout]     |
[INFO] [stdout] 162 | impl<const NUM_ENTRIES: usize> EdgeCache<NUM_ENTRIES> {
[INFO] [stdout]     | ----------------------------------------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 180 |     pub fn timestamp(&self) -> u32 {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 185 |     pub fn tick(&mut self) {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 246 |     pub fn invalidate(&mut self, node_id: u16) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 260 |     pub fn flush(&mut self) -> u32 {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 280 |     pub fn reset_stats(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 285 |     pub fn valid_entries(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 290 |     pub fn dirty_entries(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `EdgeCacheBulk` is never constructed
[INFO] [stdout]    --> firmware/src/memory/edge_cache.rs:302:12
[INFO] [stdout]     |
[INFO] [stdout] 302 | pub struct EdgeCacheBulk<const NUM_ENTRIES: usize> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> firmware/src/memory/edge_cache.rs:313:12
[INFO] [stdout]     |
[INFO] [stdout] 311 | impl<const NUM_ENTRIES: usize> EdgeCacheBulk<NUM_ENTRIES> {
[INFO] [stdout]     | --------------------------------------------------------- associated items in this implementation
[INFO] [stdout] 312 |     /// Create a new bulk cache interface
[INFO] [stdout] 313 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 322 |     pub fn queue_write(&mut self, node_id: u16, data: u8) -> Result<(), ()> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 327 |     pub fn queue_prefetch(&mut self, node_id: u16) -> Result<(), ()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 332 |     pub fn flush_writes(&mut self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 344 |     pub fn execute_prefetches(&mut self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 357 |     pub fn cache(&self) -> &EdgeCache<NUM_ENTRIES> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 362 |     pub fn cache_mut(&mut self) -> &mut EdgeCache<NUM_ENTRIES> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `GRID_SIZE` is never used
[INFO] [stdout]   --> firmware/src/compute/mod.rs:23:11
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub const GRID_SIZE: usize = 100;
[INFO] [stdout]    |           ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `NUM_NEAREST_NEIGHBORS` is never used
[INFO] [stdout]   --> firmware/src/compute/mod.rs:26:11
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub const NUM_NEAREST_NEIGHBORS: usize = 4;
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ALPHA_DEAD_ZONE` is never used
[INFO] [stdout]   --> firmware/src/compute/mod.rs:33:11
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub const ALPHA_DEAD_ZONE: Fixed = 0x0000CCCD; // ~0.8 in fixed-point
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DEFAULT_ALPHA` is never used
[INFO] [stdout]   --> firmware/src/compute/mod.rs:36:11
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub const DEFAULT_ALPHA: Fixed = 0x00002666; // 0.15 in fixed-point
[INFO] [stdout]    |           ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `real`, `complex`, `to_complex`, `conj`, and `is_diagonal` are never used
[INFO] [stdout]   --> firmware/src/compute/mod.rs:61:12
[INFO] [stdout]    |
[INFO] [stdout] 54 | impl SparseElement {
[INFO] [stdout]    | ------------------ associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 61 |     pub fn real(row: MatrixIndex, col: MatrixIndex, re: Fixed) -> Self {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 66 |     pub fn complex(row: MatrixIndex, col: MatrixIndex, c: &Complex) -> Self {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 76 |     pub fn to_complex(&self) -> Complex {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 81 |     pub fn conj(&self) -> Self {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 91 |     pub fn is_diagonal(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> firmware/src/compute/mod.rs:131:12
[INFO] [stdout]     |
[INFO] [stdout] 115 | impl<const MAX_ELEM: usize> SparseMatrix<MAX_ELEM> {
[INFO] [stdout]     | -------------------------------------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 131 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 182 |     pub fn get_ref(&self, row: MatrixIndex, col: MatrixIndex) -> Option<&SparseElement> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 221 |     pub fn row_iter(&self, row: MatrixIndex) -> impl Iterator<Item = &SparseElement> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 226 |     pub fn diagonal_iter(&self) -> impl Iterator<Item = &SparseElement> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 241 |     pub fn frobenius_norm(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 246 |     pub fn transpose(&self) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 260 |     pub fn sparse_mul<const RHS_MAX: usize>(
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 284 |     pub fn is_hermitian(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 305 |     pub fn matvec(&self, x: &[Complex], y: &mut [Complex]) -> usize {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 335 |     pub fn to_dense(&self) -> heapless::Vec<Complex, 4096> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `LaplacianMatrix` is never used
[INFO] [stdout]    --> firmware/src/compute/mod.rs:367:10
[INFO] [stdout]     |
[INFO] [stdout] 367 | pub type LaplacianMatrix<const MAX_ELEM: usize> = SparseMatrix<MAX_ELEM>;
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `UnitaryMatrixType` is never used
[INFO] [stdout]    --> firmware/src/compute/mod.rs:368:10
[INFO] [stdout]     |
[INFO] [stdout] 368 | pub type UnitaryMatrixType<const MAX_ELEM: usize> = SparseMatrix<MAX_ELEM>;
[INFO] [stdout]     |          ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `WMatrixType` is never used
[INFO] [stdout]    --> firmware/src/compute/mod.rs:369:10
[INFO] [stdout]     |
[INFO] [stdout] 369 | pub type WMatrixType<const MAX_ELEM: usize> = SparseMatrix<MAX_ELEM>;
[INFO] [stdout]     |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `EdgeType` is never used
[INFO] [stdout]   --> firmware/src/compute/laplacian.rs:15:10
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub enum EdgeType {
[INFO] [stdout]    |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Edge` is never constructed
[INFO] [stdout]   --> firmware/src/compute/laplacian.rs:24:12
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub struct Edge {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `nearest_neighbor`, `long_range`, `transpose`, and `is_self_loop` are never used
[INFO] [stdout]   --> firmware/src/compute/laplacian.rs:37:12
[INFO] [stdout]    |
[INFO] [stdout] 35 | impl Edge {
[INFO] [stdout]    | --------- associated items in this implementation
[INFO] [stdout] 36 |     /// Create a new edge
[INFO] [stdout] 37 |     pub fn new(from: MatrixIndex, to: MatrixIndex, edge_type: EdgeType, weight: Fixed) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 42 |     pub fn nearest_neighbor(from: MatrixIndex, to: MatrixIndex) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 47 |     pub fn long_range(from: MatrixIndex, to: MatrixIndex, weight: Fixed) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 52 |     pub fn transpose(&self) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 62 |     pub fn is_self_loop(&self) -> bool {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `num_neighbors` and `clear` are never used
[INFO] [stdout]    --> firmware/src/compute/laplacian.rs:131:12
[INFO] [stdout]     |
[INFO] [stdout]  77 | impl AdjacencyList {
[INFO] [stdout]     | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 131 |     pub fn num_neighbors(&self, node: MatrixIndex) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 159 |     pub fn clear(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `build_normalized` is never used
[INFO] [stdout]    --> firmware/src/compute/laplacian.rs:314:12
[INFO] [stdout]     |
[INFO] [stdout] 280 | impl LaplacianBuilder {
[INFO] [stdout]     | --------------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 314 |     pub fn build_normalized<const MAX_ELEM: usize>(
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ALPHA_MIN` is never used
[INFO] [stdout]   --> firmware/src/compute/evolution.rs:24:11
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub const ALPHA_MIN: Fixed = 0;           // 0
[INFO] [stdout]    |           ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ALPHA_MAX` is never used
[INFO] [stdout]   --> firmware/src/compute/evolution.rs:25:11
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub const ALPHA_MAX: Fixed = 0x00020000;  // 2.0 in fixed-point
[INFO] [stdout]    |           ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_LANCZOS_ITER` is never used
[INFO] [stdout]   --> firmware/src/compute/evolution.rs:30:11
[INFO] [stdout]    |
[INFO] [stdout] 30 | pub const MAX_LANCZOS_ITER: usize = 20;
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `evolve_step`, `compute_lwl_product`, and `evolve_euler` are never used
[INFO] [stdout]    --> firmware/src/compute/evolution.rs:105:12
[INFO] [stdout]     |
[INFO] [stdout]  45 | impl EvolutionEngine {
[INFO] [stdout]     | -------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 105 |     pub fn evolve_step<const MAX_ELEM: usize>(
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 157 |     fn compute_lwl_product<const MAX_ELEM: usize>(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 194 |     pub fn evolve_euler<const MAX_ELEM: usize>(
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `TimeState` is never used
[INFO] [stdout]   --> firmware/src/sync/mod.rs:14:10
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub enum TimeState {
[INFO] [stdout]    |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `CorrelationStrength` is never used
[INFO] [stdout]   --> firmware/src/sync/mod.rs:22:10
[INFO] [stdout]    |
[INFO] [stdout] 22 | pub type CorrelationStrength = Fixed;
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_CORRELATION` is never used
[INFO] [stdout]   --> firmware/src/sync/mod.rs:25:11
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub const MAX_CORRELATION: Fixed = FIXED_ONE;
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ENTANGLEMENT_THRESHOLD` is never used
[INFO] [stdout]   --> firmware/src/sync/mod.rs:28:11
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub const ENTANGLEMENT_THRESHOLD: Fixed = 0x0000B333; // ~0.7
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `NUM_TIME_SLICES` is never used
[INFO] [stdout]   --> firmware/src/sync/block_universe.rs:20:11
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub const NUM_TIME_SLICES: usize = 3;
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PAST` is never used
[INFO] [stdout]   --> firmware/src/sync/block_universe.rs:23:11
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub const PAST: usize = 0;
[INFO] [stdout]    |           ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PRESENT` is never used
[INFO] [stdout]   --> firmware/src/sync/block_universe.rs:24:11
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub const PRESENT: usize = 1;
[INFO] [stdout]    |           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `FUTURE` is never used
[INFO] [stdout]   --> firmware/src/sync/block_universe.rs:25:11
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub const FUTURE: usize = 2;
[INFO] [stdout]    |           ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `CorrelationMatrix` is never used
[INFO] [stdout]   --> firmware/src/sync/block_universe.rs:29:10
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub type CorrelationMatrix = [[Fixed; NUM_TIME_SLICES]; NUM_TIME_SLICES];
[INFO] [stdout]    |          ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `BlockUniverse` is never constructed
[INFO] [stdout]   --> firmware/src/sync/block_universe.rs:33:12
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub struct BlockUniverse {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> firmware/src/sync/block_universe.rs:48:12
[INFO] [stdout]     |
[INFO] [stdout]  46 | impl BlockUniverse {
[INFO] [stdout]     | ------------------ associated items in this implementation
[INFO] [stdout]  47 |     /// Create a new block universe with no correlations
[INFO] [stdout]  48 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  60 |     pub fn initialize_ghz(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  79 |     pub fn correlation(&self, slice_a: usize, slice_b: usize) -> Fixed {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  88 |     pub fn set_correlation(&mut self, slice_a: usize, slice_b: usize, value: Fixed) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  96 |     pub fn is_entangled(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 106 |     pub fn synchronize(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 122 |     pub fn evolve_correlations(&mut self, _alpha: Fixed) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 140 |     pub fn ghz_fidelity(&self) -> Fixed {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 150 |     pub fn reset(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `BlockUniverseSync` is never constructed
[INFO] [stdout]    --> firmware/src/sync/block_universe.rs:163:12
[INFO] [stdout]     |
[INFO] [stdout] 163 | pub struct BlockUniverseSync {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `initialize_ghz`, `synchronize`, `is_synchronized`, and `status` are never used
[INFO] [stdout]    --> firmware/src/sync/block_universe.rs:176:12
[INFO] [stdout]     |
[INFO] [stdout] 174 | impl BlockUniverseSync {
[INFO] [stdout]     | ---------------------- associated items in this implementation
[INFO] [stdout] 175 |     /// Create a new block universe synchronizer
[INFO] [stdout] 176 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 186 |     pub fn initialize_ghz(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 192 |     pub fn synchronize(&mut self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 203 |     pub fn is_synchronized(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 208 |     pub fn status(&self) -> (bool, Fixed, u32) {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `CommandId` is never used
[INFO] [stdout]   --> firmware/src/api/mod.rs:12:10
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub enum CommandId {
[INFO] [stdout]    |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `from_u8` is never used
[INFO] [stdout]   --> firmware/src/api/mod.rs:55:12
[INFO] [stdout]    |
[INFO] [stdout] 53 | impl CommandId {
[INFO] [stdout]    | -------------- associated function in this implementation
[INFO] [stdout] 54 |     /// Convert from raw byte
[INFO] [stdout] 55 |     pub fn from_u8(value: u8) -> Option<Self> {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `StatusCode` is never used
[INFO] [stdout]   --> firmware/src/api/mod.rs:85:10
[INFO] [stdout]    |
[INFO] [stdout] 85 | pub enum StatusCode {
[INFO] [stdout]    |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CommandPacket` is never constructed
[INFO] [stdout]    --> firmware/src/api/mod.rs:110:12
[INFO] [stdout]     |
[INFO] [stdout] 110 | pub struct CommandPacket {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `with_data`, `serialize`, and `deserialize` are never used
[INFO] [stdout]    --> firmware/src/api/mod.rs:125:12
[INFO] [stdout]     |
[INFO] [stdout] 123 | impl CommandPacket {
[INFO] [stdout]     | ------------------ associated items in this implementation
[INFO] [stdout] 124 |     /// Create a new command packet
[INFO] [stdout] 125 |     pub fn new(cmd: CommandId, param1: u8, param2: u8) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 136 |     pub fn with_data(mut self, data: &[u8]) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 144 |     pub fn serialize(&self, buffer: &mut [u8]) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 164 |     pub fn deserialize(buffer: &[u8]) -> Option<Self> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ResponsePacket` is never constructed
[INFO] [stdout]    --> firmware/src/api/mod.rs:191:12
[INFO] [stdout]     |
[INFO] [stdout] 191 | pub struct ResponsePacket {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `ok`, `error`, `with_data`, `with_u32`, `with_u16`, and `serialize` are never used
[INFO] [stdout]    --> firmware/src/api/mod.rs:202:12
[INFO] [stdout]     |
[INFO] [stdout] 200 | impl ResponsePacket {
[INFO] [stdout]     | ------------------- associated items in this implementation
[INFO] [stdout] 201 |     /// Create a success response
[INFO] [stdout] 202 |     pub fn ok() -> Self {
[INFO] [stdout]     |            ^^
[INFO] [stdout] ...
[INFO] [stdout] 211 |     pub fn error(code: StatusCode) -> Self {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 220 |     pub fn with_data(mut self, data: &[u8]) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 228 |     pub fn with_u32(self, value: u32) -> Self {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 233 |     pub fn with_u16(self, value: u16) -> Self {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 238 |     pub fn serialize(&self) -> [u8; 8] {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ApiHandler` is never constructed
[INFO] [stdout]    --> firmware/src/api/mod.rs:248:12
[INFO] [stdout]     |
[INFO] [stdout] 248 | pub struct ApiHandler {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `HandlerState` is never used
[INFO] [stdout]    --> firmware/src/api/mod.rs:264:6
[INFO] [stdout]     |
[INFO] [stdout] 264 | enum HandlerState {
[INFO] [stdout]     |      ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> firmware/src/api/mod.rs:273:12
[INFO] [stdout]     |
[INFO] [stdout] 271 | impl ApiHandler {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout] 272 |     /// Create a new API handler
[INFO] [stdout] 273 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 286 |     pub fn rx_byte(&mut self, byte: u8) -> bool {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 309 |     pub fn get_command(&self) -> Option<CommandPacket> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 314 |     pub fn start_tx(&mut self, response: &ResponsePacket) {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 323 |     pub fn tx_byte(&mut self) -> Option<u8> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 339 |     pub fn is_idle(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 344 |     pub fn reset(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CommandProcessor` is never constructed
[INFO] [stdout]    --> firmware/src/api/mod.rs:360:12
[INFO] [stdout]     |
[INFO] [stdout] 360 | pub struct CommandProcessor;
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated functions are never used
[INFO] [stdout]    --> firmware/src/api/mod.rs:364:12
[INFO] [stdout]     |
[INFO] [stdout] 362 | impl CommandProcessor {
[INFO] [stdout]     | --------------------- associated functions in this implementation
[INFO] [stdout] 363 |     /// Process a command and return a response
[INFO] [stdout] 364 |     pub fn process(cmd: &CommandPacket) -> ResponsePacket {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 388 |     fn handle_get_status() -> ResponsePacket {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 404 |     fn handle_reset() -> ResponsePacket {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 409 |     fn handle_read(cmd: &CommandPacket) -> ResponsePacket {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 421 |     fn handle_write(cmd: &CommandPacket) -> ResponsePacket {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 427 |     fn handle_apply_phase(cmd: &CommandPacket) -> ResponsePacket {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 442 |     fn handle_measure_conductance(cmd: &CommandPacket) -> ResponsePacket {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 452 |     fn handle_evolve(cmd: &CommandPacket) -> ResponsePacket {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 463 |     fn handle_sync_time() -> ResponsePacket {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 468 |     fn handle_set_alpha(cmd: &CommandPacket) -> ResponsePacket {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 477 |     fn handle_get_time_bank() -> ResponsePacket {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 483 |     fn handle_jump_time_bank(cmd: &CommandPacket) -> ResponsePacket {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 490 |     fn handle_read_eigen(cmd: &CommandPacket) -> ResponsePacket {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 497 |     fn handle_write_eigen(cmd: &CommandPacket) -> ResponsePacket {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 504 |     fn handle_read_edge_cache(cmd: &CommandPacket) -> ResponsePacket {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 511 |     fn handle_write_edge_cache(cmd: &CommandPacket) -> ResponsePacket {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 520 |     fn handle_batch_read(cmd: &CommandPacket) -> ResponsePacket {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 527 |     fn handle_batch_write(cmd: &CommandPacket) -> ResponsePacket {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Checking arcturus-cli v0.1.0 (/opt/rustwide/workdir/pc/arcturus_cli)
[INFO] [stderr]     Checking arcturus-compiler v0.1.0 (/opt/rustwide/workdir/pc/arcturus_compiler)
[INFO] [stdout] warning: field `config` is never read
[INFO] [stdout]   --> pc/arcturus_compiler/src/lib.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub struct ModelCompiler {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] 25 |     config: CompilerConfig,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `config` is never read
[INFO] [stdout]   --> pc/arcturus_compiler/src/lib.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub struct ModelCompiler {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] 25 |     config: CompilerConfig,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `config` is never read
[INFO] [stdout]   --> pc/arcturus_compiler/src/lib.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub struct ModelCompiler {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] 25 |     config: CompilerConfig,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr] warning: unused dependency `serde`
[INFO] [stderr]   --> pc/arcturus_cli/Cargo.toml:17:1
[INFO] [stderr]    |
[INFO] [stderr] 17 | serde = { workspace = true }
[INFO] [stderr]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `cargo::unused_dependencies` is set to `warn` by default
[INFO] [stderr] help: consider removing the dependency on `serde`
[INFO] [stderr] warning: unused dependency `serde_json`
[INFO] [stderr]   --> pc/arcturus_cli/Cargo.toml:18:1
[INFO] [stderr]    |
[INFO] [stderr] 18 | serde_json = { workspace = true }
[INFO] [stderr]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr] help: consider removing the dependency on `serde_json`
[INFO] [stderr] warning: unused dependency `thiserror`
[INFO] [stderr]   --> pc/arcturus_cli/Cargo.toml:15:1
[INFO] [stderr]    |
[INFO] [stderr] 15 | thiserror = { workspace = true }
[INFO] [stderr]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr] help: consider removing the dependency on `thiserror`
[INFO] [stderr] warning: unused dependency `tokio`
[INFO] [stderr]   --> pc/arcturus_cli/Cargo.toml:19:1
[INFO] [stderr]    |
[INFO] [stderr] 19 | tokio = { version = "1.35", features = ["full"] }
[INFO] [stderr]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr] help: consider removing the dependency on `tokio`
[INFO] [stderr] warning: `arcturus-cli` (manifest) generated 4 warnings
[INFO] [stderr] warning: unused dependency `embedded-alloc`
[INFO] [stderr]   --> firmware/Cargo.toml:19:15
[INFO] [stderr]    |
[INFO] [stderr] 19 | [dependencies.embedded-alloc]
[INFO] [stderr]    |               ^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `cargo::unused_dependencies` is set to `warn` by default
[INFO] [stderr] help: consider removing the dependency on `embedded-alloc`
[INFO] [stderr] warning: unused dependency `nb`
[INFO] [stderr]   --> firmware/Cargo.toml:10:1
[INFO] [stderr]    |
[INFO] [stderr] 10 | nb = { workspace = true }
[INFO] [stderr]    | ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr] help: consider removing the dependency on `nb`
[INFO] [stderr] warning: unused dependency `panic-halt`
[INFO] [stderr]   --> firmware/Cargo.toml:11:1
[INFO] [stderr]    |
[INFO] [stderr] 11 | panic-halt = { workspace = true }
[INFO] [stderr]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr] help: consider removing the dependency on `panic-halt`
[INFO] [stderr] warning: unused dependency `riscv-rt`
[INFO] [stderr]   --> firmware/Cargo.toml:17:1
[INFO] [stderr]    |
[INFO] [stderr] 17 | riscv-rt = { workspace = true }
[INFO] [stderr]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr] help: consider removing the dependency on `riscv-rt`
[INFO] [stderr] warning: `arcturus-firmware` (manifest) generated 4 warnings
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 52.08s
[INFO] running `Command { std: "docker" "inspect" "ce9a5bb9a6dd9f0cc7776ec4f21a52e59bacc4027261cbdef88abca703ea4368", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "ce9a5bb9a6dd9f0cc7776ec4f21a52e59bacc4027261cbdef88abca703ea4368", kill_on_drop: false }`
[INFO] [stdout] ce9a5bb9a6dd9f0cc7776ec4f21a52e59bacc4027261cbdef88abca703ea4368
