From a0498330ef7d035890ab1b3632d789ee3c9fccdf Mon Sep 17 00:00:00 2001 From: Nathan Perry Date: Sat, 5 Oct 2024 17:54:31 -0400 Subject: dummy fw bme bringup --- src/main.rs | 63 +++++++++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 47 insertions(+), 16 deletions(-) (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs index 6cf46be..454ed05 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,7 +2,8 @@ #![no_main] #![feature(impl_trait_in_assoc_type)] -use crate::usb::COBS_DOWNLINK; +extern crate alloc; + use molybdos::{ embassy_embedded_hal::shared_bus::asynch::spi::SpiDevice, embassy_executor, @@ -33,6 +34,7 @@ use molybdos::{ pubsub, pubsub::PubSubBehavior, }, + embedded_hal_async, embedded_hal_async::spi::{ Operation, SpiDevice as _, @@ -46,7 +48,13 @@ use molybdos::{ heapless, pal::StaticOutput, }; -use ocularium::Downlink; + +use ocularium_common::{ + Downlink, + Sensor, +}; + +use crate::usb::COBS_DOWNLINK; mod bringup; mod usb; @@ -95,26 +103,31 @@ async fn main(spawner: embassy_executor::Spawner) { molybdos::lib::usb::start!(molybdos::pal::UsbDriver, acm, &usb::UPLINK, &usb::DOWNLINK); molybdos::lib::util::cobs::start!( - ocularium::Uplink, + ocularium_common::Uplink, &usb::UPLINK, &usb::COBS_UPLINK, - ocularium::Downlink, + ocularium_common::Downlink, &usb::DOWNLINK, &usb::COBS_DOWNLINK ); let mut spidev = SpiDevice::new(bme_spi, bme_cs); + manually_check_bme_id(&mut spidev).await; - let data = &mut [0u8]; + let config = drogue_bme680_async::Configuration::default(); - let result = spidev - .transaction(&mut [Operation::Write(&[0x50 | (1 << 7)]), Operation::Read(data)]) - .await; - if let Err(e) = result { - defmt::error!("reading spi dev: {}", defmt::Debug2Format(&e)); - } else { - defmt::info!("read chipid: {:x}", data[0]); - } + let bme = drogue_bme680_async::Sensor::new_spi(spidev).await.unwrap(); + let mut bme = drogue_bme680_async::Controller::new( + bme, + molybdos::embassy_time::Delay, + config, + drogue_bme680_async::StaticProvider(23), + ) + .await + .unwrap(); + + let meas = bme.measure_default().await.unwrap().unwrap(); + defmt::info!("got bme measurement: {}", defmt::Debug2Format(&meas)); #[cfg(not(feature = "disable_sd"))] { @@ -137,19 +150,37 @@ async fn main(spawner: embassy_executor::Spawner) { } } - spawner.must_spawn(drain_pipe()); - spawner.must_spawn(run_i2s(i2s, i2s_dma)); + #[cfg(not(feature = "disable_i2s"))] + { + spawner.must_spawn(drain_pipe()); + spawner.must_spawn(run_i2s(i2s, i2s_dma)); + } loop { molybdos::embassy_time::Timer::after(molybdos::embassy_time::Duration::from_secs(1)).await; } } +async fn manually_check_bme_id(spidev: &mut impl embedded_hal_async::spi::SpiDevice) { + let data = &mut [0u8]; + + let result = spidev + .transaction(&mut [Operation::Write(&[0x50 | (1 << 7)]), Operation::Read(data)]) + .await; + if let Err(e) = result { + defmt::error!("reading spi dev: {}", defmt::Debug2Format(&e)); + } else { + defmt::info!("read chipid: {:x}", data[0]); + } +} + +#[cfg(not(feature = "disable_i2s"))] #[::embassy_executor::task] async fn run_i2s(mut i2s: bringup::StaticI2S, dma: embassy_rp::peripherals::DMA_CH5) { i2s.run::<960>(dma, &I2S_PIPE).await } +#[cfg(not(feature = "disable_i2s"))] #[::embassy_executor::task] async fn drain_pipe() { let publ = COBS_DOWNLINK.publisher().expect("getting publisher"); @@ -159,7 +190,7 @@ async fn drain_pipe() { let n = I2S_PIPE.read(buf).await; for elem in (&buf[..n]).chunks(48) { - publ.publish_immediate(Downlink::PDM(heapless::Vec::from_slice(elem).unwrap())); + publ.publish_immediate(Downlink::Sensor(Sensor::Pdm(alloc::vec::Vec::from(elem)))); } } } -- cgit v1.3.1