Merge pull request #2228 from MaxiluxSystems/fix/shared-spi-no-time

embassy-embedded-hal: shared_bus/blocking/spi: fix build and behaviour when "time" feature disabled
This commit is contained in:
Dario Nieuwenhuis 2023-11-27 23:15:43 +00:00 committed by GitHub
commit d63c052f0e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -55,6 +55,10 @@ where
CS: OutputPin, CS: OutputPin,
{ {
fn transaction(&mut self, operations: &mut [Operation<'_, u8>]) -> Result<(), Self::Error> { fn transaction(&mut self, operations: &mut [Operation<'_, u8>]) -> Result<(), Self::Error> {
if cfg!(not(feature = "time")) && operations.iter().any(|op| matches!(op, Operation::DelayUs(_))) {
return Err(SpiDeviceError::DelayUsNotSupported);
}
self.bus.lock(|bus| { self.bus.lock(|bus| {
let mut bus = bus.borrow_mut(); let mut bus = bus.borrow_mut();
self.cs.set_low().map_err(SpiDeviceError::Cs)?; self.cs.set_low().map_err(SpiDeviceError::Cs)?;
@ -65,7 +69,7 @@ where
Operation::Transfer(read, write) => bus.transfer(read, write), Operation::Transfer(read, write) => bus.transfer(read, write),
Operation::TransferInPlace(buf) => bus.transfer_in_place(buf), Operation::TransferInPlace(buf) => bus.transfer_in_place(buf),
#[cfg(not(feature = "time"))] #[cfg(not(feature = "time"))]
Operation::DelayUs(_) => Err(SpiDeviceError::DelayUsNotSupported), Operation::DelayUs(_) => unreachable!(),
#[cfg(feature = "time")] #[cfg(feature = "time")]
Operation::DelayUs(us) => { Operation::DelayUs(us) => {
embassy_time::block_for(embassy_time::Duration::from_micros(*us as _)); embassy_time::block_for(embassy_time::Duration::from_micros(*us as _));
@ -161,6 +165,10 @@ where
CS: OutputPin, CS: OutputPin,
{ {
fn transaction(&mut self, operations: &mut [Operation<'_, u8>]) -> Result<(), Self::Error> { fn transaction(&mut self, operations: &mut [Operation<'_, u8>]) -> Result<(), Self::Error> {
if cfg!(not(feature = "time")) && operations.iter().any(|op| matches!(op, Operation::DelayUs(_))) {
return Err(SpiDeviceError::DelayUsNotSupported);
}
self.bus.lock(|bus| { self.bus.lock(|bus| {
let mut bus = bus.borrow_mut(); let mut bus = bus.borrow_mut();
bus.set_config(&self.config).map_err(|_| SpiDeviceError::Config)?; bus.set_config(&self.config).map_err(|_| SpiDeviceError::Config)?;
@ -172,7 +180,7 @@ where
Operation::Transfer(read, write) => bus.transfer(read, write), Operation::Transfer(read, write) => bus.transfer(read, write),
Operation::TransferInPlace(buf) => bus.transfer_in_place(buf), Operation::TransferInPlace(buf) => bus.transfer_in_place(buf),
#[cfg(not(feature = "time"))] #[cfg(not(feature = "time"))]
Operation::DelayUs(_) => Err(SpiDeviceError::DelayUsNotSupported), Operation::DelayUs(_) => unreachable!(),
#[cfg(feature = "time")] #[cfg(feature = "time")]
Operation::DelayUs(us) => { Operation::DelayUs(us) => {
embassy_time::block_for(embassy_time::Duration::from_micros(*us as _)); embassy_time::block_for(embassy_time::Duration::from_micros(*us as _));