Merge branch 'master' into rj/visibility-cleanup

* master:
  Removing spurious settings updates
This commit is contained in:
Robert Jördens 2021-05-26 16:04:18 +02:00
commit bf92f6209a
3 changed files with 25 additions and 9 deletions

View File

@ -11,9 +11,10 @@ use stabilizer::{
Dac1Output, DacCode, DigitalInput0, DigitalInput1, InputPin, Dac1Output, DacCode, DigitalInput0, DigitalInput1, InputPin,
SystemTimer, AFE0, AFE1, SystemTimer, AFE0, AFE1,
}, },
net::{Miniconf, NetworkUsers, Telemetry, TelemetryBuffer, UpdateState}, net::{Miniconf, NetworkState, NetworkUsers, Telemetry, TelemetryBuffer},
}; };
const SCALE: f32 = i16::MAX as _; const SCALE: f32 = i16::MAX as _;
// The number of cascaded IIR biquads per channel. Select 1 or 2! // The number of cascaded IIR biquads per channel. Select 1 or 2!
@ -170,8 +171,11 @@ const APP: () = {
fn idle(mut c: idle::Context) -> ! { fn idle(mut c: idle::Context) -> ! {
loop { loop {
match c.resources.network.lock(|net| net.update()) { match c.resources.network.lock(|net| net.update()) {
UpdateState::Updated => c.spawn.settings_update().unwrap(), NetworkState::SettingsChanged => {
UpdateState::NoChange => cortex_m::asm::wfi(), c.spawn.settings_update().unwrap()
}
NetworkState::Updated => {}
NetworkState::NoChange => cortex_m::asm::wfi(),
} }
} }
} }

View File

@ -11,7 +11,7 @@ use stabilizer::{
Dac0Output, Dac1Output, DacCode, DigitalInput0, DigitalInput1, Dac0Output, Dac1Output, DacCode, DigitalInput0, DigitalInput1,
InputPin, InputStamper, SystemTimer, AFE0, AFE1, InputPin, InputStamper, SystemTimer, AFE0, AFE1,
}, },
net::{Miniconf, NetworkUsers, Telemetry, TelemetryBuffer, UpdateState}, net::{Miniconf, NetworkState, NetworkUsers, Telemetry, TelemetryBuffer},
}; };
// A constant sinusoid to send on the DAC output. // A constant sinusoid to send on the DAC output.
@ -243,8 +243,11 @@ const APP: () = {
fn idle(mut c: idle::Context) -> ! { fn idle(mut c: idle::Context) -> ! {
loop { loop {
match c.resources.network.lock(|net| net.update()) { match c.resources.network.lock(|net| net.update()) {
UpdateState::Updated => c.spawn.settings_update().unwrap(), NetworkState::SettingsChanged => {
UpdateState::NoChange => cortex_m::asm::wfi(), c.spawn.settings_update().unwrap()
}
NetworkState::Updated => {}
NetworkState::NoChange => cortex_m::asm::wfi(),
} }
} }
} }

View File

@ -32,6 +32,12 @@ pub enum UpdateState {
Updated, Updated,
} }
#[derive(Copy, Clone, PartialEq)]
pub enum NetworkState {
SettingsChanged,
Updated,
NoChange,
}
/// A structure of Stabilizer's default network users. /// A structure of Stabilizer's default network users.
pub struct NetworkUsers<S: Default + Clone + Miniconf, T: Serialize> { pub struct NetworkUsers<S: Default + Clone + Miniconf, T: Serialize> {
pub miniconf: MiniconfClient<S>, pub miniconf: MiniconfClient<S>,
@ -97,15 +103,18 @@ where
/// ///
/// # Returns /// # Returns
/// An indication if any of the network users indicated a state change. /// An indication if any of the network users indicated a state change.
pub fn update(&mut self) -> UpdateState { pub fn update(&mut self) -> NetworkState {
// Poll for incoming data. // Poll for incoming data.
let poll_result = self.processor.update(); let poll_result = match self.processor.update() {
UpdateState::NoChange => NetworkState::NoChange,
UpdateState::Updated => NetworkState::Updated,
};
// Update the MQTT clients. // Update the MQTT clients.
self.telemetry.update(); self.telemetry.update();
match self.miniconf.update() { match self.miniconf.update() {
UpdateState::Updated => UpdateState::Updated, UpdateState::Updated => NetworkState::SettingsChanged,
UpdateState::NoChange => poll_result, UpdateState::NoChange => poll_result,
} }
} }