From b3c7a450f5bc4fb7aea7e50a66813d4f2bd707d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20J=C3=B6rdens?= Date: Mon, 17 May 2021 09:29:43 +0200 Subject: [PATCH 1/4] deps: adjust mcp23017 git after merging --- Cargo.lock | 2 +- Cargo.toml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0621cca..274b2bb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -391,7 +391,7 @@ dependencies = [ [[package]] name = "mcp23017" version = "0.1.1" -source = "git+https://github.com/mrd0ll4r/mcp23017.git?rev=61933f857a#61933f857abe5a837800493a5f58e91a3c9435ec" +source = "git+https://github.com/lucazulian/mcp23017.git?rev=523d71d#523d71dcb11fc0ea4bd9385ef2527ae7a7eee987" dependencies = [ "embedded-hal", ] diff --git a/Cargo.toml b/Cargo.toml index fbbb87b..790363a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -51,8 +51,8 @@ git = "https://github.com/quartiq/rtt-logger.git" rev = "70b0eb5" [dependencies.mcp23017] -git = "https://github.com/mrd0ll4r/mcp23017.git" -rev = "61933f857a" +git = "https://github.com/lucazulian/mcp23017.git" +rev = "523d71d" [dependencies.stm32h7xx-hal] features = ["stm32h743v", "rt", "unproven", "ethernet", "quadspi"] From 23a93e913511c2d158f9a2c66f64933322ca9f1e Mon Sep 17 00:00:00 2001 From: Ryan Summers Date: Wed, 26 May 2021 13:05:54 +0200 Subject: [PATCH 2/4] Removing spurious settings updates --- src/bin/dual-iir.rs | 9 ++++++--- src/bin/lockin.rs | 9 ++++++--- src/net/mod.rs | 15 ++++++++++++--- 3 files changed, 24 insertions(+), 9 deletions(-) diff --git a/src/bin/dual-iir.rs b/src/bin/dual-iir.rs index 29eb474..012cdde 100644 --- a/src/bin/dual-iir.rs +++ b/src/bin/dual-iir.rs @@ -13,7 +13,7 @@ use hardware::{ DigitalInput0, DigitalInput1, InputPin, SystemTimer, AFE0, AFE1, }; -use net::{NetworkUsers, Telemetry, TelemetryBuffer, UpdateState}; +use net::{NetworkState, NetworkUsers, Telemetry, TelemetryBuffer}; const SCALE: f32 = i16::MAX as _; @@ -171,8 +171,11 @@ const APP: () = { fn idle(mut c: idle::Context) -> ! { loop { match c.resources.network.lock(|net| net.update()) { - UpdateState::Updated => c.spawn.settings_update().unwrap(), - UpdateState::NoChange => cortex_m::asm::wfi(), + NetworkState::SettingsChanged => { + c.spawn.settings_update().unwrap() + } + NetworkState::Updated => {} + NetworkState::NoChange => cortex_m::asm::wfi(), } } } diff --git a/src/bin/lockin.rs b/src/bin/lockin.rs index a187767..7200eb4 100644 --- a/src/bin/lockin.rs +++ b/src/bin/lockin.rs @@ -17,7 +17,7 @@ use stabilizer::hardware::{ }; use miniconf::Miniconf; -use net::{NetworkUsers, Telemetry, TelemetryBuffer, UpdateState}; +use net::{NetworkState, NetworkUsers, Telemetry, TelemetryBuffer}; // A constant sinusoid to send on the DAC output. // Full-scale gives a +/- 10.24V amplitude waveform. Scale it down to give +/- 1V. @@ -248,8 +248,11 @@ const APP: () = { fn idle(mut c: idle::Context) -> ! { loop { match c.resources.network.lock(|net| net.update()) { - UpdateState::Updated => c.spawn.settings_update().unwrap(), - UpdateState::NoChange => cortex_m::asm::wfi(), + NetworkState::SettingsChanged => { + c.spawn.settings_update().unwrap() + } + NetworkState::Updated => {} + NetworkState::NoChange => cortex_m::asm::wfi(), } } } diff --git a/src/net/mod.rs b/src/net/mod.rs index 38499ca..64c9401 100644 --- a/src/net/mod.rs +++ b/src/net/mod.rs @@ -33,6 +33,12 @@ pub enum UpdateState { Updated, } +#[derive(Copy, Clone, PartialEq)] +pub enum NetworkState { + SettingsChanged, + Updated, + NoChange, +} /// A structure of Stabilizer's default network users. pub struct NetworkUsers { pub miniconf: MiniconfClient, @@ -98,15 +104,18 @@ where /// /// # Returns /// 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. - 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. self.telemetry.update(); match self.miniconf.update() { - UpdateState::Updated => UpdateState::Updated, + UpdateState::Updated => NetworkState::SettingsChanged, UpdateState::NoChange => poll_result, } } From f10bce709fcf486cdd7da7fe34127e99521f7ba3 Mon Sep 17 00:00:00 2001 From: Ryan Summers Date: Thu, 27 May 2021 13:42:52 +0200 Subject: [PATCH 3/4] Updating the embedded-nal --- Cargo.lock | 62 ++++++++++++++++++++++++-------------- Cargo.toml | 4 +-- src/net/miniconf_client.rs | 9 +++--- src/net/shared.rs | 14 ++++----- src/net/telemetry.rs | 6 ++-- 5 files changed, 55 insertions(+), 40 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 274b2bb..5402ed9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -42,6 +42,15 @@ dependencies = [ "embedded-hal", ] +[[package]] +name = "atomic-polyfill" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30302dda7a66f8c55932ebf208f7def840743ff64d495e9ceffcd97c18f11d39" +dependencies = [ + "cortex-m 0.7.2", +] + [[package]] name = "autocfg" version = "1.0.1" @@ -240,11 +249,11 @@ dependencies = [ [[package]] name = "embedded-nal" -version = "0.1.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae46eb1b02de5a76d9d0ea21d657ff5b0ad2cc47f3a7723608227b1dd1b3eb18" +checksum = "db9efecb57ab54fa918730f2874d7d37647169c50fa1357fecb81abee840b113" dependencies = [ - "heapless 0.5.6", + "heapless 0.7.1", "nb 1.0.0", "no-std-net", ] @@ -317,24 +326,21 @@ dependencies = [ "byteorder", ] +[[package]] +name = "hash32" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67" +dependencies = [ + "byteorder", +] + [[package]] name = "hashbrown" version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" -[[package]] -name = "heapless" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74911a68a1658cfcfb61bc0ccfbd536e3b6e906f8c2f7883ee50157e3e2184f1" -dependencies = [ - "as-slice", - "generic-array 0.13.3", - "hash32", - "stable_deref_trait", -] - [[package]] name = "heapless" version = "0.6.1" @@ -343,11 +349,22 @@ checksum = "634bd4d29cbf24424d0a4bfcbf80c6960129dc24424752a7d1d1390607023422" dependencies = [ "as-slice", "generic-array 0.14.4", - "hash32", + "hash32 0.1.1", "serde", "stable_deref_trait", ] +[[package]] +name = "heapless" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7ee8a997d259962217f40279f34201fdf06e669bafa69d7c1f4c7ff1893b5f6" +dependencies = [ + "atomic-polyfill", + "hash32 0.2.1", + "stable_deref_trait", +] + [[package]] name = "indexmap" version = "1.6.2" @@ -409,13 +426,12 @@ dependencies = [ [[package]] name = "minimq" version = "0.2.0" -source = "git+https://github.com/quartiq/minimq.git?rev=d2ec3e8#d2ec3e8351fa403ea96defd98c0b4410cbaa18a4" +source = "git+https://github.com/quartiq/minimq.git?branch=feature/nal-update#98c1dffc4b0eeeaadf696320e1ce4234d5b52de0" dependencies = [ "bit_field", "embedded-nal", "enum-iterator", - "generic-array 0.14.4", - "heapless 0.6.1", + "heapless 0.7.1", ] [[package]] @@ -454,9 +470,9 @@ dependencies = [ [[package]] name = "no-std-net" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2178127478ae4ee9be7180bc9c3bffb6354dd7238400db567102f98c413a9f35" +checksum = "1bcece43b12349917e096cddfa66107277f123e6c96a5aea78711dc601a47152" [[package]] name = "num" @@ -745,10 +761,10 @@ dependencies = [ [[package]] name = "smoltcp-nal" version = "0.1.0" -source = "git+https://github.com/quartiq/smoltcp-nal.git?rev=4a1711c#4a1711c54cdf79f5ee8c1c99a1e8984f5944270c" +source = "git+https://github.com/quartiq/smoltcp-nal.git?branch=feature/nal-update#65d94c4ab9e06d2e5c48547a0c9cd6836591e355" dependencies = [ "embedded-nal", - "heapless 0.6.1", + "heapless 0.7.1", "nanorand", "smoltcp", ] diff --git a/Cargo.toml b/Cargo.toml index 790363a..29de739 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -64,11 +64,11 @@ rev = "c6f2b28" [dependencies.smoltcp-nal] git = "https://github.com/quartiq/smoltcp-nal.git" -rev = "4a1711c" +branch = "feature/nal-update" [dependencies.minimq] git = "https://github.com/quartiq/minimq.git" -rev = "d2ec3e8" +branch = "feature/nal-update" [features] nightly = ["cortex-m/inline-asm", "dsp/nightly"] diff --git a/src/net/miniconf_client.rs b/src/net/miniconf_client.rs index b809d73..76c64d2 100644 --- a/src/net/miniconf_client.rs +++ b/src/net/miniconf_client.rs @@ -21,7 +21,7 @@ where S: miniconf::Miniconf + Default + Clone, { default_response_topic: String, - mqtt: minimq::MqttClient, + mqtt: minimq::Minimq, settings: S, subscribed: bool, settings_prefix: String, @@ -39,8 +39,7 @@ where /// * `prefix` - The MQTT device prefix to use for this device. pub fn new(stack: NetworkReference, client_id: &str, prefix: &str) -> Self { let mqtt = - minimq::MqttClient::new(MQTT_BROKER.into(), client_id, stack) - .unwrap(); + minimq::Minimq::new(MQTT_BROKER.into(), client_id, stack).unwrap(); let mut response_topic: String = String::from(prefix); response_topic.push_str("/log").unwrap(); @@ -62,7 +61,7 @@ where /// # Returns /// An option containing an action that should be completed as a result of network servicing. pub fn update(&mut self) -> UpdateState { - let mqtt_connected = match self.mqtt.is_connected() { + let mqtt_connected = match self.mqtt.client.is_connected() { Ok(connected) => connected, Err(minimq::Error::Network( smoltcp_nal::NetworkError::NoIpAddress, @@ -88,7 +87,7 @@ where // We do not currently handle or process potential subscription failures. Instead, this // failure will be logged through the stabilizer logging interface. - self.mqtt.subscribe(&settings_topic, &[]).unwrap(); + self.mqtt.client.subscribe(&settings_topic, &[]).unwrap(); self.subscribed = true; } diff --git a/src/net/shared.rs b/src/net/shared.rs index e09489b..4f86793 100644 --- a/src/net/shared.rs +++ b/src/net/shared.rs @@ -47,25 +47,25 @@ impl<'a, S> NetworkStackProxy<'a, S> { // proxy structure. macro_rules! forward { ($func:ident($($v:ident: $IT:ty),*) -> $T:ty) => { - fn $func(&self, $($v: $IT),*) -> $T { + fn $func(&mut self, $($v: $IT),*) -> $T { self.mutex.lock(|stack| stack.$func($($v),*)) } } } // Implement a TCP stack for the proxy if the underlying network stack implements it. -impl<'a, S> embedded_nal::TcpStack for NetworkStackProxy<'a, S> +impl<'a, S> embedded_nal::TcpClientStack for NetworkStackProxy<'a, S> where - S: embedded_nal::TcpStack, + S: embedded_nal::TcpClientStack, { type TcpSocket = S::TcpSocket; type Error = S::Error; - forward! {open(mode: embedded_nal::Mode) -> Result} - forward! {connect(socket: S::TcpSocket, remote: embedded_nal::SocketAddr) -> Result} + forward! {socket() -> Result} + forward! {connect(socket: &mut S::TcpSocket, remote: embedded_nal::SocketAddr) -> embedded_nal::nb::Result<(), S::Error>} forward! {is_connected(socket: &S::TcpSocket) -> Result} - forward! {write(socket: &mut S::TcpSocket, buffer: &[u8]) -> embedded_nal::nb::Result} - forward! {read(socket: &mut S::TcpSocket, buffer: &mut [u8]) -> embedded_nal::nb::Result} + forward! {send(socket: &mut S::TcpSocket, buffer: &[u8]) -> embedded_nal::nb::Result} + forward! {receive(socket: &mut S::TcpSocket, buffer: &mut [u8]) -> embedded_nal::nb::Result} forward! {close(socket: S::TcpSocket) -> Result<(), S::Error>} } diff --git a/src/net/telemetry.rs b/src/net/telemetry.rs index b59b222..b6b9c34 100644 --- a/src/net/telemetry.rs +++ b/src/net/telemetry.rs @@ -21,7 +21,7 @@ use crate::hardware::{ /// The telemetry client for reporting telemetry data over MQTT. pub struct TelemetryClient { - mqtt: minimq::MqttClient, + mqtt: minimq::Minimq, telemetry_topic: String, _telemetry: core::marker::PhantomData, } @@ -97,8 +97,7 @@ impl TelemetryClient { /// A new telemetry client. pub fn new(stack: NetworkReference, client_id: &str, prefix: &str) -> Self { let mqtt = - minimq::MqttClient::new(MQTT_BROKER.into(), client_id, stack) - .unwrap(); + minimq::Minimq::new(MQTT_BROKER.into(), client_id, stack).unwrap(); let mut telemetry_topic: String = String::from(prefix); telemetry_topic.push_str("/telemetry").unwrap(); @@ -122,6 +121,7 @@ impl TelemetryClient { let telemetry: Vec = serde_json_core::to_vec(telemetry).unwrap(); self.mqtt + .client .publish(&self.telemetry_topic, &telemetry, QoS::AtMostOnce, &[]) .ok(); } From fc2801ecbb4ee6243a2a0173a11ff2157731778a Mon Sep 17 00:00:00 2001 From: Ryan Summers Date: Thu, 27 May 2021 17:15:31 +0200 Subject: [PATCH 4/4] Updating dependencies --- Cargo.lock | 8 ++++---- Cargo.toml | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5402ed9..0bba018 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -38,7 +38,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9a69a963b70ddacfcd382524f72a4576f359af9334b3bf48a79566590bb8bfa" dependencies = [ "bitrate", - "cortex-m 0.7.2", + "cortex-m 0.6.7", "embedded-hal", ] @@ -426,7 +426,7 @@ dependencies = [ [[package]] name = "minimq" version = "0.2.0" -source = "git+https://github.com/quartiq/minimq.git?branch=feature/nal-update#98c1dffc4b0eeeaadf696320e1ce4234d5b52de0" +source = "git+https://github.com/quartiq/minimq.git?rev=dbdbec0#dbdbec0b77d2e134dc6c025018a82c14cbdfbe34" dependencies = [ "bit_field", "embedded-nal", @@ -761,7 +761,7 @@ dependencies = [ [[package]] name = "smoltcp-nal" version = "0.1.0" -source = "git+https://github.com/quartiq/smoltcp-nal.git?branch=feature/nal-update#65d94c4ab9e06d2e5c48547a0c9cd6836591e355" +source = "git+https://github.com/quartiq/smoltcp-nal.git?rev=5e56576#5e56576fbbc594f0a0e1df9222a20eb35c8e7511" dependencies = [ "embedded-nal", "heapless 0.7.1", @@ -810,7 +810,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b672c837e0ee8158ecc7fce0f9a948dd0693a9c588338e728d14b73307a0b7d" dependencies = [ "bare-metal 0.2.5", - "cortex-m 0.7.2", + "cortex-m 0.6.7", "cortex-m-rt", "vcell", ] diff --git a/Cargo.toml b/Cargo.toml index 29de739..14be160 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -64,11 +64,11 @@ rev = "c6f2b28" [dependencies.smoltcp-nal] git = "https://github.com/quartiq/smoltcp-nal.git" -branch = "feature/nal-update" +rev = "5e56576" [dependencies.minimq] git = "https://github.com/quartiq/minimq.git" -branch = "feature/nal-update" +rev = "dbdbec0" [features] nightly = ["cortex-m/inline-asm", "dsp/nightly"]