From 49d648edf50c4c0f9a7d23f6b27952f1361c47ef Mon Sep 17 00:00:00 2001 From: zdmx <hi@zdmx.me> Date: Mon, 14 Aug 2023 11:42:24 +0200 Subject: [PATCH] implement badge link switching --- src/flow3r/badgelink/mod.rs | 42 ++++++++++++++++++++++++++++-- src/flow3r/badgelink/switch.rs | 1 - src/flow3r/mod.rs | 7 ++--- src/flow3r/peripherals/charging.rs | 4 --- src/flow3r/peripherals/mod.rs | 1 - src/runtime.rs | 6 +++-- 6 files changed, 48 insertions(+), 13 deletions(-) delete mode 100644 src/flow3r/badgelink/switch.rs delete mode 100644 src/flow3r/peripherals/charging.rs delete mode 100644 src/flow3r/peripherals/mod.rs diff --git a/src/flow3r/badgelink/mod.rs b/src/flow3r/badgelink/mod.rs index 8e57ae5..ed5b031 100644 --- a/src/flow3r/badgelink/mod.rs +++ b/src/flow3r/badgelink/mod.rs @@ -1,4 +1,42 @@ +use hal::{i2c::I2C, peripherals::I2C0}; +use port_expander::{Max7321, dev::max7321::Driver}; +use shared_bus::{I2cProxy, XtensaMutex, NullMutex}; + pub mod badgenet; -mod switch; -pub struct BadgeLink; +pub struct BadgeLink { + port_expander: Max7321<NullMutex<Driver<I2cProxy<'static, XtensaMutex<I2C<'static, I2C0>>>>>> +} + +impl BadgeLink { + pub fn new(i2c: I2cProxy<'static, XtensaMutex<I2C<'static, I2C0>>>) -> Self { + let mut port_expander = port_expander::Max7321::new(i2c, true, true, true, false); + Self { + port_expander + } + } + + pub fn left_audio(&mut self) { + let mut pes = self.port_expander.split(); + pes.p3.set_low(); + pes.p4.set_low(); + } + + pub fn left_badgelink(&mut self) { + let mut pes = self.port_expander.split(); + pes.p3.set_high(); + pes.p4.set_high(); + } + + pub fn right_audio(&mut self) { + let mut pes = self.port_expander.split(); + pes.p5.set_low(); + pes.p6.set_low(); + } + + pub fn right_badgelink(&mut self) { + let mut pes = self.port_expander.split(); + pes.p5.set_high(); + pes.p6.set_high(); + } +} diff --git a/src/flow3r/badgelink/switch.rs b/src/flow3r/badgelink/switch.rs deleted file mode 100644 index 8b13789..0000000 --- a/src/flow3r/badgelink/switch.rs +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/flow3r/mod.rs b/src/flow3r/mod.rs index 4153e16..a252d08 100644 --- a/src/flow3r/mod.rs +++ b/src/flow3r/mod.rs @@ -1,3 +1,4 @@ +use self::badgelink::BadgeLink; use self::display::Display; use self::leds::Leds; @@ -7,16 +8,16 @@ pub mod display; pub mod imu; pub mod input; pub mod leds; -pub mod peripherals; pub mod sdcard; pub struct Flow3r { pub display: Display, pub leds: Leds, + pub badgelink: BadgeLink, } impl Flow3r { - pub fn new(display: Display, leds: Leds) -> Self { - Self { display, leds } + pub fn new(display: Display, leds: Leds, badgelink: BadgeLink) -> Self { + Self { display, leds, badgelink } } } diff --git a/src/flow3r/peripherals/charging.rs b/src/flow3r/peripherals/charging.rs deleted file mode 100644 index f0aeb29..0000000 --- a/src/flow3r/peripherals/charging.rs +++ /dev/null @@ -1,4 +0,0 @@ -#[embassy_executor::task] -pub async fn charging_status_manager() -> ! { - loop {} -} diff --git a/src/flow3r/peripherals/mod.rs b/src/flow3r/peripherals/mod.rs deleted file mode 100644 index 78fed0f..0000000 --- a/src/flow3r/peripherals/mod.rs +++ /dev/null @@ -1 +0,0 @@ -mod charging; diff --git a/src/runtime.rs b/src/runtime.rs index 3eec15f..bc802f1 100644 --- a/src/runtime.rs +++ b/src/runtime.rs @@ -21,7 +21,7 @@ use crate::flow3r::{ display::{display_refresh, Display}, input::input_controller, leds::init_leds, - Flow3r, + Flow3r, badgelink::BadgeLink, }; use crate::main; @@ -161,7 +161,9 @@ async fn init_runtime() { let rng = RNG.init(Rng::new(peripherals.RNG)); - let flow3r = Flow3r::new(display, leds); + let badgelink = BadgeLink::new(i2c_busmanager.acquire_i2c()); + + let flow3r = Flow3r::new(display, leds, badgelink); let spawner = Spawner::for_current_executor().await; spawner -- GitLab