aboutsummaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
authorNathan Perry <np@nathanperry.dev>2024-10-05 17:54:31 -0400
committerNathan Perry <np@nathanperry.dev>2024-10-05 17:54:31 -0400
commita0498330ef7d035890ab1b3632d789ee3c9fccdf (patch)
treed7376d731774fe5b1898b6301b964404cc58680d /src/main.rs
parentf63136fe84f4dcebac13c9055faac2e5a67d7786 (diff)
dummy fw bme bringup
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs63
1 files changed, 47 insertions, 16 deletions
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<PIO0, 0>, 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))));
}
}
}