diff --git a/Cargo.toml b/Cargo.toml index 5eb80f7..1918ada 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,8 +16,8 @@ members = [ ] [workspace.package] -version = "0.4.6" -edition = "2021" +version = "0.5.0" +edition = "2024" repository = "https://git.bfpower.io/BFPOWER/physical" readme = "README.md" license = "MIT" @@ -30,14 +30,14 @@ default-features = false [workspace.dependencies.libm] version = "0.2.*" [workspace.dependencies.float-cmp] -version = "0.9.*" +version = "0.10.*" # Logging [workspace.dependencies.tracing] version = "0.1.*" [workspace.dependencies.defmt] -version = "0.3.*" +version = "1.0.*" [workspace.dependencies.defmt-rtt] -version = "0.4.*" +version = "1.1.*" # Embedded-HAL [workspace.dependencies.embedded-hal] version = "1.0.*" @@ -57,32 +57,34 @@ version = "0.7.*" [workspace.dependencies.cortex-m-rt] version = "0.7.*" [workspace.dependencies.panic-probe] -version = "0.3.*" +version = "1.0.*" features = ["print-defmt"] # Embassy [workspace.dependencies.embassy-futures] version = "0.1.*" [workspace.dependencies.embassy-time] -version = "0.3.*" +version = "0.5.*" features = ["defmt", "defmt-timestamp-uptime"] [workspace.dependencies.embassy-sync] -version = "0.6.*" +version = "0.7.*" features = ["defmt"] [workspace.dependencies.embassy-embedded-hal] -version = "0.1.*" -[workspace.dependencies.embassy-executor] version = "0.5.*" -features = ["defmt", "arch-cortex-m", "integrated-timers", "executor-interrupt", "executor-thread"] +[workspace.dependencies.embassy-executor] +version = "0.9.*" +features = ["defmt", "arch-cortex-m", "executor-interrupt", "executor-thread"] [workspace.dependencies.embassy-usb] -version = "0.2.*" +version = "0.5.*" features = ["defmt"] [workspace.dependencies.embassy-stm32] -version = "0.1.*" +version = "0.5.*" features = ["defmt", "unstable-pac"] [workspace.dependencies.embassy-nrf] -version = "0.1.*" +version = "0.9.*" features = ["defmt"] # Meta +[workspace.dependencies.cfg-if] +version = "1.0.*" [workspace.dependencies.derive_more] version = "0.99.*" [workspace.dependencies.syn] diff --git a/drivers/ads1256/driver/src/adc.rs b/drivers/ads1256/driver/src/adc.rs index bd7caf3..202ad3c 100644 --- a/drivers/ads1256/driver/src/adc.rs +++ b/drivers/ads1256/driver/src/adc.rs @@ -1,6 +1,6 @@ use crate::{ drate, mux, opcodes, status, AdControl, Ads1256, BlockingDelay, CalibrationCommand, Conversion, - DataRate, Gain, Multiplexer, Status, + DataRate, Multiplexer, Status, }; use embedded_hal::digital::OutputPin; use embedded_hal::spi; diff --git a/drivers/ads1256/types/src/standard.rs b/drivers/ads1256/types/src/standard.rs index 14c480c..d432d74 100644 --- a/drivers/ads1256/types/src/standard.rs +++ b/drivers/ads1256/types/src/standard.rs @@ -1,5 +1,5 @@ pub mod input { - use crate::{Buffer, Config, DataRate, Gain, Multiplexer, MuxInput}; + use crate::{Multiplexer, MuxInput}; #[cfg_attr(feature = "defmt", derive(defmt::Format))] #[derive(Copy, Clone, Eq, PartialEq, Debug)] diff --git a/examples/ads1256/src/bin/adc.rs b/examples/ads1256/src/bin/adc.rs index 6880e07..a7ab290 100644 --- a/examples/ads1256/src/bin/adc.rs +++ b/examples/ads1256/src/bin/adc.rs @@ -1,27 +1,25 @@ #![no_std] #![no_main] -use cortex_m::prelude::{_embedded_hal_blocking_delay_DelayMs, _embedded_hal_blocking_delay_DelayUs}; use {defmt_rtt as _, panic_probe as _}; use {embassy_executor as executor, embassy_stm32 as stm32}; use ads1256::{ - AdControl, Ads1256, AutoCal, BitOrder, Buffer, ClockOut, Config, DState, DataRate, DigitalIo, - DigitalIoDirection, DigitalIoState, DioDirection, Gain, Multiplexer, MuxInput, OutputPin, Sdcs, - SpiBus, Status, Wait, BlockingDelay + AdControl, Ads1256, AutoCal, BitOrder, Buffer, ClockOut, Config, + DataRate, DigitalIo, DigitalIoDirection, DigitalIoState, Gain, Multiplexer, + MuxInput, OutputPin, Sdcs, SpiBus, Status, Wait, }; -use embassy_time::{Delay, Timer}; +use embassy_time::Delay; use executor::Spawner; use physical::quantity::Quantity; -use stm32::dma::NoDma; use stm32::exti::ExtiInput; -use stm32::gpio::{Input, Level, Output, Pull, Speed}; +use stm32::gpio::{Level, Output, Pull, Speed}; use stm32::spi::Spi; use stm32::time::Hertz; use stm32::{pac, spi}; -use defmt::{debug, error, info, trace, unwrap}; +use defmt::info; const AUTOCAL_CONF: Config = Config { status: Status::setting(Buffer::Enabled, AutoCal::Enabled, BitOrder::MostSigFirst), @@ -33,15 +31,17 @@ const AUTOCAL_CONF: Config = Config { const ADS1256_DELAY: ads1256::DefaultDelay = ads1256::DefaultDelay::new(Delay); +stm32::bind_interrupts!(struct Irqs { + EXTI3 => stm32::exti::InterruptHandler; +}); + #[embassy_executor::main] async fn main(spawner: Spawner) { - unsafe { - pac::FLASH.acr().modify(|v| { - v.set_prften(true); - v.set_icen(true); - v.set_dcen(true); - }); - } + pac::FLASH.acr().modify(|v| { + v.set_prften(true); + v.set_icen(true); + v.set_dcen(true); + }); let p = embassy_stm32::init(Default::default()); @@ -50,18 +50,10 @@ async fn main(spawner: Spawner) { spi_conf.bit_order = spi::BitOrder::MsbFirst; spi_conf.frequency = Hertz(ads1256::defaults::SPI_CLK_HZ); - let ads1256_data_ready = ExtiInput::new(Input::new(p.PA3, Pull::Up), p.EXTI3); + let ads1256_data_ready = ExtiInput::new(p.PA3, p.EXTI3, Pull::Up, Irqs); let select_ads1256 = Output::new(p.PA1, Level::High, Speed::VeryHigh); - let mut spi = Spi::new( - p.SPI1, - p.PA5, - p.PA7, - p.PA6, - NoDma, - NoDma, - spi_conf, - ); + let mut spi = Spi::new_blocking(p.SPI1, p.PA5, p.PA7, p.PA6, spi_conf); let mut ads_1256 = Ads1256::new(ADS1256_DELAY, select_ads1256, ads1256_data_ready); // single_conversion(&mut spi, &mut ads_1256).await; @@ -78,7 +70,11 @@ async fn single_conversion( @@ -90,7 +86,11 @@ async fn read_continuous = ads1256::DefaultDelay::new(Delay); +bind_interrupts!(struct Irqs { + EXTI3 => stm32::exti::InterruptHandler; +}); + #[embassy_executor::main] async fn main(spawner: Spawner) { - unsafe { - pac::FLASH.acr().modify(|v| { - v.set_prften(true); - v.set_icen(true); - v.set_dcen(true); - }); - } + pac::FLASH.acr().modify(|v| { + v.set_prften(true); + v.set_icen(true); + v.set_dcen(true); + }); let p = embassy_stm32::init(Default::default()); @@ -41,18 +43,10 @@ async fn main(spawner: Spawner) { spi_conf.bit_order = spi::BitOrder::MsbFirst; spi_conf.frequency = Hertz(ads1256::defaults::SPI_CLK_HZ); - let ads1256_data_ready = ExtiInput::new(Input::new(p.PA3, Pull::Up), p.EXTI3); + let ads1256_data_ready = ExtiInput::new(p.PA3, p.EXTI3, Pull::Up, Irqs); let select_ads1256 = Output::new(p.PA1, Level::High, Speed::VeryHigh); - let mut spi = Spi::new( - p.SPI1, - p.PA5, - p.PA7, - p.PA6, - NoDma, - NoDma, - spi_conf, - ); + let mut spi = Spi::new_blocking(p.SPI1, p.PA5, p.PA7, p.PA6, spi_conf); let mut ads_1256 = Ads1256::new(ADS1256_DELAY, select_ads1256, ads1256_data_ready); // status(&mut spi, &mut ads_1256); @@ -60,7 +54,7 @@ async fn main(spawner: Spawner) { // ad_control(&mut spi, &mut ads_1256); // data_rate(&mut spi, &mut ads_1256); // gpio(&mut spi, &mut ads_1256); - config(&mut spi, &mut ads_1256); + config(&mut spi, &mut ads_1256); } fn status( diff --git a/node/Cargo.toml b/node/Cargo.toml index 47dcc77..b9904e7 100644 --- a/node/Cargo.toml +++ b/node/Cargo.toml @@ -15,6 +15,8 @@ stm32 = ["embassy-stm32", "physical/stm32"] [dependencies.physical] path = ".." +[dependencies.cfg-if] +workspace = true [dependencies.embedded-hal] workspace = true [dependencies.embedded-hal-async] diff --git a/node/src/stm32/usb.rs b/node/src/stm32/usb.rs index dff3ac6..e69e9a8 100644 --- a/node/src/stm32/usb.rs +++ b/node/src/stm32/usb.rs @@ -3,28 +3,30 @@ use crate::comms; use embassy_stm32::peripherals::USB_OTG_FS; -use embassy_stm32::usb_otg::{Driver, Endpoint, In, Out}; -use embassy_usb::driver::{EndpointIn, EndpointOut}; +use embassy_stm32::usb::Driver as StmUsbDriver; +use embassy_usb::driver::{Driver as UsbDriverTrait, EndpointIn, EndpointOut}; use embassy_usb::UsbDevice; -pub type TypedUSB = UsbDevice<'static, Driver<'static, USB_OTG_FS>>; -pub type TypedInterIn = Endpoint<'static, USB_OTG_FS, In>; -pub type TypedInterOut = Endpoint<'static, USB_OTG_FS, Out>; +type UsbDriver = StmUsbDriver<'static, USB_OTG_FS>; +type InterIn = >::EndpointIn; +type InterOut = >::EndpointOut; + +pub type TypedUSB = UsbDevice<'static, UsbDriver>; pub struct UsbIO { /// Send to master - pub interrupt_in: TypedInterIn, + pub interrupt_in: InterIn, /// Recieve from master - pub interrupt_out: TypedInterOut, + pub interrupt_out: InterOut, } -impl comms::Sender for TypedInterIn { +impl comms::Sender for T { async fn send(&mut self, msg: &[u8]) -> Result<(), comms::Reset> { self.write(msg).await.map_err(|_| comms::Reset) } } -impl comms::Receiver for TypedInterOut { +impl comms::Receiver for T { #[cfg(feature = "single-packet-msgs")] async fn receive(&mut self, buffer: &mut [u8]) -> Result<(), comms::Reset> { // This is OK when all our messages are smaller than a single packet. diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 7e73c94..5801d60 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,8 +1,8 @@ # Before upgrading check that everything is available on all tier1 targets here: # https://rust-lang.github.io/rustup-components-history [toolchain] -channel = "1.82" -components = [ "rust-src", "rustfmt", "llvm-tools" ] +channel = "1.93.1" +components = [ "rust-src", "rustfmt" ] targets = [ "thumbv7em-none-eabi", "thumbv7m-none-eabi", diff --git a/rustfmt.toml b/rustfmt.toml index 1a2c99f..2af2c1c 100644 --- a/rustfmt.toml +++ b/rustfmt.toml @@ -3,6 +3,6 @@ format_strings = true wrap_comments = true match_block_trailing_comma = true enum_discrim_align_threshold = 25 -fn_call_width = 100 +fn_call_width = 110 +single_line_if_else_max_width = 110 comment_width = 120 -single_line_if_else_max_width = 100 \ No newline at end of file