diff --git a/Readme.md b/Readme.md index 9cbf097..8659877 100644 --- a/Readme.md +++ b/Readme.md @@ -52,14 +52,19 @@ rustup component add --toolchain nightly rustfmt ### Build and Flash In default configuration only signal phases (SPAT) data is displayed for the upcoming intersection. -Additional features are available though feature flags: +Additional features are available through feature flags: - `esp`: Run on ESP (required as feature flag to enable unit tests on host) - `std`: Run on system with `std` library -- `spat`: Enable signal phase (and intersection map) data +- `spat`: Enable signal phase (and intersection map) data +- `spat_debug`: Enable additional debug information for the SPAT/ GLOSA use case - `denm`: Enable DENMs - `cam`: Enable CAMs +Officially supported feature combinations are: +- `esp,spat,gnss,screen` (default features) +- To be implemented: No GNSS and screen when BLE/ UART interface is implemented + Connect your ESP32-C5 and run: ``` diff --git a/feat-permut.sh b/feat-permut.sh new file mode 100755 index 0000000..cd20431 --- /dev/null +++ b/feat-permut.sh @@ -0,0 +1,69 @@ +#!/bin/bash +## Build/ Test/ Clippy all supported feature permutations +set -eu + +mode=${1:-help} +wasm_target="--chrome --headless" +extended=${2:-false} + + +features_base=( + #cam,denm,uart + spat,gnss,screen +) +features_more=( + spat,gnss,screen,cam,denm +) +features_test=( + spat + spat,cam,denm +) + + +runBuild () { + for feat in "${features[@]}"; do + echo "cargo build for $feat ..." + cargo build --release --no-default-features -F esp,$feat + done +} + +runTest () { + for feat in "${features_test[@]}"; do + echo "cargo test for $feat ..." + cargo test --target host-tuple --bin test --no-default-features -F std,$feat + done +} + +runClippy () { + for feat in "${features[@]}"; do + echo "clippy for $feat ..." + cargo clippy --no-default-features -F esp,$feat -- -Wclippy::pedantic + done +} + +if [ $extended == "--more" ]; then + echo "running with extended feature list" + features=( "${features_base[@]}" "${features_more[@]}" ) +else + echo "running standard feature list" + features=( "${features_base[@]}" ) +fi + +case $mode in +build) + runBuild + ;; +clippy) + runClippy + ;; +test) + runTest + ;; +all) + runBuild + runClippy + runTest + ;; +*) + echo "Usage: $0 [build | clippy | test | all] [--more]" +esac diff --git a/src/applogic/mod.rs b/src/applogic/mod.rs index bf3252a..98d100f 100644 --- a/src/applogic/mod.rs +++ b/src/applogic/mod.rs @@ -6,7 +6,7 @@ use alloc::rc::Rc; use alloc::vec::Vec; use log::info; -#[cfg(any(feature = "gnss", feature = "spat"))] +#[cfg(feature = "spat")] use log::warn; #[cfg(feature = "spat")] use log::{debug, error}; @@ -688,13 +688,13 @@ mod tests { let own_pos_passed = geo_types::Point::new(9.977217, 53.5560602); let own_heading = 90.; - state.heading_deg = Some(own_heading); + state.pos.heading_deg = Some(own_heading); - state.position = own_pos_infront; + state.pos.position = own_pos_infront; state.run_glosa(); assert!(matches!(state.glosa_state, GlosaState::Idle)); - state.position = own_pos_inside; + state.pos.position = own_pos_inside; state.run_glosa(); assert!(matches!(state.glosa_state, GlosaState::Locked(_))); if let GlosaState::Locked(info) = &state.glosa_state { @@ -702,7 +702,7 @@ mod tests { assert!(info.lane_id == 1 || info.lane_id == 2); } - state.position = own_pos_inside; + state.pos.position = own_pos_inside; state.run_glosa(); assert!(matches!(state.glosa_state, GlosaState::Locked(_))); if let GlosaState::Locked(info) = &state.glosa_state { @@ -710,7 +710,7 @@ mod tests { assert!(info.lane_id == 1 || info.lane_id == 2); } - state.position = own_pos_passed; + state.pos.position = own_pos_passed; state.run_glosa(); assert!(matches!(state.glosa_state, GlosaState::Idle)); }