diff --git a/src/flow3r/badgelink/mod.rs b/src/flow3r/badgelink/mod.rs index 8e57ae510988e55a48f40a80cad127809a77920e..ed5b031e5fec0e223f87ee626d6e300b2aeb987d 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 8b137891791fe96927ad78e64b0aad7bded08bdc..0000000000000000000000000000000000000000 --- a/src/flow3r/badgelink/switch.rs +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/flow3r/mod.rs b/src/flow3r/mod.rs index 4153e163d110da14c1cbdd4fae048ba5d111b05e..a252d08e1a834b9cf509ed7530686ce16df4c25e 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 f0aeb299a49a82b0edd3ffe6246412ded95a9f50..0000000000000000000000000000000000000000 --- 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 78fed0f073a7fc746dc795ddfafe7e7360353ebc..0000000000000000000000000000000000000000 --- a/src/flow3r/peripherals/mod.rs +++ /dev/null @@ -1 +0,0 @@ -mod charging; diff --git a/src/runtime.rs b/src/runtime.rs index 3eec15f05031c95af657bd9bef5ef9d17ddb0408..bc802f1d50e15ea576fd5eda3333d2c1cf5688fd 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