diff options
47 files changed, 256 insertions, 431 deletions
diff --git a/.github/ci/doc.sh b/.github/ci/doc.sh index 1402e742f..e4d83e4bc 100755 --- a/.github/ci/doc.sh +++ b/.github/ci/doc.sh | |||
| @@ -15,30 +15,31 @@ export BUILDER_COMPRESS=true | |||
| 15 | # which makes rustup very sad | 15 | # which makes rustup very sad |
| 16 | rustc --version > /dev/null | 16 | rustc --version > /dev/null |
| 17 | 17 | ||
| 18 | docserver-builder -i ./embassy-stm32 -o crates/embassy-stm32/git.zup | 18 | docserver-builder -i ./embassy-stm32 -o webroot/crates/embassy-stm32/git.zup |
| 19 | docserver-builder -i ./embassy-boot/boot -o crates/embassy-boot/git.zup | 19 | docserver-builder -i ./embassy-boot/boot -o webroot/crates/embassy-boot/git.zup |
| 20 | docserver-builder -i ./embassy-boot/nrf -o crates/embassy-boot-nrf/git.zup | 20 | docserver-builder -i ./embassy-boot/nrf -o webroot/crates/embassy-boot-nrf/git.zup |
| 21 | docserver-builder -i ./embassy-boot/rp -o crates/embassy-boot-rp/git.zup | 21 | docserver-builder -i ./embassy-boot/rp -o webroot/crates/embassy-boot-rp/git.zup |
| 22 | docserver-builder -i ./embassy-boot/stm32 -o crates/embassy-boot-stm32/git.zup | 22 | docserver-builder -i ./embassy-boot/stm32 -o webroot/crates/embassy-boot-stm32/git.zup |
| 23 | docserver-builder -i ./embassy-embedded-hal -o crates/embassy-embedded-hal/git.zup | 23 | docserver-builder -i ./embassy-embedded-hal -o webroot/crates/embassy-embedded-hal/git.zup |
| 24 | docserver-builder -i ./embassy-executor -o crates/embassy-executor/git.zup | 24 | docserver-builder -i ./embassy-executor -o webroot/crates/embassy-executor/git.zup |
| 25 | docserver-builder -i ./embassy-futures -o crates/embassy-futures/git.zup | 25 | docserver-builder -i ./embassy-futures -o webroot/crates/embassy-futures/git.zup |
| 26 | docserver-builder -i ./embassy-lora -o crates/embassy-lora/git.zup | 26 | docserver-builder -i ./embassy-lora -o webroot/crates/embassy-lora/git.zup |
| 27 | docserver-builder -i ./embassy-net -o crates/embassy-net/git.zup | 27 | docserver-builder -i ./embassy-net -o webroot/crates/embassy-net/git.zup |
| 28 | docserver-builder -i ./embassy-net-driver -o crates/embassy-net-driver/git.zup | 28 | docserver-builder -i ./embassy-net-driver -o webroot/crates/embassy-net-driver/git.zup |
| 29 | docserver-builder -i ./embassy-net-driver-channel -o crates/embassy-net-driver-channel/git.zup | 29 | docserver-builder -i ./embassy-net-driver-channel -o webroot/crates/embassy-net-driver-channel/git.zup |
| 30 | docserver-builder -i ./embassy-nrf -o crates/embassy-nrf/git.zup | 30 | docserver-builder -i ./embassy-nrf -o webroot/crates/embassy-nrf/git.zup |
| 31 | docserver-builder -i ./embassy-rp -o crates/embassy-rp/git.zup | 31 | docserver-builder -i ./embassy-rp -o webroot/crates/embassy-rp/git.zup |
| 32 | docserver-builder -i ./embassy-sync -o crates/embassy-sync/git.zup | 32 | docserver-builder -i ./embassy-sync -o webroot/crates/embassy-sync/git.zup |
| 33 | docserver-builder -i ./embassy-time -o crates/embassy-time/git.zup | 33 | docserver-builder -i ./embassy-time -o webroot/crates/embassy-time/git.zup |
| 34 | docserver-builder -i ./embassy-usb -o crates/embassy-usb/git.zup | 34 | docserver-builder -i ./embassy-usb -o webroot/crates/embassy-usb/git.zup |
| 35 | docserver-builder -i ./embassy-usb-driver -o crates/embassy-usb-driver/git.zup | 35 | docserver-builder -i ./embassy-usb-driver -o webroot/crates/embassy-usb-driver/git.zup |
| 36 | docserver-builder -i ./embassy-usb-logger -o crates/embassy-usb-logger/git.zup | 36 | docserver-builder -i ./embassy-usb-logger -o webroot/crates/embassy-usb-logger/git.zup |
| 37 | docserver-builder -i ./cyw43 -o crates/cyw43/git.zup | 37 | docserver-builder -i ./cyw43 -o webroot/crates/cyw43/git.zup |
| 38 | docserver-builder -i ./cyw43-pio -o crates/cyw43-pio/git.zup | 38 | docserver-builder -i ./cyw43-pio -o webroot/crates/cyw43-pio/git.zup |
| 39 | docserver-builder -i ./embassy-net-w5500 -o crates/embassy-net-w5500/git.zup | 39 | docserver-builder -i ./embassy-net-w5500 -o webroot/crates/embassy-net-w5500/git.zup |
| 40 | docserver-builder -i ./embassy-stm32-wpan -o crates/embassy-stm32-wpan/git.zup | 40 | docserver-builder -i ./embassy-stm32-wpan -o webroot/crates/embassy-stm32-wpan/git.zup --output-static webroot/static |
| 41 | 41 | ||
| 42 | export KUBECONFIG=/ci/secrets/kubeconfig.yml | 42 | export KUBECONFIG=/ci/secrets/kubeconfig.yml |
| 43 | POD=$(kubectl -n embassy get po -l app=docserver -o jsonpath={.items[0].metadata.name}) | 43 | POD=$(kubectl -n embassy get po -l app=docserver -o jsonpath={.items[0].metadata.name}) |
| 44 | kubectl cp crates $POD:/data | 44 | kubectl cp webroot/crates $POD:/data |
| 45 | kubectl cp webroot/static $POD:/data \ No newline at end of file | ||
diff --git a/cyw43/Cargo.toml b/cyw43/Cargo.toml index 61caa0272..7d2f9dfd0 100644 --- a/cyw43/Cargo.toml +++ b/cyw43/Cargo.toml | |||
| @@ -24,7 +24,7 @@ cortex-m = "0.7.6" | |||
| 24 | cortex-m-rt = "0.7.0" | 24 | cortex-m-rt = "0.7.0" |
| 25 | futures = { version = "0.3.17", default-features = false, features = ["async-await", "cfg-target-has-atomic", "unstable"] } | 25 | futures = { version = "0.3.17", default-features = false, features = ["async-await", "cfg-target-has-atomic", "unstable"] } |
| 26 | 26 | ||
| 27 | embedded-hal-1 = { package = "embedded-hal", version = "1.0.0-alpha.10" } | 27 | embedded-hal-1 = { package = "embedded-hal", version = "1.0.0-alpha.11" } |
| 28 | num_enum = { version = "0.5.7", default-features = false } | 28 | num_enum = { version = "0.5.7", default-features = false } |
| 29 | 29 | ||
| 30 | [package.metadata.embassy_docs] | 30 | [package.metadata.embassy_docs] |
diff --git a/cyw43/src/runner.rs b/cyw43/src/runner.rs index 5706696b4..1c187faa5 100644 --- a/cyw43/src/runner.rs +++ b/cyw43/src/runner.rs | |||
| @@ -345,7 +345,9 @@ where | |||
| 345 | } | 345 | } |
| 346 | 346 | ||
| 347 | fn rx(&mut self, packet: &mut [u8]) { | 347 | fn rx(&mut self, packet: &mut [u8]) { |
| 348 | let Some((sdpcm_header, payload)) = SdpcmHeader::parse(packet) else { return }; | 348 | let Some((sdpcm_header, payload)) = SdpcmHeader::parse(packet) else { |
| 349 | return; | ||
| 350 | }; | ||
| 349 | 351 | ||
| 350 | self.update_credit(&sdpcm_header); | 352 | self.update_credit(&sdpcm_header); |
| 351 | 353 | ||
| @@ -353,7 +355,9 @@ where | |||
| 353 | 355 | ||
| 354 | match channel { | 356 | match channel { |
| 355 | CHANNEL_TYPE_CONTROL => { | 357 | CHANNEL_TYPE_CONTROL => { |
| 356 | let Some((cdc_header, response)) = CdcHeader::parse(payload) else { return; }; | 358 | let Some((cdc_header, response)) = CdcHeader::parse(payload) else { |
| 359 | return; | ||
| 360 | }; | ||
| 357 | trace!(" {:?}", cdc_header); | 361 | trace!(" {:?}", cdc_header); |
| 358 | 362 | ||
| 359 | if cdc_header.id == self.ioctl_id { | 363 | if cdc_header.id == self.ioctl_id { |
| @@ -417,8 +421,12 @@ where | |||
| 417 | let status = event_packet.msg.status; | 421 | let status = event_packet.msg.status; |
| 418 | let event_payload = match evt_type { | 422 | let event_payload = match evt_type { |
| 419 | Event::ESCAN_RESULT if status == EStatus::PARTIAL => { | 423 | Event::ESCAN_RESULT if status == EStatus::PARTIAL => { |
| 420 | let Some((_, bss_info)) = ScanResults::parse(evt_data) else { return }; | 424 | let Some((_, bss_info)) = ScanResults::parse(evt_data) else { |
| 421 | let Some(bss_info) = BssInfo::parse(bss_info) else { return }; | 425 | return; |
| 426 | }; | ||
| 427 | let Some(bss_info) = BssInfo::parse(bss_info) else { | ||
| 428 | return; | ||
| 429 | }; | ||
| 422 | events::Payload::BssInfo(*bss_info) | 430 | events::Payload::BssInfo(*bss_info) |
| 423 | } | 431 | } |
| 424 | Event::ESCAN_RESULT => events::Payload::None, | 432 | Event::ESCAN_RESULT => events::Payload::None, |
| @@ -439,7 +447,9 @@ where | |||
| 439 | } | 447 | } |
| 440 | } | 448 | } |
| 441 | CHANNEL_TYPE_DATA => { | 449 | CHANNEL_TYPE_DATA => { |
| 442 | let Some((_, packet)) = BdcHeader::parse(payload) else { return }; | 450 | let Some((_, packet)) = BdcHeader::parse(payload) else { |
| 451 | return; | ||
| 452 | }; | ||
| 443 | trace!("rx pkt {:02x}", Bytes(&packet[..packet.len().min(48)])); | 453 | trace!("rx pkt {:02x}", Bytes(&packet[..packet.len().min(48)])); |
| 444 | 454 | ||
| 445 | match self.ch.try_rx_buf() { | 455 | match self.ch.try_rx_buf() { |
diff --git a/embassy-embedded-hal/Cargo.toml b/embassy-embedded-hal/Cargo.toml index 35c70bb63..2d11dc3c7 100644 --- a/embassy-embedded-hal/Cargo.toml +++ b/embassy-embedded-hal/Cargo.toml | |||
| @@ -15,15 +15,18 @@ target = "x86_64-unknown-linux-gnu" | |||
| 15 | std = [] | 15 | std = [] |
| 16 | # Enable nightly-only features | 16 | # Enable nightly-only features |
| 17 | nightly = ["embassy-futures", "embedded-hal-async", "embedded-storage-async"] | 17 | nightly = ["embassy-futures", "embedded-hal-async", "embedded-storage-async"] |
| 18 | time = ["dep:embassy-time"] | ||
| 19 | default = ["time"] | ||
| 18 | 20 | ||
| 19 | [dependencies] | 21 | [dependencies] |
| 20 | embassy-futures = { version = "0.1.0", path = "../embassy-futures", optional = true } | 22 | embassy-futures = { version = "0.1.0", path = "../embassy-futures", optional = true } |
| 21 | embassy-sync = { version = "0.2.0", path = "../embassy-sync" } | 23 | embassy-sync = { version = "0.2.0", path = "../embassy-sync" } |
| 24 | embassy-time = { version = "0.1.0", path = "../embassy-time", optional = true } | ||
| 22 | embedded-hal-02 = { package = "embedded-hal", version = "0.2.6", features = [ | 25 | embedded-hal-02 = { package = "embedded-hal", version = "0.2.6", features = [ |
| 23 | "unproven", | 26 | "unproven", |
| 24 | ] } | 27 | ] } |
| 25 | embedded-hal-1 = { package = "embedded-hal", version = "=1.0.0-alpha.10" } | 28 | embedded-hal-1 = { package = "embedded-hal", version = "=1.0.0-alpha.11" } |
| 26 | embedded-hal-async = { version = "=0.2.0-alpha.1", optional = true } | 29 | embedded-hal-async = { version = "=0.2.0-alpha.2", optional = true } |
| 27 | embedded-storage = "0.3.0" | 30 | embedded-storage = "0.3.0" |
| 28 | embedded-storage-async = { version = "0.4.0", optional = true } | 31 | embedded-storage-async = { version = "0.4.0", optional = true } |
| 29 | nb = "1.0.0" | 32 | nb = "1.0.0" |
diff --git a/embassy-embedded-hal/src/adapter/blocking_async.rs b/embassy-embedded-hal/src/adapter/blocking_async.rs index b996d6a75..98ae2b02c 100644 --- a/embassy-embedded-hal/src/adapter/blocking_async.rs +++ b/embassy-embedded-hal/src/adapter/blocking_async.rs | |||
| @@ -74,47 +74,30 @@ where | |||
| 74 | E: embedded_hal_1::spi::Error + 'static, | 74 | E: embedded_hal_1::spi::Error + 'static, |
| 75 | T: blocking::spi::Transfer<u8, Error = E> + blocking::spi::Write<u8, Error = E>, | 75 | T: blocking::spi::Transfer<u8, Error = E> + blocking::spi::Write<u8, Error = E>, |
| 76 | { | 76 | { |
| 77 | async fn transfer<'a>(&'a mut self, read: &'a mut [u8], write: &'a [u8]) -> Result<(), Self::Error> { | 77 | async fn flush(&mut self) -> Result<(), Self::Error> { |
| 78 | // Ensure we write the expected bytes | ||
| 79 | for i in 0..core::cmp::min(read.len(), write.len()) { | ||
| 80 | read[i] = write[i].clone(); | ||
| 81 | } | ||
| 82 | self.wrapped.transfer(read)?; | ||
| 83 | Ok(()) | 78 | Ok(()) |
| 84 | } | 79 | } |
| 85 | 80 | ||
| 86 | async fn transfer_in_place<'a>(&'a mut self, _: &'a mut [u8]) -> Result<(), Self::Error> { | 81 | async fn write(&mut self, data: &[u8]) -> Result<(), Self::Error> { |
| 87 | todo!() | 82 | self.wrapped.write(data)?; |
| 83 | Ok(()) | ||
| 88 | } | 84 | } |
| 89 | } | ||
| 90 | 85 | ||
| 91 | impl<T, E> embedded_hal_async::spi::SpiBusFlush for BlockingAsync<T> | 86 | async fn read(&mut self, data: &mut [u8]) -> Result<(), Self::Error> { |
| 92 | where | 87 | self.wrapped.transfer(data)?; |
| 93 | E: embedded_hal_1::spi::Error + 'static, | ||
| 94 | T: blocking::spi::Transfer<u8, Error = E> + blocking::spi::Write<u8, Error = E>, | ||
| 95 | { | ||
| 96 | async fn flush(&mut self) -> Result<(), Self::Error> { | ||
| 97 | Ok(()) | 88 | Ok(()) |
| 98 | } | 89 | } |
| 99 | } | ||
| 100 | 90 | ||
| 101 | impl<T, E> embedded_hal_async::spi::SpiBusWrite<u8> for BlockingAsync<T> | 91 | async fn transfer(&mut self, read: &mut [u8], write: &[u8]) -> Result<(), Self::Error> { |
| 102 | where | 92 | // Ensure we write the expected bytes |
| 103 | E: embedded_hal_1::spi::Error + 'static, | 93 | for i in 0..core::cmp::min(read.len(), write.len()) { |
| 104 | T: blocking::spi::Transfer<u8, Error = E> + blocking::spi::Write<u8, Error = E>, | 94 | read[i] = write[i].clone(); |
| 105 | { | 95 | } |
| 106 | async fn write(&mut self, data: &[u8]) -> Result<(), Self::Error> { | 96 | self.wrapped.transfer(read)?; |
| 107 | self.wrapped.write(data)?; | ||
| 108 | Ok(()) | 97 | Ok(()) |
| 109 | } | 98 | } |
| 110 | } | ||
| 111 | 99 | ||
| 112 | impl<T, E> embedded_hal_async::spi::SpiBusRead<u8> for BlockingAsync<T> | 100 | async fn transfer_in_place(&mut self, data: &mut [u8]) -> Result<(), Self::Error> { |
| 113 | where | ||
| 114 | E: embedded_hal_1::spi::Error + 'static, | ||
| 115 | T: blocking::spi::Transfer<u8, Error = E> + blocking::spi::Write<u8, Error = E>, | ||
| 116 | { | ||
| 117 | async fn read(&mut self, data: &mut [u8]) -> Result<(), Self::Error> { | ||
| 118 | self.wrapped.transfer(data)?; | 101 | self.wrapped.transfer(data)?; |
| 119 | Ok(()) | 102 | Ok(()) |
| 120 | } | 103 | } |
diff --git a/embassy-embedded-hal/src/adapter/yielding_async.rs b/embassy-embedded-hal/src/adapter/yielding_async.rs index f51e4076f..fe9c9c341 100644 --- a/embassy-embedded-hal/src/adapter/yielding_async.rs +++ b/embassy-embedded-hal/src/adapter/yielding_async.rs | |||
| @@ -69,51 +69,36 @@ where | |||
| 69 | type Error = T::Error; | 69 | type Error = T::Error; |
| 70 | } | 70 | } |
| 71 | 71 | ||
| 72 | impl<T> embedded_hal_async::spi::SpiBus<u8> for YieldingAsync<T> | 72 | impl<T, Word: 'static + Copy> embedded_hal_async::spi::SpiBus<Word> for YieldingAsync<T> |
| 73 | where | 73 | where |
| 74 | T: embedded_hal_async::spi::SpiBus, | 74 | T: embedded_hal_async::spi::SpiBus<Word>, |
| 75 | { | 75 | { |
| 76 | async fn transfer<'a>(&'a mut self, read: &'a mut [u8], write: &'a [u8]) -> Result<(), Self::Error> { | 76 | async fn flush(&mut self) -> Result<(), Self::Error> { |
| 77 | self.wrapped.transfer(read, write).await?; | 77 | self.wrapped.flush().await?; |
| 78 | yield_now().await; | 78 | yield_now().await; |
| 79 | Ok(()) | 79 | Ok(()) |
| 80 | } | 80 | } |
| 81 | 81 | ||
| 82 | async fn transfer_in_place<'a>(&'a mut self, words: &'a mut [u8]) -> Result<(), Self::Error> { | 82 | async fn write(&mut self, data: &[Word]) -> Result<(), Self::Error> { |
| 83 | self.wrapped.transfer_in_place(words).await?; | 83 | self.wrapped.write(data).await?; |
| 84 | yield_now().await; | 84 | yield_now().await; |
| 85 | Ok(()) | 85 | Ok(()) |
| 86 | } | 86 | } |
| 87 | } | ||
| 88 | 87 | ||
| 89 | impl<T> embedded_hal_async::spi::SpiBusFlush for YieldingAsync<T> | 88 | async fn read(&mut self, data: &mut [Word]) -> Result<(), Self::Error> { |
| 90 | where | 89 | self.wrapped.read(data).await?; |
| 91 | T: embedded_hal_async::spi::SpiBusFlush, | ||
| 92 | { | ||
| 93 | async fn flush(&mut self) -> Result<(), Self::Error> { | ||
| 94 | self.wrapped.flush().await?; | ||
| 95 | yield_now().await; | 90 | yield_now().await; |
| 96 | Ok(()) | 91 | Ok(()) |
| 97 | } | 92 | } |
| 98 | } | ||
| 99 | 93 | ||
| 100 | impl<T> embedded_hal_async::spi::SpiBusWrite<u8> for YieldingAsync<T> | 94 | async fn transfer(&mut self, read: &mut [Word], write: &[Word]) -> Result<(), Self::Error> { |
| 101 | where | 95 | self.wrapped.transfer(read, write).await?; |
| 102 | T: embedded_hal_async::spi::SpiBusWrite<u8>, | ||
| 103 | { | ||
| 104 | async fn write(&mut self, data: &[u8]) -> Result<(), Self::Error> { | ||
| 105 | self.wrapped.write(data).await?; | ||
| 106 | yield_now().await; | 96 | yield_now().await; |
| 107 | Ok(()) | 97 | Ok(()) |
| 108 | } | 98 | } |
| 109 | } | ||
| 110 | 99 | ||
| 111 | impl<T> embedded_hal_async::spi::SpiBusRead<u8> for YieldingAsync<T> | 100 | async fn transfer_in_place(&mut self, words: &mut [Word]) -> Result<(), Self::Error> { |
| 112 | where | 101 | self.wrapped.transfer_in_place(words).await?; |
| 113 | T: embedded_hal_async::spi::SpiBusRead<u8>, | ||
| 114 | { | ||
| 115 | async fn read(&mut self, data: &mut [u8]) -> Result<(), Self::Error> { | ||
| 116 | self.wrapped.read(data).await?; | ||
| 117 | yield_now().await; | 102 | yield_now().await; |
| 118 | Ok(()) | 103 | Ok(()) |
| 119 | } | 104 | } |
diff --git a/embassy-embedded-hal/src/shared_bus/asynch/spi.rs b/embassy-embedded-hal/src/shared_bus/asynch/spi.rs index b5549a6cd..030392183 100644 --- a/embassy-embedded-hal/src/shared_bus/asynch/spi.rs +++ b/embassy-embedded-hal/src/shared_bus/asynch/spi.rs | |||
| @@ -56,62 +56,6 @@ where | |||
| 56 | type Error = SpiDeviceError<BUS::Error, CS::Error>; | 56 | type Error = SpiDeviceError<BUS::Error, CS::Error>; |
| 57 | } | 57 | } |
| 58 | 58 | ||
| 59 | impl<M, BUS, CS> spi::SpiDeviceRead for SpiDevice<'_, M, BUS, CS> | ||
| 60 | where | ||
| 61 | M: RawMutex, | ||
| 62 | BUS: spi::SpiBusRead, | ||
| 63 | CS: OutputPin, | ||
| 64 | { | ||
| 65 | async fn read_transaction(&mut self, operations: &mut [&mut [u8]]) -> Result<(), Self::Error> { | ||
| 66 | let mut bus = self.bus.lock().await; | ||
| 67 | self.cs.set_low().map_err(SpiDeviceError::Cs)?; | ||
| 68 | |||
| 69 | let op_res: Result<(), BUS::Error> = try { | ||
| 70 | for buf in operations { | ||
| 71 | bus.read(buf).await?; | ||
| 72 | } | ||
| 73 | }; | ||
| 74 | |||
| 75 | // On failure, it's important to still flush and deassert CS. | ||
| 76 | let flush_res = bus.flush().await; | ||
| 77 | let cs_res = self.cs.set_high(); | ||
| 78 | |||
| 79 | let op_res = op_res.map_err(SpiDeviceError::Spi)?; | ||
| 80 | flush_res.map_err(SpiDeviceError::Spi)?; | ||
| 81 | cs_res.map_err(SpiDeviceError::Cs)?; | ||
| 82 | |||
| 83 | Ok(op_res) | ||
| 84 | } | ||
| 85 | } | ||
| 86 | |||
| 87 | impl<M, BUS, CS> spi::SpiDeviceWrite for SpiDevice<'_, M, BUS, CS> | ||
| 88 | where | ||
| 89 | M: RawMutex, | ||
| 90 | BUS: spi::SpiBusWrite, | ||
| 91 | CS: OutputPin, | ||
| 92 | { | ||
| 93 | async fn write_transaction(&mut self, operations: &[&[u8]]) -> Result<(), Self::Error> { | ||
| 94 | let mut bus = self.bus.lock().await; | ||
| 95 | self.cs.set_low().map_err(SpiDeviceError::Cs)?; | ||
| 96 | |||
| 97 | let op_res: Result<(), BUS::Error> = try { | ||
| 98 | for buf in operations { | ||
| 99 | bus.write(buf).await?; | ||
| 100 | } | ||
| 101 | }; | ||
| 102 | |||
| 103 | // On failure, it's important to still flush and deassert CS. | ||
| 104 | let flush_res = bus.flush().await; | ||
| 105 | let cs_res = self.cs.set_high(); | ||
| 106 | |||
| 107 | let op_res = op_res.map_err(SpiDeviceError::Spi)?; | ||
| 108 | flush_res.map_err(SpiDeviceError::Spi)?; | ||
| 109 | cs_res.map_err(SpiDeviceError::Cs)?; | ||
| 110 | |||
| 111 | Ok(op_res) | ||
| 112 | } | ||
| 113 | } | ||
| 114 | |||
| 115 | impl<M, BUS, CS> spi::SpiDevice for SpiDevice<'_, M, BUS, CS> | 59 | impl<M, BUS, CS> spi::SpiDevice for SpiDevice<'_, M, BUS, CS> |
| 116 | where | 60 | where |
| 117 | M: RawMutex, | 61 | M: RawMutex, |
| @@ -129,6 +73,12 @@ where | |||
| 129 | Operation::Write(buf) => bus.write(buf).await?, | 73 | Operation::Write(buf) => bus.write(buf).await?, |
| 130 | Operation::Transfer(read, write) => bus.transfer(read, write).await?, | 74 | Operation::Transfer(read, write) => bus.transfer(read, write).await?, |
| 131 | Operation::TransferInPlace(buf) => bus.transfer_in_place(buf).await?, | 75 | Operation::TransferInPlace(buf) => bus.transfer_in_place(buf).await?, |
| 76 | #[cfg(not(feature = "time"))] | ||
| 77 | Operation::DelayUs(_) => return Err(SpiDeviceError::DelayUsNotSupported), | ||
| 78 | #[cfg(feature = "time")] | ||
| 79 | Operation::DelayUs(us) => { | ||
| 80 | embassy_time::Timer::after(embassy_time::Duration::from_micros(*us as _)).await | ||
| 81 | } | ||
| 132 | } | 82 | } |
| 133 | } | 83 | } |
| 134 | }; | 84 | }; |
| @@ -172,64 +122,6 @@ where | |||
| 172 | type Error = SpiDeviceError<BUS::Error, CS::Error>; | 122 | type Error = SpiDeviceError<BUS::Error, CS::Error>; |
| 173 | } | 123 | } |
| 174 | 124 | ||
| 175 | impl<M, BUS, CS> spi::SpiDeviceWrite for SpiDeviceWithConfig<'_, M, BUS, CS> | ||
| 176 | where | ||
| 177 | M: RawMutex, | ||
| 178 | BUS: spi::SpiBusWrite + SetConfig, | ||
| 179 | CS: OutputPin, | ||
| 180 | { | ||
| 181 | async fn write_transaction(&mut self, operations: &[&[u8]]) -> Result<(), Self::Error> { | ||
| 182 | let mut bus = self.bus.lock().await; | ||
| 183 | bus.set_config(&self.config); | ||
| 184 | self.cs.set_low().map_err(SpiDeviceError::Cs)?; | ||
| 185 | |||
| 186 | let op_res: Result<(), BUS::Error> = try { | ||
| 187 | for buf in operations { | ||
| 188 | bus.write(buf).await?; | ||
| 189 | } | ||
| 190 | }; | ||
| 191 | |||
| 192 | // On failure, it's important to still flush and deassert CS. | ||
| 193 | let flush_res = bus.flush().await; | ||
| 194 | let cs_res = self.cs.set_high(); | ||
| 195 | |||
| 196 | let op_res = op_res.map_err(SpiDeviceError::Spi)?; | ||
| 197 | flush_res.map_err(SpiDeviceError::Spi)?; | ||
| 198 | cs_res.map_err(SpiDeviceError::Cs)?; | ||
| 199 | |||
| 200 | Ok(op_res) | ||
| 201 | } | ||
| 202 | } | ||
| 203 | |||
| 204 | impl<M, BUS, CS> spi::SpiDeviceRead for SpiDeviceWithConfig<'_, M, BUS, CS> | ||
| 205 | where | ||
| 206 | M: RawMutex, | ||
| 207 | BUS: spi::SpiBusRead + SetConfig, | ||
| 208 | CS: OutputPin, | ||
| 209 | { | ||
| 210 | async fn read_transaction(&mut self, operations: &mut [&mut [u8]]) -> Result<(), Self::Error> { | ||
| 211 | let mut bus = self.bus.lock().await; | ||
| 212 | bus.set_config(&self.config); | ||
| 213 | self.cs.set_low().map_err(SpiDeviceError::Cs)?; | ||
| 214 | |||
| 215 | let op_res: Result<(), BUS::Error> = try { | ||
| 216 | for buf in operations { | ||
| 217 | bus.read(buf).await?; | ||
| 218 | } | ||
| 219 | }; | ||
| 220 | |||
| 221 | // On failure, it's important to still flush and deassert CS. | ||
| 222 | let flush_res = bus.flush().await; | ||
| 223 | let cs_res = self.cs.set_high(); | ||
| 224 | |||
| 225 | let op_res = op_res.map_err(SpiDeviceError::Spi)?; | ||
| 226 | flush_res.map_err(SpiDeviceError::Spi)?; | ||
| 227 | cs_res.map_err(SpiDeviceError::Cs)?; | ||
| 228 | |||
| 229 | Ok(op_res) | ||
| 230 | } | ||
| 231 | } | ||
| 232 | |||
| 233 | impl<M, BUS, CS> spi::SpiDevice for SpiDeviceWithConfig<'_, M, BUS, CS> | 125 | impl<M, BUS, CS> spi::SpiDevice for SpiDeviceWithConfig<'_, M, BUS, CS> |
| 234 | where | 126 | where |
| 235 | M: RawMutex, | 127 | M: RawMutex, |
| @@ -248,6 +140,12 @@ where | |||
| 248 | Operation::Write(buf) => bus.write(buf).await?, | 140 | Operation::Write(buf) => bus.write(buf).await?, |
| 249 | Operation::Transfer(read, write) => bus.transfer(read, write).await?, | 141 | Operation::Transfer(read, write) => bus.transfer(read, write).await?, |
| 250 | Operation::TransferInPlace(buf) => bus.transfer_in_place(buf).await?, | 142 | Operation::TransferInPlace(buf) => bus.transfer_in_place(buf).await?, |
| 143 | #[cfg(not(feature = "time"))] | ||
| 144 | Operation::DelayUs(_) => return Err(SpiDeviceError::DelayUsNotSupported), | ||
| 145 | #[cfg(feature = "time")] | ||
| 146 | Operation::DelayUs(us) => { | ||
| 147 | embassy_time::Timer::after(embassy_time::Duration::from_micros(*us as _)).await | ||
| 148 | } | ||
| 251 | } | 149 | } |
| 252 | } | 150 | } |
| 253 | }; | 151 | }; |
diff --git a/embassy-embedded-hal/src/shared_bus/blocking/spi.rs b/embassy-embedded-hal/src/shared_bus/blocking/spi.rs index 22e013be9..6d03d6263 100644 --- a/embassy-embedded-hal/src/shared_bus/blocking/spi.rs +++ b/embassy-embedded-hal/src/shared_bus/blocking/spi.rs | |||
| @@ -22,7 +22,7 @@ use core::cell::RefCell; | |||
| 22 | use embassy_sync::blocking_mutex::raw::RawMutex; | 22 | use embassy_sync::blocking_mutex::raw::RawMutex; |
| 23 | use embassy_sync::blocking_mutex::Mutex; | 23 | use embassy_sync::blocking_mutex::Mutex; |
| 24 | use embedded_hal_1::digital::OutputPin; | 24 | use embedded_hal_1::digital::OutputPin; |
| 25 | use embedded_hal_1::spi::{self, Operation, SpiBus, SpiBusRead, SpiBusWrite}; | 25 | use embedded_hal_1::spi::{self, Operation, SpiBus}; |
| 26 | 26 | ||
| 27 | use crate::shared_bus::SpiDeviceError; | 27 | use crate::shared_bus::SpiDeviceError; |
| 28 | use crate::SetConfig; | 28 | use crate::SetConfig; |
| @@ -48,58 +48,6 @@ where | |||
| 48 | type Error = SpiDeviceError<BUS::Error, CS::Error>; | 48 | type Error = SpiDeviceError<BUS::Error, CS::Error>; |
| 49 | } | 49 | } |
| 50 | 50 | ||
| 51 | impl<BUS, M, CS> embedded_hal_1::spi::SpiDeviceRead for SpiDevice<'_, M, BUS, CS> | ||
| 52 | where | ||
| 53 | M: RawMutex, | ||
| 54 | BUS: SpiBusRead, | ||
| 55 | CS: OutputPin, | ||
| 56 | { | ||
| 57 | fn read_transaction(&mut self, operations: &mut [&mut [u8]]) -> Result<(), Self::Error> { | ||
| 58 | self.bus.lock(|bus| { | ||
| 59 | let mut bus = bus.borrow_mut(); | ||
| 60 | self.cs.set_low().map_err(SpiDeviceError::Cs)?; | ||
| 61 | |||
| 62 | let op_res = operations.iter_mut().try_for_each(|buf| bus.read(buf)); | ||
| 63 | |||
| 64 | // On failure, it's important to still flush and deassert CS. | ||
| 65 | let flush_res = bus.flush(); | ||
| 66 | let cs_res = self.cs.set_high(); | ||
| 67 | |||
| 68 | let op_res = op_res.map_err(SpiDeviceError::Spi)?; | ||
| 69 | flush_res.map_err(SpiDeviceError::Spi)?; | ||
| 70 | cs_res.map_err(SpiDeviceError::Cs)?; | ||
| 71 | |||
| 72 | Ok(op_res) | ||
| 73 | }) | ||
| 74 | } | ||
| 75 | } | ||
| 76 | |||
| 77 | impl<BUS, M, CS> embedded_hal_1::spi::SpiDeviceWrite for SpiDevice<'_, M, BUS, CS> | ||
| 78 | where | ||
| 79 | M: RawMutex, | ||
| 80 | BUS: SpiBusWrite, | ||
| 81 | CS: OutputPin, | ||
| 82 | { | ||
| 83 | fn write_transaction(&mut self, operations: &[&[u8]]) -> Result<(), Self::Error> { | ||
| 84 | self.bus.lock(|bus| { | ||
| 85 | let mut bus = bus.borrow_mut(); | ||
| 86 | self.cs.set_low().map_err(SpiDeviceError::Cs)?; | ||
| 87 | |||
| 88 | let op_res = operations.iter().try_for_each(|buf| bus.write(buf)); | ||
| 89 | |||
| 90 | // On failure, it's important to still flush and deassert CS. | ||
| 91 | let flush_res = bus.flush(); | ||
| 92 | let cs_res = self.cs.set_high(); | ||
| 93 | |||
| 94 | let op_res = op_res.map_err(SpiDeviceError::Spi)?; | ||
| 95 | flush_res.map_err(SpiDeviceError::Spi)?; | ||
| 96 | cs_res.map_err(SpiDeviceError::Cs)?; | ||
| 97 | |||
| 98 | Ok(op_res) | ||
| 99 | }) | ||
| 100 | } | ||
| 101 | } | ||
| 102 | |||
| 103 | impl<BUS, M, CS> embedded_hal_1::spi::SpiDevice for SpiDevice<'_, M, BUS, CS> | 51 | impl<BUS, M, CS> embedded_hal_1::spi::SpiDevice for SpiDevice<'_, M, BUS, CS> |
| 104 | where | 52 | where |
| 105 | M: RawMutex, | 53 | M: RawMutex, |
| @@ -116,6 +64,13 @@ where | |||
| 116 | Operation::Write(buf) => bus.write(buf), | 64 | Operation::Write(buf) => bus.write(buf), |
| 117 | Operation::Transfer(read, write) => bus.transfer(read, write), | 65 | Operation::Transfer(read, write) => bus.transfer(read, write), |
| 118 | Operation::TransferInPlace(buf) => bus.transfer_in_place(buf), | 66 | Operation::TransferInPlace(buf) => bus.transfer_in_place(buf), |
| 67 | #[cfg(not(feature = "time"))] | ||
| 68 | Operation::DelayUs(_) => Err(SpiDeviceError::DelayUsNotSupported), | ||
| 69 | #[cfg(feature = "time")] | ||
| 70 | Operation::DelayUs(us) => { | ||
| 71 | embassy_time::block_for(embassy_time::Duration::from_micros(*us as _)); | ||
| 72 | Ok(()) | ||
| 73 | } | ||
| 119 | }); | 74 | }); |
| 120 | 75 | ||
| 121 | // On failure, it's important to still flush and deassert CS. | 76 | // On failure, it's important to still flush and deassert CS. |
| @@ -199,58 +154,6 @@ where | |||
| 199 | type Error = SpiDeviceError<BUS::Error, CS::Error>; | 154 | type Error = SpiDeviceError<BUS::Error, CS::Error>; |
| 200 | } | 155 | } |
| 201 | 156 | ||
| 202 | impl<BUS, M, CS> embedded_hal_1::spi::SpiDeviceRead for SpiDeviceWithConfig<'_, M, BUS, CS> | ||
| 203 | where | ||
| 204 | M: RawMutex, | ||
| 205 | BUS: SpiBusRead + SetConfig, | ||
| 206 | CS: OutputPin, | ||
| 207 | { | ||
| 208 | fn read_transaction(&mut self, operations: &mut [&mut [u8]]) -> Result<(), Self::Error> { | ||
| 209 | self.bus.lock(|bus| { | ||
| 210 | let mut bus = bus.borrow_mut(); | ||
| 211 | bus.set_config(&self.config); | ||
| 212 | self.cs.set_low().map_err(SpiDeviceError::Cs)?; | ||
| 213 | |||
| 214 | let op_res = operations.iter_mut().try_for_each(|buf| bus.read(buf)); | ||
| 215 | |||
| 216 | // On failure, it's important to still flush and deassert CS. | ||
| 217 | let flush_res = bus.flush(); | ||
| 218 | let cs_res = self.cs.set_high(); | ||
| 219 | |||
| 220 | let op_res = op_res.map_err(SpiDeviceError::Spi)?; | ||
| 221 | flush_res.map_err(SpiDeviceError::Spi)?; | ||
| 222 | cs_res.map_err(SpiDeviceError::Cs)?; | ||
| 223 | Ok(op_res) | ||
| 224 | }) | ||
| 225 | } | ||
| 226 | } | ||
| 227 | |||
| 228 | impl<BUS, M, CS> embedded_hal_1::spi::SpiDeviceWrite for SpiDeviceWithConfig<'_, M, BUS, CS> | ||
| 229 | where | ||
| 230 | M: RawMutex, | ||
| 231 | BUS: SpiBusWrite + SetConfig, | ||
| 232 | CS: OutputPin, | ||
| 233 | { | ||
| 234 | fn write_transaction(&mut self, operations: &[&[u8]]) -> Result<(), Self::Error> { | ||
| 235 | self.bus.lock(|bus| { | ||
| 236 | let mut bus = bus.borrow_mut(); | ||
| 237 | bus.set_config(&self.config); | ||
| 238 | self.cs.set_low().map_err(SpiDeviceError::Cs)?; | ||
| 239 | |||
| 240 | let op_res = operations.iter().try_for_each(|buf| bus.write(buf)); | ||
| 241 | |||
| 242 | // On failure, it's important to still flush and deassert CS. | ||
| 243 | let flush_res = bus.flush(); | ||
| 244 | let cs_res = self.cs.set_high(); | ||
| 245 | |||
| 246 | let op_res = op_res.map_err(SpiDeviceError::Spi)?; | ||
| 247 | flush_res.map_err(SpiDeviceError::Spi)?; | ||
| 248 | cs_res.map_err(SpiDeviceError::Cs)?; | ||
| 249 | Ok(op_res) | ||
| 250 | }) | ||
| 251 | } | ||
| 252 | } | ||
| 253 | |||
| 254 | impl<BUS, M, CS> embedded_hal_1::spi::SpiDevice for SpiDeviceWithConfig<'_, M, BUS, CS> | 157 | impl<BUS, M, CS> embedded_hal_1::spi::SpiDevice for SpiDeviceWithConfig<'_, M, BUS, CS> |
| 255 | where | 158 | where |
| 256 | M: RawMutex, | 159 | M: RawMutex, |
| @@ -268,6 +171,13 @@ where | |||
| 268 | Operation::Write(buf) => bus.write(buf), | 171 | Operation::Write(buf) => bus.write(buf), |
| 269 | Operation::Transfer(read, write) => bus.transfer(read, write), | 172 | Operation::Transfer(read, write) => bus.transfer(read, write), |
| 270 | Operation::TransferInPlace(buf) => bus.transfer_in_place(buf), | 173 | Operation::TransferInPlace(buf) => bus.transfer_in_place(buf), |
| 174 | #[cfg(not(feature = "time"))] | ||
| 175 | Operation::DelayUs(_) => Err(SpiDeviceError::DelayUsNotSupported), | ||
| 176 | #[cfg(feature = "time")] | ||
| 177 | Operation::DelayUs(us) => { | ||
| 178 | embassy_time::block_for(embassy_time::Duration::from_micros(*us as _)); | ||
| 179 | Ok(()) | ||
| 180 | } | ||
| 271 | }); | 181 | }); |
| 272 | 182 | ||
| 273 | // On failure, it's important to still flush and deassert CS. | 183 | // On failure, it's important to still flush and deassert CS. |
diff --git a/embassy-embedded-hal/src/shared_bus/mod.rs b/embassy-embedded-hal/src/shared_bus/mod.rs index 617d921e9..79a90bd52 100644 --- a/embassy-embedded-hal/src/shared_bus/mod.rs +++ b/embassy-embedded-hal/src/shared_bus/mod.rs | |||
| @@ -30,11 +30,14 @@ where | |||
| 30 | /// Error returned by SPI device implementations in this crate. | 30 | /// Error returned by SPI device implementations in this crate. |
| 31 | #[derive(Copy, Clone, Eq, PartialEq, Debug)] | 31 | #[derive(Copy, Clone, Eq, PartialEq, Debug)] |
| 32 | #[cfg_attr(feature = "defmt", derive(defmt::Format))] | 32 | #[cfg_attr(feature = "defmt", derive(defmt::Format))] |
| 33 | #[non_exhaustive] | ||
| 33 | pub enum SpiDeviceError<BUS, CS> { | 34 | pub enum SpiDeviceError<BUS, CS> { |
| 34 | /// An operation on the inner SPI bus failed. | 35 | /// An operation on the inner SPI bus failed. |
| 35 | Spi(BUS), | 36 | Spi(BUS), |
| 36 | /// Setting the value of the Chip Select (CS) pin failed. | 37 | /// Setting the value of the Chip Select (CS) pin failed. |
| 37 | Cs(CS), | 38 | Cs(CS), |
| 39 | /// DelayUs operations are not supported when the `time` Cargo feature is not enabled. | ||
| 40 | DelayUsNotSupported, | ||
| 38 | } | 41 | } |
| 39 | 42 | ||
| 40 | impl<BUS, CS> spi::Error for SpiDeviceError<BUS, CS> | 43 | impl<BUS, CS> spi::Error for SpiDeviceError<BUS, CS> |
| @@ -46,6 +49,7 @@ where | |||
| 46 | match self { | 49 | match self { |
| 47 | Self::Spi(e) => e.kind(), | 50 | Self::Spi(e) => e.kind(), |
| 48 | Self::Cs(_) => spi::ErrorKind::Other, | 51 | Self::Cs(_) => spi::ErrorKind::Other, |
| 52 | Self::DelayUsNotSupported => spi::ErrorKind::Other, | ||
| 49 | } | 53 | } |
| 50 | } | 54 | } |
| 51 | } | 55 | } |
diff --git a/embassy-hal-common/src/peripheral.rs b/embassy-hal-common/src/peripheral.rs index c7133bac6..38b4c452e 100644 --- a/embassy-hal-common/src/peripheral.rs +++ b/embassy-hal-common/src/peripheral.rs | |||
| @@ -161,7 +161,7 @@ pub trait Peripheral: Sized { | |||
| 161 | } | 161 | } |
| 162 | } | 162 | } |
| 163 | 163 | ||
| 164 | impl<'b, T: Deref> Peripheral for T | 164 | impl<'b, T: DerefMut> Peripheral for T |
| 165 | where | 165 | where |
| 166 | T::Target: Peripheral, | 166 | T::Target: Peripheral, |
| 167 | { | 167 | { |
diff --git a/embassy-lora/Cargo.toml b/embassy-lora/Cargo.toml index 05b6fa2d0..dc44f96db 100644 --- a/embassy-lora/Cargo.toml +++ b/embassy-lora/Cargo.toml | |||
| @@ -23,8 +23,8 @@ log = { version = "0.4.14", optional = true } | |||
| 23 | embassy-time = { version = "0.1.0", path = "../embassy-time" } | 23 | embassy-time = { version = "0.1.0", path = "../embassy-time" } |
| 24 | embassy-sync = { version = "0.2.0", path = "../embassy-sync" } | 24 | embassy-sync = { version = "0.2.0", path = "../embassy-sync" } |
| 25 | embassy-stm32 = { version = "0.1.0", path = "../embassy-stm32", default-features = false, optional = true } | 25 | embassy-stm32 = { version = "0.1.0", path = "../embassy-stm32", default-features = false, optional = true } |
| 26 | embedded-hal-1 = { package = "embedded-hal", version = "=1.0.0-alpha.10" } | 26 | embedded-hal-1 = { package = "embedded-hal", version = "=1.0.0-alpha.11" } |
| 27 | embedded-hal-async = { version = "=0.2.0-alpha.1" } | 27 | embedded-hal-async = { version = "=0.2.0-alpha.2" } |
| 28 | embassy-hal-common = { version = "0.1.0", path = "../embassy-hal-common", default-features = false } | 28 | embassy-hal-common = { version = "0.1.0", path = "../embassy-hal-common", default-features = false } |
| 29 | futures = { version = "0.3.17", default-features = false, features = [ "async-await" ] } | 29 | futures = { version = "0.3.17", default-features = false, features = [ "async-await" ] } |
| 30 | embedded-hal = { version = "0.2", features = ["unproven"] } | 30 | embedded-hal = { version = "0.2", features = ["unproven"] } |
| @@ -32,3 +32,6 @@ bit_field = { version = "0.10" } | |||
| 32 | 32 | ||
| 33 | lora-phy = { version = "1" } | 33 | lora-phy = { version = "1" } |
| 34 | lorawan-device = { version = "0.10.0", default-features = false, features = ["async"] } | 34 | lorawan-device = { version = "0.10.0", default-features = false, features = ["async"] } |
| 35 | |||
| 36 | [patch.crates-io] | ||
| 37 | lora-phy = { git = "https://github.com/embassy-rs/lora-phy", rev = "ad289428fd44b02788e2fa2116445cc8f640a265" } | ||
diff --git a/embassy-net-esp-hosted/Cargo.toml b/embassy-net-esp-hosted/Cargo.toml index a7e18ee09..a52570f5d 100644 --- a/embassy-net-esp-hosted/Cargo.toml +++ b/embassy-net-esp-hosted/Cargo.toml | |||
| @@ -12,8 +12,8 @@ embassy-sync = { version = "0.2.0", path = "../embassy-sync"} | |||
| 12 | embassy-futures = { version = "0.1.0", path = "../embassy-futures"} | 12 | embassy-futures = { version = "0.1.0", path = "../embassy-futures"} |
| 13 | embassy-net-driver-channel = { version = "0.1.0", path = "../embassy-net-driver-channel"} | 13 | embassy-net-driver-channel = { version = "0.1.0", path = "../embassy-net-driver-channel"} |
| 14 | 14 | ||
| 15 | embedded-hal = { version = "1.0.0-alpha.10" } | 15 | embedded-hal = { version = "1.0.0-alpha.11" } |
| 16 | embedded-hal-async = { version = "=0.2.0-alpha.1" } | 16 | embedded-hal-async = { version = "=0.2.0-alpha.2" } |
| 17 | 17 | ||
| 18 | noproto = { git="https://github.com/embassy-rs/noproto", default-features = false, features = ["derive"] } | 18 | noproto = { git="https://github.com/embassy-rs/noproto", default-features = false, features = ["derive"] } |
| 19 | #noproto = { version = "0.1", path = "/home/dirbaio/noproto", default-features = false, features = ["derive"] } | 19 | #noproto = { version = "0.1", path = "/home/dirbaio/noproto", default-features = false, features = ["derive"] } |
diff --git a/embassy-net-esp-hosted/src/control.rs b/embassy-net-esp-hosted/src/control.rs index fce82ade7..79f8cde7b 100644 --- a/embassy-net-esp-hosted/src/control.rs +++ b/embassy-net-esp-hosted/src/control.rs | |||
| @@ -54,7 +54,9 @@ impl<'a> Control<'a> { | |||
| 54 | })), | 54 | })), |
| 55 | }; | 55 | }; |
| 56 | let resp = self.ioctl(req).await; | 56 | let resp = self.ioctl(req).await; |
| 57 | let proto::CtrlMsgPayload::RespConnectAp(resp) = resp.payload.unwrap() else { panic!("unexpected resp") }; | 57 | let proto::CtrlMsgPayload::RespConnectAp(resp) = resp.payload.unwrap() else { |
| 58 | panic!("unexpected resp") | ||
| 59 | }; | ||
| 58 | debug!("======= {:?}", Debug2Format(&resp)); | 60 | debug!("======= {:?}", Debug2Format(&resp)); |
| 59 | assert_eq!(resp.resp, 0); | 61 | assert_eq!(resp.resp, 0); |
| 60 | self.state_ch.set_link_state(LinkState::Up); | 62 | self.state_ch.set_link_state(LinkState::Up); |
| @@ -71,7 +73,9 @@ impl<'a> Control<'a> { | |||
| 71 | )), | 73 | )), |
| 72 | }; | 74 | }; |
| 73 | let resp = self.ioctl(req).await; | 75 | let resp = self.ioctl(req).await; |
| 74 | let proto::CtrlMsgPayload::RespGetMacAddress(resp) = resp.payload.unwrap() else { panic!("unexpected resp") }; | 76 | let proto::CtrlMsgPayload::RespGetMacAddress(resp) = resp.payload.unwrap() else { |
| 77 | panic!("unexpected resp") | ||
| 78 | }; | ||
| 75 | assert_eq!(resp.resp, 0); | 79 | assert_eq!(resp.resp, 0); |
| 76 | 80 | ||
| 77 | // WHY IS THIS A STRING? WHYYYY | 81 | // WHY IS THIS A STRING? WHYYYY |
| @@ -100,7 +104,9 @@ impl<'a> Control<'a> { | |||
| 100 | payload: Some(proto::CtrlMsgPayload::ReqSetWifiMode(proto::CtrlMsgReqSetMode { mode })), | 104 | payload: Some(proto::CtrlMsgPayload::ReqSetWifiMode(proto::CtrlMsgReqSetMode { mode })), |
| 101 | }; | 105 | }; |
| 102 | let resp = self.ioctl(req).await; | 106 | let resp = self.ioctl(req).await; |
| 103 | let proto::CtrlMsgPayload::RespSetWifiMode(resp) = resp.payload.unwrap() else { panic!("unexpected resp") }; | 107 | let proto::CtrlMsgPayload::RespSetWifiMode(resp) = resp.payload.unwrap() else { |
| 108 | panic!("unexpected resp") | ||
| 109 | }; | ||
| 104 | assert_eq!(resp.resp, 0); | 110 | assert_eq!(resp.resp, 0); |
| 105 | } | 111 | } |
| 106 | 112 | ||
diff --git a/embassy-net-esp-hosted/src/lib.rs b/embassy-net-esp-hosted/src/lib.rs index 44dfbe89c..a35adfca0 100644 --- a/embassy-net-esp-hosted/src/lib.rs +++ b/embassy-net-esp-hosted/src/lib.rs | |||
| @@ -311,14 +311,14 @@ where | |||
| 311 | fn handle_event(&self, data: &[u8]) { | 311 | fn handle_event(&self, data: &[u8]) { |
| 312 | let Ok(event) = noproto::read::<CtrlMsg>(data) else { | 312 | let Ok(event) = noproto::read::<CtrlMsg>(data) else { |
| 313 | warn!("failed to parse event"); | 313 | warn!("failed to parse event"); |
| 314 | return | 314 | return; |
| 315 | }; | 315 | }; |
| 316 | 316 | ||
| 317 | debug!("event: {:?}", &event); | 317 | debug!("event: {:?}", &event); |
| 318 | 318 | ||
| 319 | let Some(payload) = &event.payload else { | 319 | let Some(payload) = &event.payload else { |
| 320 | warn!("event without payload?"); | 320 | warn!("event without payload?"); |
| 321 | return | 321 | return; |
| 322 | }; | 322 | }; |
| 323 | 323 | ||
| 324 | match payload { | 324 | match payload { |
diff --git a/embassy-net-w5500/Cargo.toml b/embassy-net-w5500/Cargo.toml index 37d15c7ac..41d411117 100644 --- a/embassy-net-w5500/Cargo.toml +++ b/embassy-net-w5500/Cargo.toml | |||
| @@ -8,8 +8,8 @@ license = "MIT OR Apache-2.0" | |||
| 8 | edition = "2021" | 8 | edition = "2021" |
| 9 | 9 | ||
| 10 | [dependencies] | 10 | [dependencies] |
| 11 | embedded-hal = { version = "1.0.0-alpha.10" } | 11 | embedded-hal = { version = "1.0.0-alpha.11" } |
| 12 | embedded-hal-async = { version = "=0.2.0-alpha.1" } | 12 | embedded-hal-async = { version = "=0.2.0-alpha.2" } |
| 13 | embassy-net-driver-channel = { version = "0.1.0", path = "../embassy-net-driver-channel"} | 13 | embassy-net-driver-channel = { version = "0.1.0", path = "../embassy-net-driver-channel"} |
| 14 | embassy-time = { version = "0.1.0" } | 14 | embassy-time = { version = "0.1.0" } |
| 15 | embassy-futures = { version = "0.1.0" } | 15 | embassy-futures = { version = "0.1.0" } |
diff --git a/embassy-net-w5500/src/spi.rs b/embassy-net-w5500/src/spi.rs index 6cd52c44d..07749d6be 100644 --- a/embassy-net-w5500/src/spi.rs +++ b/embassy-net-w5500/src/spi.rs | |||
| @@ -22,7 +22,11 @@ impl<SPI: SpiDevice> SpiInterface<SPI> { | |||
| 22 | let address_phase = address.to_be_bytes(); | 22 | let address_phase = address.to_be_bytes(); |
| 23 | let control_phase = [(block as u8) << 3 | 0b0000_0100]; | 23 | let control_phase = [(block as u8) << 3 | 0b0000_0100]; |
| 24 | let data_phase = data; | 24 | let data_phase = data; |
| 25 | let operations = &[&address_phase[..], &control_phase, &data_phase]; | 25 | let operations = &mut [ |
| 26 | self.0.write_transaction(operations).await | 26 | Operation::Write(&address_phase[..]), |
| 27 | Operation::Write(&control_phase), | ||
| 28 | Operation::Write(&data_phase), | ||
| 29 | ]; | ||
| 30 | self.0.transaction(operations).await | ||
| 27 | } | 31 | } |
| 28 | } | 32 | } |
diff --git a/embassy-nrf/Cargo.toml b/embassy-nrf/Cargo.toml index 3e858f854..ae76af3e6 100644 --- a/embassy-nrf/Cargo.toml +++ b/embassy-nrf/Cargo.toml | |||
| @@ -8,7 +8,7 @@ license = "MIT OR Apache-2.0" | |||
| 8 | src_base = "https://github.com/embassy-rs/embassy/blob/embassy-nrf-v$VERSION/embassy-nrf/src/" | 8 | src_base = "https://github.com/embassy-rs/embassy/blob/embassy-nrf-v$VERSION/embassy-nrf/src/" |
| 9 | src_base_git = "https://github.com/embassy-rs/embassy/blob/$COMMIT/embassy-nrf/src/" | 9 | src_base_git = "https://github.com/embassy-rs/embassy/blob/$COMMIT/embassy-nrf/src/" |
| 10 | 10 | ||
| 11 | features = ["nightly", "defmt", "unstable-pac", "unstable-traits", "gpiote", "time-driver-rtc1"] | 11 | features = ["nightly", "time", "defmt", "unstable-pac", "unstable-traits", "gpiote", "time-driver-rtc1"] |
| 12 | flavors = [ | 12 | flavors = [ |
| 13 | { regex_feature = "nrf52.*", target = "thumbv7em-none-eabihf" }, | 13 | { regex_feature = "nrf52.*", target = "thumbv7em-none-eabihf" }, |
| 14 | { regex_feature = "nrf53.*", target = "thumbv8m.main-none-eabihf" }, | 14 | { regex_feature = "nrf53.*", target = "thumbv8m.main-none-eabihf" }, |
| @@ -98,8 +98,8 @@ embassy-embedded-hal = {version = "0.1.0", path = "../embassy-embedded-hal" } | |||
| 98 | embassy-usb-driver = {version = "0.1.0", path = "../embassy-usb-driver", optional=true } | 98 | embassy-usb-driver = {version = "0.1.0", path = "../embassy-usb-driver", optional=true } |
| 99 | 99 | ||
| 100 | embedded-hal-02 = { package = "embedded-hal", version = "0.2.6", features = ["unproven"] } | 100 | embedded-hal-02 = { package = "embedded-hal", version = "0.2.6", features = ["unproven"] } |
| 101 | embedded-hal-1 = { package = "embedded-hal", version = "=1.0.0-alpha.10", optional = true} | 101 | embedded-hal-1 = { package = "embedded-hal", version = "=1.0.0-alpha.11", optional = true} |
| 102 | embedded-hal-async = { version = "=0.2.0-alpha.1", optional = true} | 102 | embedded-hal-async = { version = "=0.2.0-alpha.2", optional = true} |
| 103 | embedded-io = { version = "0.4.0", features = ["async"], optional = true } | 103 | embedded-io = { version = "0.4.0", features = ["async"], optional = true } |
| 104 | 104 | ||
| 105 | defmt = { version = "0.3", optional = true } | 105 | defmt = { version = "0.3", optional = true } |
diff --git a/embassy-nrf/src/spim.rs b/embassy-nrf/src/spim.rs index 66bbd1a8f..b7dc332e9 100644 --- a/embassy-nrf/src/spim.rs +++ b/embassy-nrf/src/spim.rs | |||
| @@ -468,25 +468,19 @@ mod eh1 { | |||
| 468 | type Error = Error; | 468 | type Error = Error; |
| 469 | } | 469 | } |
| 470 | 470 | ||
| 471 | impl<'d, T: Instance> embedded_hal_1::spi::SpiBusFlush for Spim<'d, T> { | 471 | impl<'d, T: Instance> embedded_hal_1::spi::SpiBus<u8> for Spim<'d, T> { |
| 472 | fn flush(&mut self) -> Result<(), Self::Error> { | 472 | fn flush(&mut self) -> Result<(), Self::Error> { |
| 473 | Ok(()) | 473 | Ok(()) |
| 474 | } | 474 | } |
| 475 | } | ||
| 476 | 475 | ||
| 477 | impl<'d, T: Instance> embedded_hal_1::spi::SpiBusRead<u8> for Spim<'d, T> { | ||
| 478 | fn read(&mut self, words: &mut [u8]) -> Result<(), Self::Error> { | 476 | fn read(&mut self, words: &mut [u8]) -> Result<(), Self::Error> { |
| 479 | self.blocking_transfer(words, &[]) | 477 | self.blocking_transfer(words, &[]) |
| 480 | } | 478 | } |
| 481 | } | ||
| 482 | 479 | ||
| 483 | impl<'d, T: Instance> embedded_hal_1::spi::SpiBusWrite<u8> for Spim<'d, T> { | ||
| 484 | fn write(&mut self, words: &[u8]) -> Result<(), Self::Error> { | 480 | fn write(&mut self, words: &[u8]) -> Result<(), Self::Error> { |
| 485 | self.blocking_write(words) | 481 | self.blocking_write(words) |
| 486 | } | 482 | } |
| 487 | } | ||
| 488 | 483 | ||
| 489 | impl<'d, T: Instance> embedded_hal_1::spi::SpiBus<u8> for Spim<'d, T> { | ||
| 490 | fn transfer(&mut self, read: &mut [u8], write: &[u8]) -> Result<(), Self::Error> { | 484 | fn transfer(&mut self, read: &mut [u8], write: &[u8]) -> Result<(), Self::Error> { |
| 491 | self.blocking_transfer(read, write) | 485 | self.blocking_transfer(read, write) |
| 492 | } | 486 | } |
| @@ -502,25 +496,19 @@ mod eha { | |||
| 502 | 496 | ||
| 503 | use super::*; | 497 | use super::*; |
| 504 | 498 | ||
| 505 | impl<'d, T: Instance> embedded_hal_async::spi::SpiBusFlush for Spim<'d, T> { | 499 | impl<'d, T: Instance> embedded_hal_async::spi::SpiBus<u8> for Spim<'d, T> { |
| 506 | async fn flush(&mut self) -> Result<(), Error> { | 500 | async fn flush(&mut self) -> Result<(), Error> { |
| 507 | Ok(()) | 501 | Ok(()) |
| 508 | } | 502 | } |
| 509 | } | ||
| 510 | 503 | ||
| 511 | impl<'d, T: Instance> embedded_hal_async::spi::SpiBusRead<u8> for Spim<'d, T> { | ||
| 512 | async fn read(&mut self, words: &mut [u8]) -> Result<(), Error> { | 504 | async fn read(&mut self, words: &mut [u8]) -> Result<(), Error> { |
| 513 | self.read(words).await | 505 | self.read(words).await |
| 514 | } | 506 | } |
| 515 | } | ||
| 516 | 507 | ||
| 517 | impl<'d, T: Instance> embedded_hal_async::spi::SpiBusWrite<u8> for Spim<'d, T> { | ||
| 518 | async fn write(&mut self, data: &[u8]) -> Result<(), Error> { | 508 | async fn write(&mut self, data: &[u8]) -> Result<(), Error> { |
| 519 | self.write(data).await | 509 | self.write(data).await |
| 520 | } | 510 | } |
| 521 | } | ||
| 522 | 511 | ||
| 523 | impl<'d, T: Instance> embedded_hal_async::spi::SpiBus<u8> for Spim<'d, T> { | ||
| 524 | async fn transfer(&mut self, rx: &mut [u8], tx: &[u8]) -> Result<(), Error> { | 512 | async fn transfer(&mut self, rx: &mut [u8], tx: &[u8]) -> Result<(), Error> { |
| 525 | self.transfer(rx, tx).await | 513 | self.transfer(rx, tx).await |
| 526 | } | 514 | } |
diff --git a/embassy-rp/Cargo.toml b/embassy-rp/Cargo.toml index 66823771a..a06831a9a 100644 --- a/embassy-rp/Cargo.toml +++ b/embassy-rp/Cargo.toml | |||
| @@ -79,9 +79,9 @@ fixed = "1.23.1" | |||
| 79 | rp-pac = { version = "6" } | 79 | rp-pac = { version = "6" } |
| 80 | 80 | ||
| 81 | embedded-hal-02 = { package = "embedded-hal", version = "0.2.6", features = ["unproven"] } | 81 | embedded-hal-02 = { package = "embedded-hal", version = "0.2.6", features = ["unproven"] } |
| 82 | embedded-hal-1 = { package = "embedded-hal", version = "=1.0.0-alpha.10", optional = true} | 82 | embedded-hal-1 = { package = "embedded-hal", version = "=1.0.0-alpha.11", optional = true} |
| 83 | embedded-hal-async = { version = "=0.2.0-alpha.1", optional = true} | 83 | embedded-hal-async = { version = "=0.2.0-alpha.2", optional = true} |
| 84 | embedded-hal-nb = { version = "=1.0.0-alpha.2", optional = true} | 84 | embedded-hal-nb = { version = "=1.0.0-alpha.3", optional = true} |
| 85 | 85 | ||
| 86 | paste = "1.0" | 86 | paste = "1.0" |
| 87 | pio-proc = {version= "0.2" } | 87 | pio-proc = {version= "0.2" } |
diff --git a/embassy-rp/src/spi.rs b/embassy-rp/src/spi.rs index e817d074e..af101cf4a 100644 --- a/embassy-rp/src/spi.rs +++ b/embassy-rp/src/spi.rs | |||
| @@ -545,25 +545,19 @@ mod eh1 { | |||
| 545 | type Error = Error; | 545 | type Error = Error; |
| 546 | } | 546 | } |
| 547 | 547 | ||
| 548 | impl<'d, T: Instance, M: Mode> embedded_hal_1::spi::SpiBusFlush for Spi<'d, T, M> { | 548 | impl<'d, T: Instance, M: Mode> embedded_hal_1::spi::SpiBus<u8> for Spi<'d, T, M> { |
| 549 | fn flush(&mut self) -> Result<(), Self::Error> { | 549 | fn flush(&mut self) -> Result<(), Self::Error> { |
| 550 | Ok(()) | 550 | Ok(()) |
| 551 | } | 551 | } |
| 552 | } | ||
| 553 | 552 | ||
| 554 | impl<'d, T: Instance, M: Mode> embedded_hal_1::spi::SpiBusRead<u8> for Spi<'d, T, M> { | ||
| 555 | fn read(&mut self, words: &mut [u8]) -> Result<(), Self::Error> { | 553 | fn read(&mut self, words: &mut [u8]) -> Result<(), Self::Error> { |
| 556 | self.blocking_transfer(words, &[]) | 554 | self.blocking_transfer(words, &[]) |
| 557 | } | 555 | } |
| 558 | } | ||
| 559 | 556 | ||
| 560 | impl<'d, T: Instance, M: Mode> embedded_hal_1::spi::SpiBusWrite<u8> for Spi<'d, T, M> { | ||
| 561 | fn write(&mut self, words: &[u8]) -> Result<(), Self::Error> { | 557 | fn write(&mut self, words: &[u8]) -> Result<(), Self::Error> { |
| 562 | self.blocking_write(words) | 558 | self.blocking_write(words) |
| 563 | } | 559 | } |
| 564 | } | ||
| 565 | 560 | ||
| 566 | impl<'d, T: Instance, M: Mode> embedded_hal_1::spi::SpiBus<u8> for Spi<'d, T, M> { | ||
| 567 | fn transfer(&mut self, read: &mut [u8], write: &[u8]) -> Result<(), Self::Error> { | 561 | fn transfer(&mut self, read: &mut [u8], write: &[u8]) -> Result<(), Self::Error> { |
| 568 | self.blocking_transfer(read, write) | 562 | self.blocking_transfer(read, write) |
| 569 | } | 563 | } |
| @@ -578,30 +572,24 @@ mod eh1 { | |||
| 578 | mod eha { | 572 | mod eha { |
| 579 | use super::*; | 573 | use super::*; |
| 580 | 574 | ||
| 581 | impl<'d, T: Instance> embedded_hal_async::spi::SpiBusFlush for Spi<'d, T, Async> { | 575 | impl<'d, T: Instance> embedded_hal_async::spi::SpiBus<u8> for Spi<'d, T, Async> { |
| 582 | async fn flush(&mut self) -> Result<(), Self::Error> { | 576 | async fn flush(&mut self) -> Result<(), Self::Error> { |
| 583 | Ok(()) | 577 | Ok(()) |
| 584 | } | 578 | } |
| 585 | } | ||
| 586 | 579 | ||
| 587 | impl<'d, T: Instance> embedded_hal_async::spi::SpiBusWrite<u8> for Spi<'d, T, Async> { | ||
| 588 | async fn write(&mut self, words: &[u8]) -> Result<(), Self::Error> { | 580 | async fn write(&mut self, words: &[u8]) -> Result<(), Self::Error> { |
| 589 | self.write(words).await | 581 | self.write(words).await |
| 590 | } | 582 | } |
| 591 | } | ||
| 592 | 583 | ||
| 593 | impl<'d, T: Instance> embedded_hal_async::spi::SpiBusRead<u8> for Spi<'d, T, Async> { | ||
| 594 | async fn read(&mut self, words: &mut [u8]) -> Result<(), Self::Error> { | 584 | async fn read(&mut self, words: &mut [u8]) -> Result<(), Self::Error> { |
| 595 | self.read(words).await | 585 | self.read(words).await |
| 596 | } | 586 | } |
| 597 | } | ||
| 598 | 587 | ||
| 599 | impl<'d, T: Instance> embedded_hal_async::spi::SpiBus<u8> for Spi<'d, T, Async> { | 588 | async fn transfer(&mut self, read: &mut [u8], write: &[u8]) -> Result<(), Self::Error> { |
| 600 | async fn transfer<'a>(&'a mut self, read: &'a mut [u8], write: &'a [u8]) -> Result<(), Self::Error> { | ||
| 601 | self.transfer(read, write).await | 589 | self.transfer(read, write).await |
| 602 | } | 590 | } |
| 603 | 591 | ||
| 604 | async fn transfer_in_place<'a>(&'a mut self, words: &'a mut [u8]) -> Result<(), Self::Error> { | 592 | async fn transfer_in_place(&mut self, words: &mut [u8]) -> Result<(), Self::Error> { |
| 605 | self.transfer_in_place(words).await | 593 | self.transfer_in_place(words).await |
| 606 | } | 594 | } |
| 607 | } | 595 | } |
diff --git a/embassy-stm32/Cargo.toml b/embassy-stm32/Cargo.toml index b3fe9c1f5..045149636 100644 --- a/embassy-stm32/Cargo.toml +++ b/embassy-stm32/Cargo.toml | |||
| @@ -40,9 +40,9 @@ embassy-net-driver = { version = "0.1.0", path = "../embassy-net-driver" } | |||
| 40 | embassy-usb-driver = {version = "0.1.0", path = "../embassy-usb-driver", optional = true } | 40 | embassy-usb-driver = {version = "0.1.0", path = "../embassy-usb-driver", optional = true } |
| 41 | 41 | ||
| 42 | embedded-hal-02 = { package = "embedded-hal", version = "0.2.6", features = ["unproven"] } | 42 | embedded-hal-02 = { package = "embedded-hal", version = "0.2.6", features = ["unproven"] } |
| 43 | embedded-hal-1 = { package = "embedded-hal", version = "=1.0.0-alpha.10", optional = true} | 43 | embedded-hal-1 = { package = "embedded-hal", version = "=1.0.0-alpha.11", optional = true} |
| 44 | embedded-hal-async = { version = "=0.2.0-alpha.1", optional = true} | 44 | embedded-hal-async = { version = "=0.2.0-alpha.2", optional = true} |
| 45 | embedded-hal-nb = { version = "=1.0.0-alpha.2", optional = true} | 45 | embedded-hal-nb = { version = "=1.0.0-alpha.3", optional = true} |
| 46 | 46 | ||
| 47 | embedded-storage = "0.3.0" | 47 | embedded-storage = "0.3.0" |
| 48 | embedded-storage-async = { version = "0.4.0", optional = true } | 48 | embedded-storage-async = { version = "0.4.0", optional = true } |
diff --git a/embassy-stm32/build.rs b/embassy-stm32/build.rs index fa66da1f6..995ad1443 100644 --- a/embassy-stm32/build.rs +++ b/embassy-stm32/build.rs | |||
| @@ -348,9 +348,7 @@ fn main() { | |||
| 348 | g.extend(quote! { | 348 | g.extend(quote! { |
| 349 | impl crate::rcc::sealed::RccPeripheral for peripherals::#pname { | 349 | impl crate::rcc::sealed::RccPeripheral for peripherals::#pname { |
| 350 | fn frequency() -> crate::time::Hertz { | 350 | fn frequency() -> crate::time::Hertz { |
| 351 | critical_section::with(|_| unsafe { | 351 | unsafe { crate::rcc::get_freqs().#clk } |
| 352 | crate::rcc::get_freqs().#clk | ||
| 353 | }) | ||
| 354 | } | 352 | } |
| 355 | fn enable() { | 353 | fn enable() { |
| 356 | critical_section::with(|_| { | 354 | critical_section::with(|_| { |
diff --git a/embassy-stm32/src/dac/mod.rs b/embassy-stm32/src/dac/mod.rs index 1dc13949d..31a2d8863 100644 --- a/embassy-stm32/src/dac/mod.rs +++ b/embassy-stm32/src/dac/mod.rs | |||
| @@ -264,7 +264,7 @@ impl<'d, T: Instance, Tx> DacCh1<'d, T, Tx> { | |||
| 264 | }); | 264 | }); |
| 265 | 265 | ||
| 266 | let tx_request = self.dma.request(); | 266 | let tx_request = self.dma.request(); |
| 267 | let dma_channel = &self.dma; | 267 | let dma_channel = &mut self.dma; |
| 268 | 268 | ||
| 269 | let tx_options = crate::dma::TransferOptions { | 269 | let tx_options = crate::dma::TransferOptions { |
| 270 | circular, | 270 | circular, |
| @@ -376,7 +376,7 @@ impl<'d, T: Instance, Tx> DacCh2<'d, T, Tx> { | |||
| 376 | }); | 376 | }); |
| 377 | 377 | ||
| 378 | let tx_request = self.dma.request(); | 378 | let tx_request = self.dma.request(); |
| 379 | let dma_channel = &self.dma; | 379 | let dma_channel = &mut self.dma; |
| 380 | 380 | ||
| 381 | let tx_options = crate::dma::TransferOptions { | 381 | let tx_options = crate::dma::TransferOptions { |
| 382 | circular, | 382 | circular, |
diff --git a/embassy-stm32/src/fmc.rs b/embassy-stm32/src/fmc.rs index a4f3b9686..60d7a00ee 100644 --- a/embassy-stm32/src/fmc.rs +++ b/embassy-stm32/src/fmc.rs | |||
| @@ -86,6 +86,24 @@ macro_rules! fmc_sdram_constructor { | |||
| 86 | } | 86 | } |
| 87 | 87 | ||
| 88 | impl<'d, T: Instance> Fmc<'d, T> { | 88 | impl<'d, T: Instance> Fmc<'d, T> { |
| 89 | fmc_sdram_constructor!(sdram_a12bits_d16bits_4banks_bank1: ( | ||
| 90 | bank: stm32_fmc::SdramTargetBank::Bank1, | ||
| 91 | addr: [ | ||
| 92 | (a0: A0Pin), (a1: A1Pin), (a2: A2Pin), (a3: A3Pin), (a4: A4Pin), (a5: A5Pin), (a6: A6Pin), (a7: A7Pin), (a8: A8Pin), (a9: A9Pin), (a10: A10Pin), (a11: A11Pin) | ||
| 93 | ], | ||
| 94 | ba: [(ba0: BA0Pin), (ba1: BA1Pin)], | ||
| 95 | d: [ | ||
| 96 | (d0: D0Pin), (d1: D1Pin), (d2: D2Pin), (d3: D3Pin), (d4: D4Pin), (d5: D5Pin), (d6: D6Pin), (d7: D7Pin), | ||
| 97 | (d8: D8Pin), (d9: D9Pin), (d10: D10Pin), (d11: D11Pin), (d12: D12Pin), (d13: D13Pin), (d14: D14Pin), (d15: D15Pin) | ||
| 98 | ], | ||
| 99 | nbl: [ | ||
| 100 | (nbl0: NBL0Pin), (nbl1: NBL1Pin) | ||
| 101 | ], | ||
| 102 | ctrl: [ | ||
| 103 | (sdcke: SDCKE0Pin), (sdclk: SDCLKPin), (sdncas: SDNCASPin), (sdne: SDNE0Pin), (sdnras: SDNRASPin), (sdnwe: SDNWEPin) | ||
| 104 | ] | ||
| 105 | )); | ||
| 106 | |||
| 89 | fmc_sdram_constructor!(sdram_a12bits_d32bits_4banks_bank1: ( | 107 | fmc_sdram_constructor!(sdram_a12bits_d32bits_4banks_bank1: ( |
| 90 | bank: stm32_fmc::SdramTargetBank::Bank1, | 108 | bank: stm32_fmc::SdramTargetBank::Bank1, |
| 91 | addr: [ | 109 | addr: [ |
diff --git a/embassy-stm32/src/rcc/h5.rs b/embassy-stm32/src/rcc/h5.rs index 4025a4e05..7e2f75ab7 100644 --- a/embassy-stm32/src/rcc/h5.rs +++ b/embassy-stm32/src/rcc/h5.rs | |||
| @@ -473,11 +473,11 @@ fn init_pll(num: usize, config: Option<Pll>, input: &PllInput) -> PllOutput { | |||
| 473 | w.set_divm(0); | 473 | w.set_divm(0); |
| 474 | }); | 474 | }); |
| 475 | 475 | ||
| 476 | return PllOutput{ | 476 | return PllOutput { |
| 477 | p: None, | 477 | p: None, |
| 478 | q: None, | 478 | q: None, |
| 479 | r: None, | 479 | r: None, |
| 480 | } | 480 | }; |
| 481 | }; | 481 | }; |
| 482 | 482 | ||
| 483 | assert!(1 <= config.prediv && config.prediv <= 63); | 483 | assert!(1 <= config.prediv && config.prediv <= 63); |
diff --git a/embassy-stm32/src/rcc/mod.rs b/embassy-stm32/src/rcc/mod.rs index d6816d6a8..886fc0b93 100644 --- a/embassy-stm32/src/rcc/mod.rs +++ b/embassy-stm32/src/rcc/mod.rs | |||
| @@ -83,12 +83,12 @@ static mut CLOCK_FREQS: MaybeUninit<Clocks> = MaybeUninit::uninit(); | |||
| 83 | /// Safety: Sets a mutable global. | 83 | /// Safety: Sets a mutable global. |
| 84 | pub(crate) unsafe fn set_freqs(freqs: Clocks) { | 84 | pub(crate) unsafe fn set_freqs(freqs: Clocks) { |
| 85 | debug!("rcc: {:?}", freqs); | 85 | debug!("rcc: {:?}", freqs); |
| 86 | CLOCK_FREQS.as_mut_ptr().write(freqs); | 86 | CLOCK_FREQS = MaybeUninit::new(freqs); |
| 87 | } | 87 | } |
| 88 | 88 | ||
| 89 | /// Safety: Reads a mutable global. | 89 | /// Safety: Reads a mutable global. |
| 90 | pub(crate) unsafe fn get_freqs() -> &'static Clocks { | 90 | pub(crate) unsafe fn get_freqs() -> &'static Clocks { |
| 91 | &*CLOCK_FREQS.as_ptr() | 91 | CLOCK_FREQS.assume_init_ref() |
| 92 | } | 92 | } |
| 93 | 93 | ||
| 94 | #[cfg(feature = "unstable-pac")] | 94 | #[cfg(feature = "unstable-pac")] |
diff --git a/embassy-stm32/src/spi/mod.rs b/embassy-stm32/src/spi/mod.rs index c3224073d..d5f63f84e 100644 --- a/embassy-stm32/src/spi/mod.rs +++ b/embassy-stm32/src/spi/mod.rs | |||
| @@ -852,25 +852,19 @@ mod eh1 { | |||
| 852 | type Error = Error; | 852 | type Error = Error; |
| 853 | } | 853 | } |
| 854 | 854 | ||
| 855 | impl<'d, T: Instance, Tx, Rx> embedded_hal_1::spi::SpiBusFlush for Spi<'d, T, Tx, Rx> { | 855 | impl<'d, T: Instance, W: Word, Tx, Rx> embedded_hal_1::spi::SpiBus<W> for Spi<'d, T, Tx, Rx> { |
| 856 | fn flush(&mut self) -> Result<(), Self::Error> { | 856 | fn flush(&mut self) -> Result<(), Self::Error> { |
| 857 | Ok(()) | 857 | Ok(()) |
| 858 | } | 858 | } |
| 859 | } | ||
| 860 | 859 | ||
| 861 | impl<'d, T: Instance, W: Word, Tx, Rx> embedded_hal_1::spi::SpiBusRead<W> for Spi<'d, T, Tx, Rx> { | ||
| 862 | fn read(&mut self, words: &mut [W]) -> Result<(), Self::Error> { | 860 | fn read(&mut self, words: &mut [W]) -> Result<(), Self::Error> { |
| 863 | self.blocking_read(words) | 861 | self.blocking_read(words) |
| 864 | } | 862 | } |
| 865 | } | ||
| 866 | 863 | ||
| 867 | impl<'d, T: Instance, W: Word, Tx, Rx> embedded_hal_1::spi::SpiBusWrite<W> for Spi<'d, T, Tx, Rx> { | ||
| 868 | fn write(&mut self, words: &[W]) -> Result<(), Self::Error> { | 864 | fn write(&mut self, words: &[W]) -> Result<(), Self::Error> { |
| 869 | self.blocking_write(words) | 865 | self.blocking_write(words) |
| 870 | } | 866 | } |
| 871 | } | ||
| 872 | 867 | ||
| 873 | impl<'d, T: Instance, W: Word, Tx, Rx> embedded_hal_1::spi::SpiBus<W> for Spi<'d, T, Tx, Rx> { | ||
| 874 | fn transfer(&mut self, read: &mut [W], write: &[W]) -> Result<(), Self::Error> { | 868 | fn transfer(&mut self, read: &mut [W], write: &[W]) -> Result<(), Self::Error> { |
| 875 | self.blocking_transfer(read, write) | 869 | self.blocking_transfer(read, write) |
| 876 | } | 870 | } |
| @@ -895,32 +889,25 @@ mod eh1 { | |||
| 895 | #[cfg(all(feature = "unstable-traits", feature = "nightly"))] | 889 | #[cfg(all(feature = "unstable-traits", feature = "nightly"))] |
| 896 | mod eha { | 890 | mod eha { |
| 897 | use super::*; | 891 | use super::*; |
| 898 | impl<'d, T: Instance, Tx, Rx> embedded_hal_async::spi::SpiBusFlush for Spi<'d, T, Tx, Rx> { | 892 | |
| 893 | impl<'d, T: Instance, Tx: TxDma<T>, Rx: RxDma<T>, W: Word> embedded_hal_async::spi::SpiBus<W> for Spi<'d, T, Tx, Rx> { | ||
| 899 | async fn flush(&mut self) -> Result<(), Self::Error> { | 894 | async fn flush(&mut self) -> Result<(), Self::Error> { |
| 900 | Ok(()) | 895 | Ok(()) |
| 901 | } | 896 | } |
| 902 | } | ||
| 903 | 897 | ||
| 904 | impl<'d, T: Instance, Tx: TxDma<T>, Rx, W: Word> embedded_hal_async::spi::SpiBusWrite<W> for Spi<'d, T, Tx, Rx> { | ||
| 905 | async fn write(&mut self, words: &[W]) -> Result<(), Self::Error> { | 898 | async fn write(&mut self, words: &[W]) -> Result<(), Self::Error> { |
| 906 | self.write(words).await | 899 | self.write(words).await |
| 907 | } | 900 | } |
| 908 | } | ||
| 909 | 901 | ||
| 910 | impl<'d, T: Instance, Tx: TxDma<T>, Rx: RxDma<T>, W: Word> embedded_hal_async::spi::SpiBusRead<W> | ||
| 911 | for Spi<'d, T, Tx, Rx> | ||
| 912 | { | ||
| 913 | async fn read(&mut self, words: &mut [W]) -> Result<(), Self::Error> { | 902 | async fn read(&mut self, words: &mut [W]) -> Result<(), Self::Error> { |
| 914 | self.read(words).await | 903 | self.read(words).await |
| 915 | } | 904 | } |
| 916 | } | ||
| 917 | 905 | ||
| 918 | impl<'d, T: Instance, Tx: TxDma<T>, Rx: RxDma<T>, W: Word> embedded_hal_async::spi::SpiBus<W> for Spi<'d, T, Tx, Rx> { | 906 | async fn transfer(&mut self, read: &mut [W], write: &[W]) -> Result<(), Self::Error> { |
| 919 | async fn transfer<'a>(&'a mut self, read: &'a mut [W], write: &'a [W]) -> Result<(), Self::Error> { | ||
| 920 | self.transfer(read, write).await | 907 | self.transfer(read, write).await |
| 921 | } | 908 | } |
| 922 | 909 | ||
| 923 | async fn transfer_in_place<'a>(&'a mut self, words: &'a mut [W]) -> Result<(), Self::Error> { | 910 | async fn transfer_in_place(&mut self, words: &mut [W]) -> Result<(), Self::Error> { |
| 924 | self.transfer_in_place(words).await | 911 | self.transfer_in_place(words).await |
| 925 | } | 912 | } |
| 926 | } | 913 | } |
diff --git a/embassy-time/Cargo.toml b/embassy-time/Cargo.toml index 857da5467..0213eef03 100644 --- a/embassy-time/Cargo.toml +++ b/embassy-time/Cargo.toml | |||
| @@ -152,8 +152,8 @@ defmt = { version = "0.3", optional = true } | |||
| 152 | log = { version = "0.4.14", optional = true } | 152 | log = { version = "0.4.14", optional = true } |
| 153 | 153 | ||
| 154 | embedded-hal-02 = { package = "embedded-hal", version = "0.2.6" } | 154 | embedded-hal-02 = { package = "embedded-hal", version = "0.2.6" } |
| 155 | embedded-hal-1 = { package = "embedded-hal", version = "=1.0.0-alpha.10", optional = true} | 155 | embedded-hal-1 = { package = "embedded-hal", version = "=1.0.0-alpha.11", optional = true} |
| 156 | embedded-hal-async = { version = "=0.2.0-alpha.1", optional = true} | 156 | embedded-hal-async = { version = "=0.2.0-alpha.2", optional = true} |
| 157 | 157 | ||
| 158 | futures-util = { version = "0.3.17", default-features = false } | 158 | futures-util = { version = "0.3.17", default-features = false } |
| 159 | atomic-polyfill = "1.0.1" | 159 | atomic-polyfill = "1.0.1" |
diff --git a/embassy-time/src/queue_generic.rs b/embassy-time/src/queue_generic.rs index 4795eb2f3..77947ab29 100644 --- a/embassy-time/src/queue_generic.rs +++ b/embassy-time/src/queue_generic.rs | |||
| @@ -16,7 +16,7 @@ const QUEUE_SIZE: usize = 16; | |||
| 16 | #[cfg(feature = "generic-queue-32")] | 16 | #[cfg(feature = "generic-queue-32")] |
| 17 | const QUEUE_SIZE: usize = 32; | 17 | const QUEUE_SIZE: usize = 32; |
| 18 | #[cfg(feature = "generic-queue-64")] | 18 | #[cfg(feature = "generic-queue-64")] |
| 19 | const QUEUE_SIZE: usize = 32; | 19 | const QUEUE_SIZE: usize = 64; |
| 20 | #[cfg(feature = "generic-queue-128")] | 20 | #[cfg(feature = "generic-queue-128")] |
| 21 | const QUEUE_SIZE: usize = 128; | 21 | const QUEUE_SIZE: usize = 128; |
| 22 | #[cfg(not(any( | 22 | #[cfg(not(any( |
diff --git a/examples/nrf52840/Cargo.toml b/examples/nrf52840/Cargo.toml index 8c4175966..2ccd5045f 100644 --- a/examples/nrf52840/Cargo.toml +++ b/examples/nrf52840/Cargo.toml | |||
| @@ -52,4 +52,7 @@ rand = { version = "0.8.4", default-features = false } | |||
| 52 | embedded-storage = "0.3.0" | 52 | embedded-storage = "0.3.0" |
| 53 | usbd-hid = "0.6.0" | 53 | usbd-hid = "0.6.0" |
| 54 | serde = { version = "1.0.136", default-features = false } | 54 | serde = { version = "1.0.136", default-features = false } |
| 55 | embedded-hal-async = { version = "0.2.0-alpha.1", optional = true } | 55 | embedded-hal-async = { version = "0.2.0-alpha.2", optional = true } |
| 56 | |||
| 57 | [patch.crates-io] | ||
| 58 | lora-phy = { git = "https://github.com/embassy-rs/lora-phy", rev = "ad289428fd44b02788e2fa2116445cc8f640a265" } | ||
diff --git a/examples/nrf52840/src/bin/wifi_esp_hosted.rs b/examples/nrf52840/src/bin/wifi_esp_hosted.rs index 4eb31b105..f7496703c 100644 --- a/examples/nrf52840/src/bin/wifi_esp_hosted.rs +++ b/examples/nrf52840/src/bin/wifi_esp_hosted.rs | |||
| @@ -10,6 +10,7 @@ use embassy_nrf::gpio::{AnyPin, Input, Level, Output, OutputDrive, Pin, Pull}; | |||
| 10 | use embassy_nrf::rng::Rng; | 10 | use embassy_nrf::rng::Rng; |
| 11 | use embassy_nrf::spim::{self, Spim}; | 11 | use embassy_nrf::spim::{self, Spim}; |
| 12 | use embassy_nrf::{bind_interrupts, peripherals}; | 12 | use embassy_nrf::{bind_interrupts, peripherals}; |
| 13 | use embassy_time::Delay; | ||
| 13 | use embedded_hal_async::spi::ExclusiveDevice; | 14 | use embedded_hal_async::spi::ExclusiveDevice; |
| 14 | use embedded_io::asynch::Write; | 15 | use embedded_io::asynch::Write; |
| 15 | use static_cell::make_static; | 16 | use static_cell::make_static; |
| @@ -24,7 +25,7 @@ bind_interrupts!(struct Irqs { | |||
| 24 | async fn wifi_task( | 25 | async fn wifi_task( |
| 25 | runner: hosted::Runner< | 26 | runner: hosted::Runner< |
| 26 | 'static, | 27 | 'static, |
| 27 | ExclusiveDevice<Spim<'static, peripherals::SPI3>, Output<'static, peripherals::P0_31>>, | 28 | ExclusiveDevice<Spim<'static, peripherals::SPI3>, Output<'static, peripherals::P0_31>, Delay>, |
| 28 | Input<'static, AnyPin>, | 29 | Input<'static, AnyPin>, |
| 29 | Output<'static, peripherals::P1_05>, | 30 | Output<'static, peripherals::P1_05>, |
| 30 | >, | 31 | >, |
| @@ -55,7 +56,7 @@ async fn main(spawner: Spawner) { | |||
| 55 | config.frequency = spim::Frequency::M32; | 56 | config.frequency = spim::Frequency::M32; |
| 56 | config.mode = spim::MODE_2; // !!! | 57 | config.mode = spim::MODE_2; // !!! |
| 57 | let spi = spim::Spim::new(p.SPI3, Irqs, sck, miso, mosi, config); | 58 | let spi = spim::Spim::new(p.SPI3, Irqs, sck, miso, mosi, config); |
| 58 | let spi = ExclusiveDevice::new(spi, cs); | 59 | let spi = ExclusiveDevice::new(spi, cs, Delay); |
| 59 | 60 | ||
| 60 | let (device, mut control, runner) = embassy_net_esp_hosted::new( | 61 | let (device, mut control, runner) = embassy_net_esp_hosted::new( |
| 61 | make_static!(embassy_net_esp_hosted::State::new()), | 62 | make_static!(embassy_net_esp_hosted::State::new()), |
diff --git a/examples/rp/Cargo.toml b/examples/rp/Cargo.toml index 48f3a26bb..17ebea86f 100644 --- a/examples/rp/Cargo.toml +++ b/examples/rp/Cargo.toml | |||
| @@ -41,8 +41,8 @@ byte-slice-cast = { version = "1.2.0", default-features = false } | |||
| 41 | smart-leds = "0.3.0" | 41 | smart-leds = "0.3.0" |
| 42 | heapless = "0.7.15" | 42 | heapless = "0.7.15" |
| 43 | 43 | ||
| 44 | embedded-hal-1 = { package = "embedded-hal", version = "=1.0.0-alpha.10" } | 44 | embedded-hal-1 = { package = "embedded-hal", version = "=1.0.0-alpha.11" } |
| 45 | embedded-hal-async = "0.2.0-alpha.1" | 45 | embedded-hal-async = "0.2.0-alpha.2" |
| 46 | embedded-io = { version = "0.4.0", features = ["async", "defmt"] } | 46 | embedded-io = { version = "0.4.0", features = ["async", "defmt"] } |
| 47 | embedded-storage = { version = "0.3" } | 47 | embedded-storage = { version = "0.3" } |
| 48 | static_cell = { version = "1.1", features = ["nightly"]} | 48 | static_cell = { version = "1.1", features = ["nightly"]} |
| @@ -53,3 +53,6 @@ rand = { version = "0.8.5", default-features = false } | |||
| 53 | 53 | ||
| 54 | [profile.release] | 54 | [profile.release] |
| 55 | debug = true | 55 | debug = true |
| 56 | |||
| 57 | [patch.crates-io] | ||
| 58 | lora-phy = { git = "https://github.com/embassy-rs/lora-phy", rev = "ad289428fd44b02788e2fa2116445cc8f640a265" } | ||
diff --git a/examples/rp/src/bin/ethernet_w5500_multisocket.rs b/examples/rp/src/bin/ethernet_w5500_multisocket.rs index 82568254a..e81da177b 100644 --- a/examples/rp/src/bin/ethernet_w5500_multisocket.rs +++ b/examples/rp/src/bin/ethernet_w5500_multisocket.rs | |||
| @@ -15,7 +15,7 @@ use embassy_rp::clocks::RoscRng; | |||
| 15 | use embassy_rp::gpio::{Input, Level, Output, Pull}; | 15 | use embassy_rp::gpio::{Input, Level, Output, Pull}; |
| 16 | use embassy_rp::peripherals::{PIN_17, PIN_20, PIN_21, SPI0}; | 16 | use embassy_rp::peripherals::{PIN_17, PIN_20, PIN_21, SPI0}; |
| 17 | use embassy_rp::spi::{Async, Config as SpiConfig, Spi}; | 17 | use embassy_rp::spi::{Async, Config as SpiConfig, Spi}; |
| 18 | use embassy_time::Duration; | 18 | use embassy_time::{Delay, Duration}; |
| 19 | use embedded_hal_async::spi::ExclusiveDevice; | 19 | use embedded_hal_async::spi::ExclusiveDevice; |
| 20 | use embedded_io::asynch::Write; | 20 | use embedded_io::asynch::Write; |
| 21 | use rand::RngCore; | 21 | use rand::RngCore; |
| @@ -26,7 +26,7 @@ use {defmt_rtt as _, panic_probe as _}; | |||
| 26 | async fn ethernet_task( | 26 | async fn ethernet_task( |
| 27 | runner: Runner< | 27 | runner: Runner< |
| 28 | 'static, | 28 | 'static, |
| 29 | ExclusiveDevice<Spi<'static, SPI0, Async>, Output<'static, PIN_17>>, | 29 | ExclusiveDevice<Spi<'static, SPI0, Async>, Output<'static, PIN_17>, Delay>, |
| 30 | Input<'static, PIN_21>, | 30 | Input<'static, PIN_21>, |
| 31 | Output<'static, PIN_20>, | 31 | Output<'static, PIN_20>, |
| 32 | >, | 32 | >, |
| @@ -54,8 +54,14 @@ async fn main(spawner: Spawner) { | |||
| 54 | 54 | ||
| 55 | let mac_addr = [0x02, 0x00, 0x00, 0x00, 0x00, 0x00]; | 55 | let mac_addr = [0x02, 0x00, 0x00, 0x00, 0x00, 0x00]; |
| 56 | let state = make_static!(State::<8, 8>::new()); | 56 | let state = make_static!(State::<8, 8>::new()); |
| 57 | let (device, runner) = | 57 | let (device, runner) = embassy_net_w5500::new( |
| 58 | embassy_net_w5500::new(mac_addr, state, ExclusiveDevice::new(spi, cs), w5500_int, w5500_reset).await; | 58 | mac_addr, |
| 59 | state, | ||
| 60 | ExclusiveDevice::new(spi, cs, Delay), | ||
| 61 | w5500_int, | ||
| 62 | w5500_reset, | ||
| 63 | ) | ||
| 64 | .await; | ||
| 59 | unwrap!(spawner.spawn(ethernet_task(runner))); | 65 | unwrap!(spawner.spawn(ethernet_task(runner))); |
| 60 | 66 | ||
| 61 | // Generate random seed | 67 | // Generate random seed |
diff --git a/examples/rp/src/bin/ethernet_w5500_tcp_client.rs b/examples/rp/src/bin/ethernet_w5500_tcp_client.rs index d562defad..9dd7ae973 100644 --- a/examples/rp/src/bin/ethernet_w5500_tcp_client.rs +++ b/examples/rp/src/bin/ethernet_w5500_tcp_client.rs | |||
| @@ -17,7 +17,7 @@ use embassy_rp::clocks::RoscRng; | |||
| 17 | use embassy_rp::gpio::{Input, Level, Output, Pull}; | 17 | use embassy_rp::gpio::{Input, Level, Output, Pull}; |
| 18 | use embassy_rp::peripherals::{PIN_17, PIN_20, PIN_21, SPI0}; | 18 | use embassy_rp::peripherals::{PIN_17, PIN_20, PIN_21, SPI0}; |
| 19 | use embassy_rp::spi::{Async, Config as SpiConfig, Spi}; | 19 | use embassy_rp::spi::{Async, Config as SpiConfig, Spi}; |
| 20 | use embassy_time::{Duration, Timer}; | 20 | use embassy_time::{Delay, Duration, Timer}; |
| 21 | use embedded_hal_async::spi::ExclusiveDevice; | 21 | use embedded_hal_async::spi::ExclusiveDevice; |
| 22 | use embedded_io::asynch::Write; | 22 | use embedded_io::asynch::Write; |
| 23 | use rand::RngCore; | 23 | use rand::RngCore; |
| @@ -28,7 +28,7 @@ use {defmt_rtt as _, panic_probe as _}; | |||
| 28 | async fn ethernet_task( | 28 | async fn ethernet_task( |
| 29 | runner: Runner< | 29 | runner: Runner< |
| 30 | 'static, | 30 | 'static, |
| 31 | ExclusiveDevice<Spi<'static, SPI0, Async>, Output<'static, PIN_17>>, | 31 | ExclusiveDevice<Spi<'static, SPI0, Async>, Output<'static, PIN_17>, Delay>, |
| 32 | Input<'static, PIN_21>, | 32 | Input<'static, PIN_21>, |
| 33 | Output<'static, PIN_20>, | 33 | Output<'static, PIN_20>, |
| 34 | >, | 34 | >, |
| @@ -57,8 +57,14 @@ async fn main(spawner: Spawner) { | |||
| 57 | 57 | ||
| 58 | let mac_addr = [0x02, 0x00, 0x00, 0x00, 0x00, 0x00]; | 58 | let mac_addr = [0x02, 0x00, 0x00, 0x00, 0x00, 0x00]; |
| 59 | let state = make_static!(State::<8, 8>::new()); | 59 | let state = make_static!(State::<8, 8>::new()); |
| 60 | let (device, runner) = | 60 | let (device, runner) = embassy_net_w5500::new( |
| 61 | embassy_net_w5500::new(mac_addr, state, ExclusiveDevice::new(spi, cs), w5500_int, w5500_reset).await; | 61 | mac_addr, |
| 62 | state, | ||
| 63 | ExclusiveDevice::new(spi, cs, Delay), | ||
| 64 | w5500_int, | ||
| 65 | w5500_reset, | ||
| 66 | ) | ||
| 67 | .await; | ||
| 62 | unwrap!(spawner.spawn(ethernet_task(runner))); | 68 | unwrap!(spawner.spawn(ethernet_task(runner))); |
| 63 | 69 | ||
| 64 | // Generate random seed | 70 | // Generate random seed |
diff --git a/examples/rp/src/bin/ethernet_w5500_tcp_server.rs b/examples/rp/src/bin/ethernet_w5500_tcp_server.rs index 7f521cdb4..db21c2b6f 100644 --- a/examples/rp/src/bin/ethernet_w5500_tcp_server.rs +++ b/examples/rp/src/bin/ethernet_w5500_tcp_server.rs | |||
| @@ -16,7 +16,7 @@ use embassy_rp::clocks::RoscRng; | |||
| 16 | use embassy_rp::gpio::{Input, Level, Output, Pull}; | 16 | use embassy_rp::gpio::{Input, Level, Output, Pull}; |
| 17 | use embassy_rp::peripherals::{PIN_17, PIN_20, PIN_21, SPI0}; | 17 | use embassy_rp::peripherals::{PIN_17, PIN_20, PIN_21, SPI0}; |
| 18 | use embassy_rp::spi::{Async, Config as SpiConfig, Spi}; | 18 | use embassy_rp::spi::{Async, Config as SpiConfig, Spi}; |
| 19 | use embassy_time::Duration; | 19 | use embassy_time::{Delay, Duration}; |
| 20 | use embedded_hal_async::spi::ExclusiveDevice; | 20 | use embedded_hal_async::spi::ExclusiveDevice; |
| 21 | use embedded_io::asynch::Write; | 21 | use embedded_io::asynch::Write; |
| 22 | use rand::RngCore; | 22 | use rand::RngCore; |
| @@ -26,7 +26,7 @@ use {defmt_rtt as _, panic_probe as _}; | |||
| 26 | async fn ethernet_task( | 26 | async fn ethernet_task( |
| 27 | runner: Runner< | 27 | runner: Runner< |
| 28 | 'static, | 28 | 'static, |
| 29 | ExclusiveDevice<Spi<'static, SPI0, Async>, Output<'static, PIN_17>>, | 29 | ExclusiveDevice<Spi<'static, SPI0, Async>, Output<'static, PIN_17>, Delay>, |
| 30 | Input<'static, PIN_21>, | 30 | Input<'static, PIN_21>, |
| 31 | Output<'static, PIN_20>, | 31 | Output<'static, PIN_20>, |
| 32 | >, | 32 | >, |
| @@ -55,8 +55,14 @@ async fn main(spawner: Spawner) { | |||
| 55 | 55 | ||
| 56 | let mac_addr = [0x02, 0x00, 0x00, 0x00, 0x00, 0x00]; | 56 | let mac_addr = [0x02, 0x00, 0x00, 0x00, 0x00, 0x00]; |
| 57 | let state = make_static!(State::<8, 8>::new()); | 57 | let state = make_static!(State::<8, 8>::new()); |
| 58 | let (device, runner) = | 58 | let (device, runner) = embassy_net_w5500::new( |
| 59 | embassy_net_w5500::new(mac_addr, state, ExclusiveDevice::new(spi, cs), w5500_int, w5500_reset).await; | 59 | mac_addr, |
| 60 | state, | ||
| 61 | ExclusiveDevice::new(spi, cs, Delay), | ||
| 62 | w5500_int, | ||
| 63 | w5500_reset, | ||
| 64 | ) | ||
| 65 | .await; | ||
| 60 | unwrap!(spawner.spawn(ethernet_task(runner))); | 66 | unwrap!(spawner.spawn(ethernet_task(runner))); |
| 61 | 67 | ||
| 62 | // Generate random seed | 68 | // Generate random seed |
diff --git a/examples/rp/src/bin/ethernet_w5500_udp.rs b/examples/rp/src/bin/ethernet_w5500_udp.rs index ada86ae55..038432b17 100644 --- a/examples/rp/src/bin/ethernet_w5500_udp.rs +++ b/examples/rp/src/bin/ethernet_w5500_udp.rs | |||
| @@ -16,6 +16,7 @@ use embassy_rp::clocks::RoscRng; | |||
| 16 | use embassy_rp::gpio::{Input, Level, Output, Pull}; | 16 | use embassy_rp::gpio::{Input, Level, Output, Pull}; |
| 17 | use embassy_rp::peripherals::{PIN_17, PIN_20, PIN_21, SPI0}; | 17 | use embassy_rp::peripherals::{PIN_17, PIN_20, PIN_21, SPI0}; |
| 18 | use embassy_rp::spi::{Async, Config as SpiConfig, Spi}; | 18 | use embassy_rp::spi::{Async, Config as SpiConfig, Spi}; |
| 19 | use embassy_time::Delay; | ||
| 19 | use embedded_hal_async::spi::ExclusiveDevice; | 20 | use embedded_hal_async::spi::ExclusiveDevice; |
| 20 | use rand::RngCore; | 21 | use rand::RngCore; |
| 21 | use static_cell::make_static; | 22 | use static_cell::make_static; |
| @@ -24,7 +25,7 @@ use {defmt_rtt as _, panic_probe as _}; | |||
| 24 | async fn ethernet_task( | 25 | async fn ethernet_task( |
| 25 | runner: Runner< | 26 | runner: Runner< |
| 26 | 'static, | 27 | 'static, |
| 27 | ExclusiveDevice<Spi<'static, SPI0, Async>, Output<'static, PIN_17>>, | 28 | ExclusiveDevice<Spi<'static, SPI0, Async>, Output<'static, PIN_17>, Delay>, |
| 28 | Input<'static, PIN_21>, | 29 | Input<'static, PIN_21>, |
| 29 | Output<'static, PIN_20>, | 30 | Output<'static, PIN_20>, |
| 30 | >, | 31 | >, |
| @@ -52,8 +53,14 @@ async fn main(spawner: Spawner) { | |||
| 52 | 53 | ||
| 53 | let mac_addr = [0x02, 0x00, 0x00, 0x00, 0x00, 0x00]; | 54 | let mac_addr = [0x02, 0x00, 0x00, 0x00, 0x00, 0x00]; |
| 54 | let state = make_static!(State::<8, 8>::new()); | 55 | let state = make_static!(State::<8, 8>::new()); |
| 55 | let (device, runner) = | 56 | let (device, runner) = embassy_net_w5500::new( |
| 56 | embassy_net_w5500::new(mac_addr, state, ExclusiveDevice::new(spi, cs), w5500_int, w5500_reset).await; | 57 | mac_addr, |
| 58 | state, | ||
| 59 | ExclusiveDevice::new(spi, cs, Delay), | ||
| 60 | w5500_int, | ||
| 61 | w5500_reset, | ||
| 62 | ) | ||
| 63 | .await; | ||
| 57 | unwrap!(spawner.spawn(ethernet_task(runner))); | 64 | unwrap!(spawner.spawn(ethernet_task(runner))); |
| 58 | 65 | ||
| 59 | // Generate random seed | 66 | // Generate random seed |
diff --git a/examples/rp/src/bin/spi_display.rs b/examples/rp/src/bin/spi_display.rs index 85a19ce07..2fd201595 100644 --- a/examples/rp/src/bin/spi_display.rs +++ b/examples/rp/src/bin/spi_display.rs | |||
| @@ -175,7 +175,7 @@ mod touch { | |||
| 175 | mod my_display_interface { | 175 | mod my_display_interface { |
| 176 | use display_interface::{DataFormat, DisplayError, WriteOnlyDataCommand}; | 176 | use display_interface::{DataFormat, DisplayError, WriteOnlyDataCommand}; |
| 177 | use embedded_hal_1::digital::OutputPin; | 177 | use embedded_hal_1::digital::OutputPin; |
| 178 | use embedded_hal_1::spi::SpiDeviceWrite; | 178 | use embedded_hal_1::spi::SpiDevice; |
| 179 | 179 | ||
| 180 | /// SPI display interface. | 180 | /// SPI display interface. |
| 181 | /// | 181 | /// |
| @@ -187,7 +187,7 @@ mod my_display_interface { | |||
| 187 | 187 | ||
| 188 | impl<SPI, DC> SPIDeviceInterface<SPI, DC> | 188 | impl<SPI, DC> SPIDeviceInterface<SPI, DC> |
| 189 | where | 189 | where |
| 190 | SPI: SpiDeviceWrite, | 190 | SPI: SpiDevice, |
| 191 | DC: OutputPin, | 191 | DC: OutputPin, |
| 192 | { | 192 | { |
| 193 | /// Create new SPI interface for communciation with a display driver | 193 | /// Create new SPI interface for communciation with a display driver |
| @@ -198,7 +198,7 @@ mod my_display_interface { | |||
| 198 | 198 | ||
| 199 | impl<SPI, DC> WriteOnlyDataCommand for SPIDeviceInterface<SPI, DC> | 199 | impl<SPI, DC> WriteOnlyDataCommand for SPIDeviceInterface<SPI, DC> |
| 200 | where | 200 | where |
| 201 | SPI: SpiDeviceWrite, | 201 | SPI: SpiDevice, |
| 202 | DC: OutputPin, | 202 | DC: OutputPin, |
| 203 | { | 203 | { |
| 204 | fn send_commands(&mut self, cmds: DataFormat<'_>) -> Result<(), DisplayError> { | 204 | fn send_commands(&mut self, cmds: DataFormat<'_>) -> Result<(), DisplayError> { |
| @@ -218,7 +218,7 @@ mod my_display_interface { | |||
| 218 | } | 218 | } |
| 219 | } | 219 | } |
| 220 | 220 | ||
| 221 | fn send_u8<T: SpiDeviceWrite>(spi: &mut T, words: DataFormat<'_>) -> Result<(), T::Error> { | 221 | fn send_u8<T: SpiDevice>(spi: &mut T, words: DataFormat<'_>) -> Result<(), T::Error> { |
| 222 | match words { | 222 | match words { |
| 223 | DataFormat::U8(slice) => spi.write(slice), | 223 | DataFormat::U8(slice) => spi.write(slice), |
| 224 | DataFormat::U16(slice) => { | 224 | DataFormat::U16(slice) => { |
diff --git a/examples/stm32h5/Cargo.toml b/examples/stm32h5/Cargo.toml index ebe511347..789ef59cc 100644 --- a/examples/stm32h5/Cargo.toml +++ b/examples/stm32h5/Cargo.toml | |||
| @@ -19,8 +19,8 @@ defmt-rtt = "0.4" | |||
| 19 | cortex-m = { version = "0.7.6", features = ["inline-asm", "critical-section-single-core"] } | 19 | cortex-m = { version = "0.7.6", features = ["inline-asm", "critical-section-single-core"] } |
| 20 | cortex-m-rt = "0.7.0" | 20 | cortex-m-rt = "0.7.0" |
| 21 | embedded-hal = "0.2.6" | 21 | embedded-hal = "0.2.6" |
| 22 | embedded-hal-1 = { package = "embedded-hal", version = "=1.0.0-alpha.10" } | 22 | embedded-hal-1 = { package = "embedded-hal", version = "=1.0.0-alpha.11" } |
| 23 | embedded-hal-async = { version = "=0.2.0-alpha.1" } | 23 | embedded-hal-async = { version = "=0.2.0-alpha.2" } |
| 24 | embedded-nal-async = "0.4.0" | 24 | embedded-nal-async = "0.4.0" |
| 25 | panic-probe = { version = "0.3", features = ["print-defmt"] } | 25 | panic-probe = { version = "0.3", features = ["print-defmt"] } |
| 26 | futures = { version = "0.3.17", default-features = false, features = ["async-await"] } | 26 | futures = { version = "0.3.17", default-features = false, features = ["async-await"] } |
diff --git a/examples/stm32h7/Cargo.toml b/examples/stm32h7/Cargo.toml index 62ef5e9e4..04a2baab7 100644 --- a/examples/stm32h7/Cargo.toml +++ b/examples/stm32h7/Cargo.toml | |||
| @@ -19,8 +19,8 @@ defmt-rtt = "0.4" | |||
| 19 | cortex-m = { version = "0.7.6", features = ["inline-asm", "critical-section-single-core"] } | 19 | cortex-m = { version = "0.7.6", features = ["inline-asm", "critical-section-single-core"] } |
| 20 | cortex-m-rt = "0.7.0" | 20 | cortex-m-rt = "0.7.0" |
| 21 | embedded-hal = "0.2.6" | 21 | embedded-hal = "0.2.6" |
| 22 | embedded-hal-1 = { package = "embedded-hal", version = "=1.0.0-alpha.10" } | 22 | embedded-hal-1 = { package = "embedded-hal", version = "=1.0.0-alpha.11" } |
| 23 | embedded-hal-async = { version = "=0.2.0-alpha.1" } | 23 | embedded-hal-async = { version = "=0.2.0-alpha.2" } |
| 24 | embedded-nal-async = "0.4.0" | 24 | embedded-nal-async = "0.4.0" |
| 25 | panic-probe = { version = "0.3", features = ["print-defmt"] } | 25 | panic-probe = { version = "0.3", features = ["print-defmt"] } |
| 26 | futures = { version = "0.3.17", default-features = false, features = ["async-await"] } | 26 | futures = { version = "0.3.17", default-features = false, features = ["async-await"] } |
diff --git a/examples/stm32l0/Cargo.toml b/examples/stm32l0/Cargo.toml index 2ead714e4..988fd3a79 100644 --- a/examples/stm32l0/Cargo.toml +++ b/examples/stm32l0/Cargo.toml | |||
| @@ -32,3 +32,6 @@ futures = { version = "0.3.17", default-features = false, features = ["async-awa | |||
| 32 | heapless = { version = "0.7.5", default-features = false } | 32 | heapless = { version = "0.7.5", default-features = false } |
| 33 | embedded-hal = "0.2.6" | 33 | embedded-hal = "0.2.6" |
| 34 | static_cell = "1.1" | 34 | static_cell = "1.1" |
| 35 | |||
| 36 | [patch.crates-io] | ||
| 37 | lora-phy = { git = "https://github.com/embassy-rs/lora-phy", rev = "ad289428fd44b02788e2fa2116445cc8f640a265" } | ||
diff --git a/examples/stm32l4/Cargo.toml b/examples/stm32l4/Cargo.toml index 780256cc2..dca052c2f 100644 --- a/examples/stm32l4/Cargo.toml +++ b/examples/stm32l4/Cargo.toml | |||
| @@ -18,10 +18,11 @@ defmt-rtt = "0.4" | |||
| 18 | cortex-m = { version = "0.7.6", features = ["critical-section-single-core"] } | 18 | cortex-m = { version = "0.7.6", features = ["critical-section-single-core"] } |
| 19 | cortex-m-rt = "0.7.0" | 19 | cortex-m-rt = "0.7.0" |
| 20 | embedded-hal = "0.2.6" | 20 | embedded-hal = "0.2.6" |
| 21 | embedded-hal-1 = { package = "embedded-hal", version = "=1.0.0-alpha.10" } | 21 | embedded-hal-1 = { package = "embedded-hal", version = "=1.0.0-alpha.11" } |
| 22 | embedded-hal-async = { version = "=0.2.0-alpha.1" } | 22 | embedded-hal-async = { version = "=0.2.0-alpha.2" } |
| 23 | panic-probe = { version = "0.3", features = ["print-defmt"] } | 23 | panic-probe = { version = "0.3", features = ["print-defmt"] } |
| 24 | futures = { version = "0.3.17", default-features = false, features = ["async-await"] } | 24 | futures = { version = "0.3.17", default-features = false, features = ["async-await"] } |
| 25 | heapless = { version = "0.7.5", default-features = false } | 25 | heapless = { version = "0.7.5", default-features = false } |
| 26 | chrono = { version = "^0.4", default-features = false } | ||
| 26 | 27 | ||
| 27 | micromath = "2.0.0" | 28 | micromath = "2.0.0" |
diff --git a/examples/stm32wl/Cargo.toml b/examples/stm32wl/Cargo.toml index 260f9afa1..75a5f1c41 100644 --- a/examples/stm32wl/Cargo.toml +++ b/examples/stm32wl/Cargo.toml | |||
| @@ -25,3 +25,6 @@ embedded-storage = "0.3.0" | |||
| 25 | panic-probe = { version = "0.3", features = ["print-defmt"] } | 25 | panic-probe = { version = "0.3", features = ["print-defmt"] } |
| 26 | futures = { version = "0.3.17", default-features = false, features = ["async-await"] } | 26 | futures = { version = "0.3.17", default-features = false, features = ["async-await"] } |
| 27 | heapless = { version = "0.7.5", default-features = false } | 27 | heapless = { version = "0.7.5", default-features = false } |
| 28 | |||
| 29 | [patch.crates-io] | ||
| 30 | lora-phy = { git = "https://github.com/embassy-rs/lora-phy", rev = "ad289428fd44b02788e2fa2116445cc8f640a265" } | ||
diff --git a/rust-toolchain.toml b/rust-toolchain.toml index fd454db26..c201d8bdf 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | # Before upgrading check that everything is available on all tier1 targets here: | 1 | # Before upgrading check that everything is available on all tier1 targets here: |
| 2 | # https://rust-lang.github.io/rustup-components-history | 2 | # https://rust-lang.github.io/rustup-components-history |
| 3 | [toolchain] | 3 | [toolchain] |
| 4 | channel = "nightly-2023-05-18" | 4 | channel = "nightly-2023-07-03" |
| 5 | components = [ "rust-src", "rustfmt", "llvm-tools-preview" ] | 5 | components = [ "rust-src", "rustfmt", "llvm-tools-preview" ] |
| 6 | targets = [ | 6 | targets = [ |
| 7 | "thumbv7em-none-eabi", | 7 | "thumbv7em-none-eabi", |
diff --git a/tests/nrf/Cargo.toml b/tests/nrf/Cargo.toml index 4f9ecc47a..247287e46 100644 --- a/tests/nrf/Cargo.toml +++ b/tests/nrf/Cargo.toml | |||
| @@ -10,12 +10,12 @@ teleprobe-meta = "1" | |||
| 10 | embassy-futures = { version = "0.1.0", path = "../../embassy-futures" } | 10 | embassy-futures = { version = "0.1.0", path = "../../embassy-futures" } |
| 11 | embassy-sync = { version = "0.2.0", path = "../../embassy-sync", features = ["defmt", "nightly"] } | 11 | embassy-sync = { version = "0.2.0", path = "../../embassy-sync", features = ["defmt", "nightly"] } |
| 12 | embassy-executor = { version = "0.2.0", path = "../../embassy-executor", features = ["arch-cortex-m", "executor-thread", "defmt", "nightly", "integrated-timers"] } | 12 | embassy-executor = { version = "0.2.0", path = "../../embassy-executor", features = ["arch-cortex-m", "executor-thread", "defmt", "nightly", "integrated-timers"] } |
| 13 | embassy-time = { version = "0.1.0", path = "../../embassy-time", features = ["defmt", "nightly", "defmt-timestamp-uptime"] } | 13 | embassy-time = { version = "0.1.0", path = "../../embassy-time", features = ["defmt", "nightly", "unstable-traits", "defmt-timestamp-uptime"] } |
| 14 | embassy-nrf = { version = "0.1.0", path = "../../embassy-nrf", features = ["defmt", "nightly", "unstable-traits", "nrf52840", "time-driver-rtc1", "gpiote", "unstable-pac"] } | 14 | embassy-nrf = { version = "0.1.0", path = "../../embassy-nrf", features = ["defmt", "nightly", "unstable-traits", "nrf52840", "time-driver-rtc1", "gpiote", "unstable-pac"] } |
| 15 | embedded-io = { version = "0.4.0", features = ["async"] } | 15 | embedded-io = { version = "0.4.0", features = ["async"] } |
| 16 | embassy-net = { version = "0.1.0", path = "../../embassy-net", features = ["defmt", "tcp", "dhcpv4", "medium-ethernet", "nightly"] } | 16 | embassy-net = { version = "0.1.0", path = "../../embassy-net", features = ["defmt", "tcp", "dhcpv4", "medium-ethernet", "nightly"] } |
| 17 | embassy-net-esp-hosted = { version = "0.1.0", path = "../../embassy-net-esp-hosted", features = ["defmt"] } | 17 | embassy-net-esp-hosted = { version = "0.1.0", path = "../../embassy-net-esp-hosted", features = ["defmt"] } |
| 18 | embedded-hal-async = { version = "0.2.0-alpha.1" } | 18 | embedded-hal-async = { version = "0.2.0-alpha.2" } |
| 19 | static_cell = { version = "1.1", features = [ "nightly" ] } | 19 | static_cell = { version = "1.1", features = [ "nightly" ] } |
| 20 | 20 | ||
| 21 | defmt = "0.3" | 21 | defmt = "0.3" |
diff --git a/tests/nrf/src/bin/wifi_esp_hosted_perf.rs b/tests/nrf/src/bin/wifi_esp_hosted_perf.rs index 277b985c5..398ab9d27 100644 --- a/tests/nrf/src/bin/wifi_esp_hosted_perf.rs +++ b/tests/nrf/src/bin/wifi_esp_hosted_perf.rs | |||
| @@ -14,7 +14,7 @@ use embassy_nrf::gpio::{AnyPin, Input, Level, Output, OutputDrive, Pin, Pull}; | |||
| 14 | use embassy_nrf::rng::Rng; | 14 | use embassy_nrf::rng::Rng; |
| 15 | use embassy_nrf::spim::{self, Spim}; | 15 | use embassy_nrf::spim::{self, Spim}; |
| 16 | use embassy_nrf::{bind_interrupts, peripherals}; | 16 | use embassy_nrf::{bind_interrupts, peripherals}; |
| 17 | use embassy_time::{with_timeout, Duration, Timer}; | 17 | use embassy_time::{with_timeout, Delay, Duration, Timer}; |
| 18 | use embedded_hal_async::spi::ExclusiveDevice; | 18 | use embedded_hal_async::spi::ExclusiveDevice; |
| 19 | use static_cell::make_static; | 19 | use static_cell::make_static; |
| 20 | use {defmt_rtt as _, embassy_net_esp_hosted as hosted, panic_probe as _}; | 20 | use {defmt_rtt as _, embassy_net_esp_hosted as hosted, panic_probe as _}; |
| @@ -30,7 +30,7 @@ bind_interrupts!(struct Irqs { | |||
| 30 | async fn wifi_task( | 30 | async fn wifi_task( |
| 31 | runner: hosted::Runner< | 31 | runner: hosted::Runner< |
| 32 | 'static, | 32 | 'static, |
| 33 | ExclusiveDevice<Spim<'static, peripherals::SPI3>, Output<'static, peripherals::P0_31>>, | 33 | ExclusiveDevice<Spim<'static, peripherals::SPI3>, Output<'static, peripherals::P0_31>, Delay>, |
| 34 | Input<'static, AnyPin>, | 34 | Input<'static, AnyPin>, |
| 35 | Output<'static, peripherals::P1_05>, | 35 | Output<'static, peripherals::P1_05>, |
| 36 | >, | 36 | >, |
| @@ -63,7 +63,7 @@ async fn main(spawner: Spawner) { | |||
| 63 | config.frequency = spim::Frequency::M32; | 63 | config.frequency = spim::Frequency::M32; |
| 64 | config.mode = spim::MODE_2; // !!! | 64 | config.mode = spim::MODE_2; // !!! |
| 65 | let spi = spim::Spim::new(p.SPI3, Irqs, sck, miso, mosi, config); | 65 | let spi = spim::Spim::new(p.SPI3, Irqs, sck, miso, mosi, config); |
| 66 | let spi = ExclusiveDevice::new(spi, cs); | 66 | let spi = ExclusiveDevice::new(spi, cs, Delay); |
| 67 | 67 | ||
| 68 | let (device, mut control, runner) = embassy_net_esp_hosted::new( | 68 | let (device, mut control, runner) = embassy_net_esp_hosted::new( |
| 69 | make_static!(embassy_net_esp_hosted::State::new()), | 69 | make_static!(embassy_net_esp_hosted::State::new()), |
diff --git a/tests/rp/Cargo.toml b/tests/rp/Cargo.toml index 180d0ebbe..f1b48e747 100644 --- a/tests/rp/Cargo.toml +++ b/tests/rp/Cargo.toml | |||
| @@ -22,8 +22,8 @@ defmt-rtt = "0.4" | |||
| 22 | cortex-m = { version = "0.7.6" } | 22 | cortex-m = { version = "0.7.6" } |
| 23 | cortex-m-rt = "0.7.0" | 23 | cortex-m-rt = "0.7.0" |
| 24 | embedded-hal = "0.2.6" | 24 | embedded-hal = "0.2.6" |
| 25 | embedded-hal-1 = { package = "embedded-hal", version = "=1.0.0-alpha.10" } | 25 | embedded-hal-1 = { package = "embedded-hal", version = "=1.0.0-alpha.11" } |
| 26 | embedded-hal-async = { version = "=0.2.0-alpha.1" } | 26 | embedded-hal-async = { version = "=0.2.0-alpha.2" } |
| 27 | panic-probe = { version = "0.3.0", features = ["print-defmt"] } | 27 | panic-probe = { version = "0.3.0", features = ["print-defmt"] } |
| 28 | futures = { version = "0.3.17", default-features = false, features = ["async-await"] } | 28 | futures = { version = "0.3.17", default-features = false, features = ["async-await"] } |
| 29 | embedded-io = { version = "0.4.0", features = ["async"] } | 29 | embedded-io = { version = "0.4.0", features = ["async"] } |
diff --git a/tests/stm32/Cargo.toml b/tests/stm32/Cargo.toml index c2422f7bc..c69af6d5a 100644 --- a/tests/stm32/Cargo.toml +++ b/tests/stm32/Cargo.toml | |||
| @@ -38,8 +38,8 @@ defmt-rtt = "0.4" | |||
| 38 | cortex-m = { version = "0.7.6", features = ["critical-section-single-core"] } | 38 | cortex-m = { version = "0.7.6", features = ["critical-section-single-core"] } |
| 39 | cortex-m-rt = "0.7.0" | 39 | cortex-m-rt = "0.7.0" |
| 40 | embedded-hal = "0.2.6" | 40 | embedded-hal = "0.2.6" |
| 41 | embedded-hal-1 = { package = "embedded-hal", version = "=1.0.0-alpha.10" } | 41 | embedded-hal-1 = { package = "embedded-hal", version = "=1.0.0-alpha.11" } |
| 42 | embedded-hal-async = { version = "=0.2.0-alpha.1" } | 42 | embedded-hal-async = { version = "=0.2.0-alpha.2" } |
| 43 | panic-probe = { version = "0.3.0", features = ["print-defmt"] } | 43 | panic-probe = { version = "0.3.0", features = ["print-defmt"] } |
| 44 | rand_core = { version = "0.6", default-features = false } | 44 | rand_core = { version = "0.6", default-features = false } |
| 45 | rand_chacha = { version = "0.3", default-features = false } | 45 | rand_chacha = { version = "0.3", default-features = false } |
