Remove nightly and unstable-traits features in preparation for 1.75.
This commit is contained in:
		
							
								
								
									
										3
									
								
								.cargo/config.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								.cargo/config.toml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
				
			|||||||
 | 
					[patch.crates-io]
 | 
				
			||||||
 | 
					embedded-storage = { git = "https://github.com/rust-embedded-community/embedded-storage", rev = "634302740f8d676538c3890748e7d7dfe372a040" }
 | 
				
			||||||
 | 
					embedded-storage-async = { git = "https://github.com/rust-embedded-community/embedded-storage", rev = "634302740f8d676538c3890748e7d7dfe372a040" }
 | 
				
			||||||
							
								
								
									
										2
									
								
								.github/ci/build-stable.sh
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/ci/build-stable.sh
									
									
									
									
										vendored
									
									
								
							@@ -21,7 +21,7 @@ fi
 | 
				
			|||||||
hashtime restore /ci/cache/filetime.json || true
 | 
					hashtime restore /ci/cache/filetime.json || true
 | 
				
			||||||
hashtime save /ci/cache/filetime.json
 | 
					hashtime save /ci/cache/filetime.json
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sed -i 's/channel.*/channel = "stable"/g' rust-toolchain.toml
 | 
					sed -i 's/channel.*/channel = "beta"/g' rust-toolchain.toml
 | 
				
			||||||
 | 
					
 | 
				
			||||||
./ci_stable.sh
 | 
					./ci_stable.sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										26
									
								
								.github/ci/test.sh
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										26
									
								
								.github/ci/test.sh
									
									
									
									
										vendored
									
									
								
							@@ -4,17 +4,6 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
set -euo pipefail
 | 
					set -euo pipefail
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export RUSTUP_HOME=/ci/cache/rustup
 | 
					 | 
				
			||||||
export CARGO_HOME=/ci/cache/cargo
 | 
					 | 
				
			||||||
export CARGO_TARGET_DIR=/ci/cache/target
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# needed for "dumb HTTP" transport support
 | 
					 | 
				
			||||||
# used when pointing stm32-metapac to a CI-built one.
 | 
					 | 
				
			||||||
export CARGO_NET_GIT_FETCH_WITH_CLI=true
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
hashtime restore /ci/cache/filetime.json || true
 | 
					 | 
				
			||||||
hashtime save /ci/cache/filetime.json
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
MIRIFLAGS=-Zmiri-ignore-leaks cargo miri test --manifest-path ./embassy-executor/Cargo.toml
 | 
					MIRIFLAGS=-Zmiri-ignore-leaks cargo miri test --manifest-path ./embassy-executor/Cargo.toml
 | 
				
			||||||
MIRIFLAGS=-Zmiri-ignore-leaks cargo miri test --manifest-path ./embassy-executor/Cargo.toml --features nightly
 | 
					MIRIFLAGS=-Zmiri-ignore-leaks cargo miri test --manifest-path ./embassy-executor/Cargo.toml --features nightly
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -24,16 +13,15 @@ cargo test --manifest-path ./embassy-hal-internal/Cargo.toml
 | 
				
			|||||||
cargo test --manifest-path ./embassy-time/Cargo.toml --features generic-queue
 | 
					cargo test --manifest-path ./embassy-time/Cargo.toml --features generic-queue
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cargo test --manifest-path ./embassy-boot/boot/Cargo.toml
 | 
					cargo test --manifest-path ./embassy-boot/boot/Cargo.toml
 | 
				
			||||||
cargo test --manifest-path ./embassy-boot/boot/Cargo.toml --features nightly
 | 
					cargo test --manifest-path ./embassy-boot/boot/Cargo.toml --features ed25519-dalek
 | 
				
			||||||
cargo test --manifest-path ./embassy-boot/boot/Cargo.toml --features nightly,ed25519-dalek
 | 
					cargo test --manifest-path ./embassy-boot/boot/Cargo.toml --features ed25519-salty
 | 
				
			||||||
cargo test --manifest-path ./embassy-boot/boot/Cargo.toml --features nightly,ed25519-salty
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
cargo test --manifest-path ./embassy-nrf/Cargo.toml --no-default-features --features nightly,nrf52840,time-driver-rtc1,gpiote
 | 
					cargo test --manifest-path ./embassy-nrf/Cargo.toml --no-default-features --features nrf52840,time-driver-rtc1,gpiote
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cargo test --manifest-path ./embassy-rp/Cargo.toml --no-default-features --features nightly,time-driver
 | 
					cargo test --manifest-path ./embassy-rp/Cargo.toml --no-default-features --features time-driver
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cargo test --manifest-path ./embassy-stm32/Cargo.toml --no-default-features --features nightly,stm32f429vg,exti,time-driver-any,exti
 | 
					cargo test --manifest-path ./embassy-stm32/Cargo.toml --no-default-features --features stm32f429vg,exti,time-driver-any,exti
 | 
				
			||||||
cargo test --manifest-path ./embassy-stm32/Cargo.toml --no-default-features --features nightly,stm32f732ze,exti,time-driver-any,exti
 | 
					cargo test --manifest-path ./embassy-stm32/Cargo.toml --no-default-features --features stm32f732ze,exti,time-driver-any,exti
 | 
				
			||||||
cargo test --manifest-path ./embassy-stm32/Cargo.toml --no-default-features --features nightly,stm32f769ni,exti,time-driver-any,exti
 | 
					cargo test --manifest-path ./embassy-stm32/Cargo.toml --no-default-features --features stm32f769ni,exti,time-driver-any,exti
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cargo test --manifest-path ./embassy-net-adin1110/Cargo.toml
 | 
					cargo test --manifest-path ./embassy-net-adin1110/Cargo.toml
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										172
									
								
								ci.sh
									
									
									
									
									
								
							
							
						
						
									
										172
									
								
								ci.sh
									
									
									
									
									
								
							@@ -35,104 +35,94 @@ cargo batch  \
 | 
				
			|||||||
    --- build --release --manifest-path embassy-executor/Cargo.toml --target riscv32imac-unknown-none-elf --features nightly,arch-riscv32,integrated-timers \
 | 
					    --- build --release --manifest-path embassy-executor/Cargo.toml --target riscv32imac-unknown-none-elf --features nightly,arch-riscv32,integrated-timers \
 | 
				
			||||||
    --- build --release --manifest-path embassy-executor/Cargo.toml --target riscv32imac-unknown-none-elf --features nightly,arch-riscv32,executor-thread \
 | 
					    --- build --release --manifest-path embassy-executor/Cargo.toml --target riscv32imac-unknown-none-elf --features nightly,arch-riscv32,executor-thread \
 | 
				
			||||||
    --- build --release --manifest-path embassy-executor/Cargo.toml --target riscv32imac-unknown-none-elf --features nightly,arch-riscv32,executor-thread,integrated-timers \
 | 
					    --- build --release --manifest-path embassy-executor/Cargo.toml --target riscv32imac-unknown-none-elf --features nightly,arch-riscv32,executor-thread,integrated-timers \
 | 
				
			||||||
    --- build --release --manifest-path embassy-sync/Cargo.toml --target thumbv6m-none-eabi --features nightly,defmt \
 | 
					    --- build --release --manifest-path embassy-sync/Cargo.toml --target thumbv6m-none-eabi --features defmt \
 | 
				
			||||||
    --- build --release --manifest-path embassy-time/Cargo.toml --target thumbv6m-none-eabi --features nightly,defmt,defmt-timestamp-uptime,tick-hz-32_768,generic-queue-8 \
 | 
					    --- build --release --manifest-path embassy-time/Cargo.toml --target thumbv6m-none-eabi --features defmt,defmt-timestamp-uptime,tick-hz-32_768,generic-queue-8 \
 | 
				
			||||||
    --- build --release --manifest-path embassy-net/Cargo.toml --target thumbv7em-none-eabi --features defmt,tcp,udp,dns,proto-ipv4,medium-ethernet \
 | 
					    --- build --release --manifest-path embassy-net/Cargo.toml --target thumbv7em-none-eabi --features defmt,tcp,udp,dns,proto-ipv4,medium-ethernet \
 | 
				
			||||||
    --- build --release --manifest-path embassy-net/Cargo.toml --target thumbv7em-none-eabi --features defmt,tcp,udp,dns,proto-ipv4,igmp,medium-ethernet \
 | 
					    --- build --release --manifest-path embassy-net/Cargo.toml --target thumbv7em-none-eabi --features defmt,tcp,udp,dns,proto-ipv4,igmp,medium-ethernet \
 | 
				
			||||||
    --- build --release --manifest-path embassy-net/Cargo.toml --target thumbv7em-none-eabi --features defmt,tcp,udp,dns,dhcpv4,medium-ethernet \
 | 
					    --- build --release --manifest-path embassy-net/Cargo.toml --target thumbv7em-none-eabi --features defmt,tcp,udp,dns,dhcpv4,medium-ethernet \
 | 
				
			||||||
    --- build --release --manifest-path embassy-net/Cargo.toml --target thumbv7em-none-eabi --features defmt,tcp,udp,dns,dhcpv4,medium-ethernet,nightly,dhcpv4-hostname \
 | 
					    --- build --release --manifest-path embassy-net/Cargo.toml --target thumbv7em-none-eabi --features defmt,tcp,udp,dns,dhcpv4,medium-ethernet,dhcpv4-hostname \
 | 
				
			||||||
    --- build --release --manifest-path embassy-net/Cargo.toml --target thumbv7em-none-eabi --features defmt,tcp,udp,dns,proto-ipv6,medium-ethernet \
 | 
					    --- build --release --manifest-path embassy-net/Cargo.toml --target thumbv7em-none-eabi --features defmt,tcp,udp,dns,proto-ipv6,medium-ethernet \
 | 
				
			||||||
    --- build --release --manifest-path embassy-net/Cargo.toml --target thumbv7em-none-eabi --features defmt,tcp,udp,dns,proto-ipv6,medium-ieee802154 \
 | 
					    --- build --release --manifest-path embassy-net/Cargo.toml --target thumbv7em-none-eabi --features defmt,tcp,udp,dns,proto-ipv6,medium-ieee802154 \
 | 
				
			||||||
    --- build --release --manifest-path embassy-net/Cargo.toml --target thumbv7em-none-eabi --features defmt,tcp,udp,dns,proto-ipv6,medium-ethernet,medium-ieee802154 \
 | 
					    --- build --release --manifest-path embassy-net/Cargo.toml --target thumbv7em-none-eabi --features defmt,tcp,udp,dns,proto-ipv6,medium-ethernet,medium-ieee802154 \
 | 
				
			||||||
    --- build --release --manifest-path embassy-net/Cargo.toml --target thumbv7em-none-eabi --features defmt,tcp,udp,dns,proto-ipv6,medium-ethernet,nightly \
 | 
					    --- build --release --manifest-path embassy-net/Cargo.toml --target thumbv7em-none-eabi --features defmt,tcp,udp,dns,proto-ipv6,medium-ethernet \
 | 
				
			||||||
    --- build --release --manifest-path embassy-net/Cargo.toml --target thumbv7em-none-eabi --features defmt,tcp,udp,dns,proto-ipv4,proto-ipv6,medium-ethernet \
 | 
					    --- build --release --manifest-path embassy-net/Cargo.toml --target thumbv7em-none-eabi --features defmt,tcp,udp,dns,proto-ipv4,proto-ipv6,medium-ethernet \
 | 
				
			||||||
    --- build --release --manifest-path embassy-net/Cargo.toml --target thumbv7em-none-eabi --features defmt,tcp,udp,dns,proto-ipv4,proto-ipv6,medium-ethernet,nightly \
 | 
					    --- build --release --manifest-path embassy-net/Cargo.toml --target thumbv7em-none-eabi --features defmt,tcp,udp,dns,proto-ipv4,proto-ipv6,medium-ip \
 | 
				
			||||||
    --- build --release --manifest-path embassy-net/Cargo.toml --target thumbv7em-none-eabi --features defmt,tcp,udp,dns,proto-ipv4,proto-ipv6,medium-ip,nightly \
 | 
					    --- build --release --manifest-path embassy-net/Cargo.toml --target thumbv7em-none-eabi --features defmt,tcp,udp,dns,proto-ipv4,proto-ipv6,medium-ip,medium-ethernet \
 | 
				
			||||||
    --- build --release --manifest-path embassy-net/Cargo.toml --target thumbv7em-none-eabi --features defmt,tcp,udp,dns,proto-ipv4,proto-ipv6,medium-ip,medium-ethernet,nightly \
 | 
					    --- build --release --manifest-path embassy-net/Cargo.toml --target thumbv7em-none-eabi --features defmt,tcp,udp,dns,proto-ipv4,proto-ipv6,medium-ip,medium-ethernet,medium-ieee802154 \
 | 
				
			||||||
    --- build --release --manifest-path embassy-net/Cargo.toml --target thumbv7em-none-eabi --features defmt,tcp,udp,dns,proto-ipv4,proto-ipv6,medium-ip,medium-ethernet,medium-ieee802154,nightly \
 | 
					    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52805,gpiote,time-driver-rtc1 \
 | 
				
			||||||
    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nightly,nrf52805,gpiote,time-driver-rtc1 \
 | 
					    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52810,gpiote,time-driver-rtc1 \
 | 
				
			||||||
    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nightly,nrf52810,gpiote,time-driver-rtc1 \
 | 
					    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52811,gpiote,time-driver-rtc1 \
 | 
				
			||||||
    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nightly,nrf52811,gpiote,time-driver-rtc1 \
 | 
					    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52820,gpiote,time-driver-rtc1 \
 | 
				
			||||||
    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nightly,nrf52820,gpiote,time-driver-rtc1 \
 | 
					    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52832,gpiote,time-driver-rtc1,reset-pin-as-gpio \
 | 
				
			||||||
    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nightly,nrf52832,gpiote,time-driver-rtc1,reset-pin-as-gpio \
 | 
					    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52833,gpiote,time-driver-rtc1,nfc-pins-as-gpio \
 | 
				
			||||||
    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nightly,nrf52833,gpiote,time-driver-rtc1,unstable-traits,nfc-pins-as-gpio \
 | 
					    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv8m.main-none-eabihf --features nrf9160-s,gpiote,time-driver-rtc1 \
 | 
				
			||||||
    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv8m.main-none-eabihf --features nightly,nrf9160-s,gpiote,time-driver-rtc1 \
 | 
					    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv8m.main-none-eabihf --features nrf9160-ns,gpiote,time-driver-rtc1 \
 | 
				
			||||||
    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv8m.main-none-eabihf --features nightly,nrf9160-ns,gpiote,time-driver-rtc1,unstable-traits \
 | 
					    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv8m.main-none-eabihf --features nrf5340-app-s,gpiote,time-driver-rtc1 \
 | 
				
			||||||
    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv8m.main-none-eabihf --features nightly,nrf5340-app-s,gpiote,time-driver-rtc1,unstable-traits \
 | 
					    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv8m.main-none-eabihf --features nrf5340-app-ns,gpiote,time-driver-rtc1 \
 | 
				
			||||||
    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv8m.main-none-eabihf --features nightly,nrf5340-app-ns,gpiote,time-driver-rtc1 \
 | 
					    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv8m.main-none-eabihf --features nrf5340-net,gpiote,time-driver-rtc1 \
 | 
				
			||||||
    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv8m.main-none-eabihf --features nightly,nrf5340-net,gpiote,time-driver-rtc1,unstable-traits \
 | 
					    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52840,gpiote,time-driver-rtc1 \
 | 
				
			||||||
    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nightly,nrf52840,gpiote,time-driver-rtc1 \
 | 
					    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52840,log,gpiote,time-driver-rtc1 \
 | 
				
			||||||
    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nightly,nrf52840,log,gpiote,time-driver-rtc1 \
 | 
					    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52840,defmt,gpiote,time-driver-rtc1 \
 | 
				
			||||||
    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nightly,nrf52840,defmt,gpiote,time-driver-rtc1,unstable-traits \
 | 
					    --- build --release --manifest-path embassy-rp/Cargo.toml --target thumbv6m-none-eabi --features defmt \
 | 
				
			||||||
    --- build --release --manifest-path embassy-rp/Cargo.toml --target thumbv6m-none-eabi --features nightly,unstable-traits,defmt \
 | 
					    --- build --release --manifest-path embassy-rp/Cargo.toml --target thumbv6m-none-eabi --features log \
 | 
				
			||||||
    --- build --release --manifest-path embassy-rp/Cargo.toml --target thumbv6m-none-eabi --features nightly,unstable-traits,log \
 | 
					    --- build --release --manifest-path embassy-rp/Cargo.toml --target thumbv6m-none-eabi --features intrinsics \
 | 
				
			||||||
    --- build --release --manifest-path embassy-rp/Cargo.toml --target thumbv6m-none-eabi --features nightly,unstable-traits \
 | 
					    --- build --release --manifest-path embassy-rp/Cargo.toml --target thumbv6m-none-eabi --features qspi-as-gpio \
 | 
				
			||||||
    --- build --release --manifest-path embassy-rp/Cargo.toml --target thumbv6m-none-eabi --features nightly \
 | 
					 | 
				
			||||||
    --- build --release --manifest-path embassy-rp/Cargo.toml --target thumbv6m-none-eabi --features nightly,intrinsics \
 | 
					 | 
				
			||||||
    --- build --release --manifest-path embassy-rp/Cargo.toml --target thumbv6m-none-eabi --features nightly,qspi-as-gpio \
 | 
					 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv8m.main-none-eabihf --features stm32l552ze,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv8m.main-none-eabihf --features stm32l552ze,defmt,exti,time-driver-any,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv8m.main-none-eabihf --features stm32l552ze,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv8m.main-none-eabihf --features stm32l552ze,defmt,time-driver-any,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv8m.main-none-eabihf --features stm32l552ze,defmt,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv8m.main-none-eabihf --features stm32l552ze,defmt,time-driver-any,unstable-traits,time \
 | 
					 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv8m.main-none-eabihf --features stm32l552ze,defmt,exti,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv8m.main-none-eabihf --features stm32l552ze,defmt,exti,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv8m.main-none-eabihf --features stm32l552ze,defmt,exti,unstable-traits,time \
 | 
					 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv8m.main-none-eabihf --features stm32l552ze,defmt,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv8m.main-none-eabihf --features stm32l552ze,defmt,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv8m.main-none-eabihf --features stm32l552ze,nightly,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv8m.main-none-eabihf --features stm32l552ze,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv8m.main-none-eabihf --features stm32l552ze,nightly,defmt,exti,time-driver-any,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv8m.main-none-eabihf --features stm32l552ze,defmt,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv8m.main-none-eabihf --features stm32l552ze,nightly,defmt,time-driver-any,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv8m.main-none-eabihf --features stm32l552ze,defmt,exti,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv8m.main-none-eabihf --features stm32l552ze,nightly,defmt,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv8m.main-none-eabihf --features stm32l552ze,defmt,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv8m.main-none-eabihf --features stm32l552ze,nightly,defmt,exti,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv8m.main-none-eabihf --features stm32l552ze,defmt,exti \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv8m.main-none-eabihf --features stm32l552ze,nightly,defmt,exti,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv8m.main-none-eabihf --features stm32l552ze,defmt \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv8m.main-none-eabihf --features stm32l552ze,nightly,defmt,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32f401ve,defmt,exti,time-driver-any \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv8m.main-none-eabihf --features stm32l552ze,nightly,defmt,exti \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32f405zg,defmt,exti,time-driver-any \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv8m.main-none-eabihf --features stm32l552ze,nightly,defmt,exti,unstable-traits \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32f407zg,defmt,exti,time-driver-any \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv8m.main-none-eabihf --features stm32l552ze,nightly,defmt \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32f401ve,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features nightly,stm32f401ve,defmt,exti,time-driver-any,unstable-traits \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32f405zg,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features nightly,stm32f405zg,defmt,exti,time-driver-any,unstable-traits \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32f407zg,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features nightly,stm32f407zg,defmt,exti,time-driver-any,unstable-traits \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32f410tb,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features nightly,stm32f401ve,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32f411ce,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features nightly,stm32f405zg,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32f412zg,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features nightly,stm32f407zg,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32f413vh,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features nightly,stm32f410tb,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32f415zg,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features nightly,stm32f411ce,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32f417zg,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features nightly,stm32f412zg,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32f423zh,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features nightly,stm32f413vh,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32f427zi,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features nightly,stm32f415zg,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32f429zi,log,exti,time-driver-any,embedded-sdmmc,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features nightly,stm32f417zg,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32f437zi,log,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features nightly,stm32f423zh,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32f439zi,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features nightly,stm32f427zi,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32f446ze,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features nightly,stm32f429zi,log,exti,time-driver-any,unstable-traits,embedded-sdmmc,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32f469zi,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features nightly,stm32f437zi,log,exti,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32f479zi,defmt,exti,time-driver-any,embedded-sdmmc,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features nightly,stm32f439zi,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32f730i8,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features nightly,stm32f446ze,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32h753zi,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features nightly,stm32f469zi,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32h735zg,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features nightly,stm32f479zi,defmt,exti,time-driver-any,unstable-traits,embedded-sdmmc,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32h755zi-cm7,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features nightly,stm32f730i8,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32h725re,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features nightly,stm32h753zi,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32h7b3ai,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features nightly,stm32h735zg,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32l476vg,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features nightly,stm32h755zi-cm7,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32l422cb,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features nightly,stm32h725re,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32wb15cc,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features nightly,stm32h7b3ai,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv6m-none-eabi --features stm32l072cz,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features nightly,stm32l476vg,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv6m-none-eabi --features stm32l041f6,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features nightly,stm32l422cb,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv6m-none-eabi --features stm32l073cz,defmt,exti,time-driver-any,low-power,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features nightly,stm32wb15cc,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7m-none-eabi --features stm32l151cb-a,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv6m-none-eabi --features nightly,stm32l072cz,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7m-none-eabi --features stm32f398ve,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv6m-none-eabi --features nightly,stm32l041f6,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7m-none-eabi --features stm32f378cc,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv6m-none-eabi --features nightly,stm32l073cz,defmt,exti,time-driver-any,unstable-traits,low-power,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv6m-none-eabi --features stm32g0c1ve,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7m-none-eabi --features nightly,stm32l151cb-a,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7m-none-eabi --features stm32f217zg,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7m-none-eabi --features nightly,stm32f398ve,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv8m.main-none-eabihf --features stm32l552ze,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7m-none-eabi --features nightly,stm32f378cc,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv6m-none-eabi --features stm32wl54jc-cm0p,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv6m-none-eabi --features nightly,stm32g0c1ve,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32wle5jb,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7m-none-eabi --features nightly,stm32f217zg,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32g474pe,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv8m.main-none-eabihf --features nightly,stm32l552ze,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7m-none-eabi --features stm32f107vc,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv6m-none-eabi --features nightly,stm32wl54jc-cm0p,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7m-none-eabi --features stm32f103re,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features nightly,stm32wle5jb,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7m-none-eabi --features stm32f100c4,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features nightly,stm32g474pe,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7m-none-eabi --features stm32h503rb,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7m-none-eabi --features nightly,stm32f107vc,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7m-none-eabi --features stm32h562ag,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7m-none-eabi --features nightly,stm32f103re,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7m-none-eabi --features nightly,stm32f100c4,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7m-none-eabi --features nightly,stm32h503rb,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7m-none-eabi --features nightly,stm32h562ag,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					 | 
				
			||||||
    --- build --release --manifest-path cyw43/Cargo.toml --target thumbv6m-none-eabi --features ''\
 | 
					    --- build --release --manifest-path cyw43/Cargo.toml --target thumbv6m-none-eabi --features ''\
 | 
				
			||||||
    --- build --release --manifest-path cyw43/Cargo.toml --target thumbv6m-none-eabi --features 'log' \
 | 
					    --- build --release --manifest-path cyw43/Cargo.toml --target thumbv6m-none-eabi --features 'log' \
 | 
				
			||||||
    --- build --release --manifest-path cyw43/Cargo.toml --target thumbv6m-none-eabi --features 'defmt' \
 | 
					    --- build --release --manifest-path cyw43/Cargo.toml --target thumbv6m-none-eabi --features 'defmt' \
 | 
				
			||||||
@@ -140,10 +130,10 @@ cargo batch  \
 | 
				
			|||||||
    --- build --release --manifest-path cyw43/Cargo.toml --target thumbv6m-none-eabi --features 'defmt,firmware-logs' \
 | 
					    --- build --release --manifest-path cyw43/Cargo.toml --target thumbv6m-none-eabi --features 'defmt,firmware-logs' \
 | 
				
			||||||
    --- build --release --manifest-path cyw43-pio/Cargo.toml --target thumbv6m-none-eabi --features '' \
 | 
					    --- build --release --manifest-path cyw43-pio/Cargo.toml --target thumbv6m-none-eabi --features '' \
 | 
				
			||||||
    --- build --release --manifest-path cyw43-pio/Cargo.toml --target thumbv6m-none-eabi --features 'overclock' \
 | 
					    --- build --release --manifest-path cyw43-pio/Cargo.toml --target thumbv6m-none-eabi --features 'overclock' \
 | 
				
			||||||
    --- build --release --manifest-path embassy-boot/nrf/Cargo.toml --target thumbv7em-none-eabi --features embassy-nrf/nrf52840,nightly \
 | 
					    --- build --release --manifest-path embassy-boot/nrf/Cargo.toml --target thumbv7em-none-eabi --features embassy-nrf/nrf52840 \
 | 
				
			||||||
    --- build --release --manifest-path embassy-boot/nrf/Cargo.toml --target thumbv8m.main-none-eabihf --features embassy-nrf/nrf9160-ns,nightly \
 | 
					    --- build --release --manifest-path embassy-boot/nrf/Cargo.toml --target thumbv8m.main-none-eabihf --features embassy-nrf/nrf9160-ns \
 | 
				
			||||||
    --- build --release --manifest-path embassy-boot/rp/Cargo.toml --target thumbv6m-none-eabi --features nightly \
 | 
					    --- build --release --manifest-path embassy-boot/rp/Cargo.toml --target thumbv6m-none-eabi \
 | 
				
			||||||
    --- build --release --manifest-path embassy-boot/stm32/Cargo.toml --target thumbv7em-none-eabi --features embassy-stm32/stm32wl55jc-cm4,nightly \
 | 
					    --- build --release --manifest-path embassy-boot/stm32/Cargo.toml --target thumbv7em-none-eabi --features embassy-stm32/stm32wl55jc-cm4 \
 | 
				
			||||||
    --- build --release --manifest-path docs/modules/ROOT/examples/basic/Cargo.toml --target thumbv7em-none-eabi \
 | 
					    --- build --release --manifest-path docs/modules/ROOT/examples/basic/Cargo.toml --target thumbv7em-none-eabi \
 | 
				
			||||||
    --- build --release --manifest-path docs/modules/ROOT/examples/layer-by-layer/blinky-pac/Cargo.toml --target thumbv7em-none-eabi \
 | 
					    --- build --release --manifest-path docs/modules/ROOT/examples/layer-by-layer/blinky-pac/Cargo.toml --target thumbv7em-none-eabi \
 | 
				
			||||||
    --- build --release --manifest-path docs/modules/ROOT/examples/layer-by-layer/blinky-hal/Cargo.toml --target thumbv7em-none-eabi \
 | 
					    --- build --release --manifest-path docs/modules/ROOT/examples/layer-by-layer/blinky-hal/Cargo.toml --target thumbv7em-none-eabi \
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										64
									
								
								ci_stable.sh
									
									
									
									
									
								
							
							
						
						
									
										64
									
								
								ci_stable.sh
									
									
									
									
									
								
							@@ -22,56 +22,56 @@ cargo batch  \
 | 
				
			|||||||
    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52811,gpiote,time-driver-rtc1 \
 | 
					    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52811,gpiote,time-driver-rtc1 \
 | 
				
			||||||
    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52820,gpiote,time-driver-rtc1 \
 | 
					    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52820,gpiote,time-driver-rtc1 \
 | 
				
			||||||
    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52832,gpiote,time-driver-rtc1 \
 | 
					    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52832,gpiote,time-driver-rtc1 \
 | 
				
			||||||
    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52833,gpiote,time-driver-rtc1,unstable-traits \
 | 
					    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52833,gpiote,time-driver-rtc1 \
 | 
				
			||||||
    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv8m.main-none-eabihf --features nrf9160-s,gpiote,time-driver-rtc1 \
 | 
					    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv8m.main-none-eabihf --features nrf9160-s,gpiote,time-driver-rtc1 \
 | 
				
			||||||
    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv8m.main-none-eabihf --features nrf9160-ns,gpiote,time-driver-rtc1,unstable-traits \
 | 
					    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv8m.main-none-eabihf --features nrf9160-ns,gpiote,time-driver-rtc1 \
 | 
				
			||||||
    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv8m.main-none-eabihf --features nrf5340-app-s,gpiote,time-driver-rtc1,unstable-traits \
 | 
					    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv8m.main-none-eabihf --features nrf5340-app-s,gpiote,time-driver-rtc1 \
 | 
				
			||||||
    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv8m.main-none-eabihf --features nrf5340-app-ns,gpiote,time-driver-rtc1 \
 | 
					    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv8m.main-none-eabihf --features nrf5340-app-ns,gpiote,time-driver-rtc1 \
 | 
				
			||||||
    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv8m.main-none-eabihf --features nrf5340-net,gpiote,time-driver-rtc1,unstable-traits \
 | 
					    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv8m.main-none-eabihf --features nrf5340-net,gpiote,time-driver-rtc1 \
 | 
				
			||||||
    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52840,gpiote,time-driver-rtc1 \
 | 
					    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52840,gpiote,time-driver-rtc1 \
 | 
				
			||||||
    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52840,log,gpiote,time-driver-rtc1 \
 | 
					    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52840,log,gpiote,time-driver-rtc1 \
 | 
				
			||||||
    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52840,defmt,gpiote,time-driver-rtc1,unstable-traits \
 | 
					    --- build --release --manifest-path embassy-nrf/Cargo.toml --target thumbv7em-none-eabi --features nrf52840,defmt,gpiote,time-driver-rtc1 \
 | 
				
			||||||
    --- build --release --manifest-path embassy-rp/Cargo.toml --target thumbv6m-none-eabi --features unstable-traits,defmt \
 | 
					    --- build --release --manifest-path embassy-rp/Cargo.toml --target thumbv6m-none-eabi --features defmt \
 | 
				
			||||||
    --- build --release --manifest-path embassy-rp/Cargo.toml --target thumbv6m-none-eabi --features unstable-traits,log \
 | 
					    --- build --release --manifest-path embassy-rp/Cargo.toml --target thumbv6m-none-eabi --features log \
 | 
				
			||||||
    --- build --release --manifest-path embassy-rp/Cargo.toml --target thumbv6m-none-eabi \
 | 
					    --- build --release --manifest-path embassy-rp/Cargo.toml --target thumbv6m-none-eabi \
 | 
				
			||||||
    --- build --release --manifest-path embassy-rp/Cargo.toml --target thumbv6m-none-eabi --features qspi-as-gpio \
 | 
					    --- build --release --manifest-path embassy-rp/Cargo.toml --target thumbv6m-none-eabi --features qspi-as-gpio \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32g473cc,defmt,exti,time-driver-any,unstable-traits \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32g473cc,defmt,exti,time-driver-any \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32g491re,defmt,exti,time-driver-any,unstable-traits \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32g491re,defmt,exti,time-driver-any \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32u585zi,defmt,exti,time-driver-any,unstable-traits \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32u585zi,defmt,exti,time-driver-any \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32wb55vy,defmt,exti,time-driver-any,unstable-traits \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32wb55vy,defmt,exti,time-driver-any \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32wl55cc-cm4,defmt,exti,time-driver-any,unstable-traits \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32wl55cc-cm4,defmt,exti,time-driver-any \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32g473cc,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32g473cc,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32g491re,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32g491re,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32u585zi,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32u585zi,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32wb55vy,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32wb55vy,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32wl55cc-cm4,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32wl55cc-cm4,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32l4r9zi,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32l4r9zi,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32f303vc,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32f303vc,defmt,exti,time-driver-any,time \
 | 
				
			||||||
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32f411ce,defmt,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32f411ce,defmt,time-driver-any,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32f411ce,defmt,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32f411ce,defmt,time-driver-any,unstable-traits,time \
 | 
					 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32f429zi,log,time-driver-any,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32f429zi,log,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32f429zi,log,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32f429zi,log,time-driver-any,time \
 | 
				
			||||||
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32h755zi-cm7,defmt,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32h755zi-cm7,defmt,time-driver-any,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32h755zi-cm7,defmt,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32h755zi-cm7,defmt,time-driver-any,unstable-traits,time \
 | 
					 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32l476vg,defmt,time-driver-any,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32l476vg,defmt,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32l476vg,defmt,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32l476vg,defmt,time-driver-any,time \
 | 
				
			||||||
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv6m-none-eabi --features stm32l072cz,defmt,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv6m-none-eabi --features stm32l072cz,defmt,time-driver-any,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv6m-none-eabi --features stm32l072cz,defmt,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv6m-none-eabi --features stm32l072cz,defmt,time-driver-any,unstable-traits,time \
 | 
					 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7m-none-eabi --features stm32l151cb-a,defmt,time-driver-any,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7m-none-eabi --features stm32l151cb-a,defmt,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7m-none-eabi --features stm32l151cb-a,defmt,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7m-none-eabi --features stm32l151cb-a,defmt,time-driver-any,time \
 | 
				
			||||||
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32f410tb,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32f410tb,defmt,exti,time-driver-any,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32f410tb,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32f410tb,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32f429zi,log,exti,time-driver-any,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32f429zi,log,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32f429zi,log,exti,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32f429zi,log,exti,time-driver-any,time \
 | 
				
			||||||
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32h755zi-cm7,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32h755zi-cm7,defmt,exti,time-driver-any,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32h755zi-cm7,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32h755zi-cm7,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32l476vg,defmt,exti,time-driver-any,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32l476vg,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32l476vg,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7em-none-eabi --features stm32l476vg,defmt,exti,time-driver-any,time \
 | 
				
			||||||
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv6m-none-eabi --features stm32l072cz,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv6m-none-eabi --features stm32l072cz,defmt,exti,time-driver-any,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv6m-none-eabi --features stm32l072cz,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv6m-none-eabi --features stm32l072cz,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7m-none-eabi --features stm32l151cb-a,defmt,exti,time-driver-any,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7m-none-eabi --features stm32l151cb-a,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7m-none-eabi --features stm32l151cb-a,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7m-none-eabi --features stm32l151cb-a,defmt,exti,time-driver-any,time \
 | 
				
			||||||
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7m-none-eabi --features stm32f217zg,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7m-none-eabi --features stm32f217zg,defmt,exti,time-driver-any,time \
 | 
					    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7m-none-eabi --features stm32f217zg,defmt,exti,time-driver-any,time \
 | 
				
			||||||
    --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7m-none-eabi --features stm32f217zg,defmt,exti,time-driver-any,unstable-traits,time \
 | 
					 | 
				
			||||||
    --- build --release --manifest-path examples/nrf52840/Cargo.toml --target thumbv7em-none-eabi --no-default-features --out-dir out/examples/nrf52840 --bin raw_spawn \
 | 
					    --- build --release --manifest-path examples/nrf52840/Cargo.toml --target thumbv7em-none-eabi --no-default-features --out-dir out/examples/nrf52840 --bin raw_spawn \
 | 
				
			||||||
    --- build --release --manifest-path examples/stm32l0/Cargo.toml --target thumbv6m-none-eabi --no-default-features --out-dir out/examples/stm32l0 --bin raw_spawn \
 | 
					    --- build --release --manifest-path examples/stm32l0/Cargo.toml --target thumbv6m-none-eabi --no-default-features --out-dir out/examples/stm32l0 --bin raw_spawn \
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,5 @@
 | 
				
			|||||||
#![no_std]
 | 
					#![no_std]
 | 
				
			||||||
#![feature(async_fn_in_trait)]
 | 
					#![allow(async_fn_in_trait)]
 | 
				
			||||||
#![allow(stable_features, unknown_lints, async_fn_in_trait)]
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
use core::slice;
 | 
					use core::slice;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,6 @@
 | 
				
			|||||||
#![no_std]
 | 
					#![no_std]
 | 
				
			||||||
#![no_main]
 | 
					#![no_main]
 | 
				
			||||||
#![feature(async_fn_in_trait, type_alias_impl_trait)]
 | 
					#![allow(async_fn_in_trait)]
 | 
				
			||||||
#![allow(stable_features, unknown_lints, async_fn_in_trait)]
 | 
					 | 
				
			||||||
#![deny(unused_must_use)]
 | 
					#![deny(unused_must_use)]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// This mod MUST go first, so that the others see its macros.
 | 
					// This mod MUST go first, so that the others see its macros.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,9 +6,9 @@ version = "0.1.0"
 | 
				
			|||||||
license = "MIT OR Apache-2.0"
 | 
					license = "MIT OR Apache-2.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[dependencies]
 | 
					[dependencies]
 | 
				
			||||||
embassy-executor = { version = "0.3.0", path = "../../../../../embassy-executor", features = ["defmt", "nightly", "integrated-timers", "arch-cortex-m", "executor-thread"] }
 | 
					embassy-executor = { version = "0.3.0", path = "../../../../../embassy-executor", features = ["defmt", "integrated-timers", "arch-cortex-m", "executor-thread"] }
 | 
				
			||||||
embassy-time = { version = "0.1.4", path = "../../../../../embassy-time", features = ["defmt", "nightly"] }
 | 
					embassy-time = { version = "0.1.4", path = "../../../../../embassy-time", features = ["defmt"] }
 | 
				
			||||||
embassy-nrf = { version = "0.1.0", path = "../../../../../embassy-nrf", features = ["defmt", "nrf52840", "time-driver-rtc1", "gpiote", "nightly"] }
 | 
					embassy-nrf = { version = "0.1.0", path = "../../../../../embassy-nrf", features = ["defmt", "nrf52840", "time-driver-rtc1", "gpiote"] }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
defmt = "0.3"
 | 
					defmt = "0.3"
 | 
				
			||||||
defmt-rtt = "0.3"
 | 
					defmt-rtt = "0.3"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,7 +30,7 @@ ed25519-dalek = { version = "1.0.1", default_features = false, features = ["u32_
 | 
				
			|||||||
embassy-embedded-hal = { version = "0.1.0", path = "../../embassy-embedded-hal" }
 | 
					embassy-embedded-hal = { version = "0.1.0", path = "../../embassy-embedded-hal" }
 | 
				
			||||||
embassy-sync = { version = "0.4.0", path = "../../embassy-sync" }
 | 
					embassy-sync = { version = "0.4.0", path = "../../embassy-sync" }
 | 
				
			||||||
embedded-storage = "0.3.0"
 | 
					embedded-storage = "0.3.0"
 | 
				
			||||||
embedded-storage-async = { version = "0.4.0", optional = true }
 | 
					embedded-storage-async = { version = "0.4.0" }
 | 
				
			||||||
salty = { git = "https://github.com/ycrypto/salty.git", rev = "a9f17911a5024698406b75c0fac56ab5ccf6a8c7", optional = true }
 | 
					salty = { git = "https://github.com/ycrypto/salty.git", rev = "a9f17911a5024698406b75c0fac56ab5ccf6a8c7", optional = true }
 | 
				
			||||||
signature = { version = "1.6.4", default-features = false }
 | 
					signature = { version = "1.6.4", default-features = false }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -50,7 +50,5 @@ features = ["rand", "std", "u32_backend"]
 | 
				
			|||||||
ed25519-dalek = ["dep:ed25519-dalek", "_verify"]
 | 
					ed25519-dalek = ["dep:ed25519-dalek", "_verify"]
 | 
				
			||||||
ed25519-salty = ["dep:salty", "_verify"]
 | 
					ed25519-salty = ["dep:salty", "_verify"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
nightly = ["dep:embedded-storage-async", "embassy-embedded-hal/nightly"]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#Internal features
 | 
					#Internal features
 | 
				
			||||||
_verify = []
 | 
					_verify = []
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +1,6 @@
 | 
				
			|||||||
#[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
mod asynch;
 | 
					mod asynch;
 | 
				
			||||||
mod blocking;
 | 
					mod blocking;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
pub use asynch::{FirmwareState, FirmwareUpdater};
 | 
					pub use asynch::{FirmwareState, FirmwareUpdater};
 | 
				
			||||||
pub use blocking::{BlockingFirmwareState, BlockingFirmwareUpdater};
 | 
					pub use blocking::{BlockingFirmwareState, BlockingFirmwareUpdater};
 | 
				
			||||||
use embedded_storage::nor_flash::{NorFlashError, NorFlashErrorKind};
 | 
					use embedded_storage::nor_flash::{NorFlashError, NorFlashErrorKind};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,5 @@
 | 
				
			|||||||
#![cfg_attr(feature = "nightly", feature(async_fn_in_trait))]
 | 
					 | 
				
			||||||
#![cfg_attr(feature = "nightly", allow(stable_features, unknown_lints, async_fn_in_trait))]
 | 
					 | 
				
			||||||
#![no_std]
 | 
					#![no_std]
 | 
				
			||||||
 | 
					#![allow(async_fn_in_trait)]
 | 
				
			||||||
#![warn(missing_docs)]
 | 
					#![warn(missing_docs)]
 | 
				
			||||||
#![doc = include_str!("../README.md")]
 | 
					#![doc = include_str!("../README.md")]
 | 
				
			||||||
mod fmt;
 | 
					mod fmt;
 | 
				
			||||||
@@ -18,10 +17,9 @@ mod test_flash;
 | 
				
			|||||||
pub(crate) const STATE_ERASE_VALUE: u8 = 0xFF;
 | 
					pub(crate) const STATE_ERASE_VALUE: u8 = 0xFF;
 | 
				
			||||||
pub use boot_loader::{BootError, BootLoader, BootLoaderConfig};
 | 
					pub use boot_loader::{BootError, BootLoader, BootLoaderConfig};
 | 
				
			||||||
pub use firmware_updater::{
 | 
					pub use firmware_updater::{
 | 
				
			||||||
    BlockingFirmwareState, BlockingFirmwareUpdater, FirmwareUpdaterConfig, FirmwareUpdaterError,
 | 
					    BlockingFirmwareState, BlockingFirmwareUpdater, FirmwareState, FirmwareUpdater, FirmwareUpdaterConfig,
 | 
				
			||||||
 | 
					    FirmwareUpdaterError,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
#[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
pub use firmware_updater::{FirmwareState, FirmwareUpdater};
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub(crate) const BOOT_MAGIC: u8 = 0xD0;
 | 
					pub(crate) const BOOT_MAGIC: u8 = 0xD0;
 | 
				
			||||||
pub(crate) const SWAP_MAGIC: u8 = 0xF0;
 | 
					pub(crate) const SWAP_MAGIC: u8 = 0xF0;
 | 
				
			||||||
@@ -57,7 +55,6 @@ mod tests {
 | 
				
			|||||||
    #![allow(unused_imports)]
 | 
					    #![allow(unused_imports)]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    use embedded_storage::nor_flash::{NorFlash, ReadNorFlash};
 | 
					    use embedded_storage::nor_flash::{NorFlash, ReadNorFlash};
 | 
				
			||||||
    #[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
    use embedded_storage_async::nor_flash::NorFlash as AsyncNorFlash;
 | 
					    use embedded_storage_async::nor_flash::NorFlash as AsyncNorFlash;
 | 
				
			||||||
    use futures::executor::block_on;
 | 
					    use futures::executor::block_on;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -65,9 +62,7 @@ mod tests {
 | 
				
			|||||||
    use crate::boot_loader::BootLoaderConfig;
 | 
					    use crate::boot_loader::BootLoaderConfig;
 | 
				
			||||||
    use crate::firmware_updater::FirmwareUpdaterConfig;
 | 
					    use crate::firmware_updater::FirmwareUpdaterConfig;
 | 
				
			||||||
    use crate::mem_flash::MemFlash;
 | 
					    use crate::mem_flash::MemFlash;
 | 
				
			||||||
    #[cfg(feature = "nightly")]
 | 
					    use crate::test_flash::{AsyncTestFlash, BlockingTestFlash};
 | 
				
			||||||
    use crate::test_flash::AsyncTestFlash;
 | 
					 | 
				
			||||||
    use crate::test_flash::BlockingTestFlash;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /*
 | 
					    /*
 | 
				
			||||||
    #[test]
 | 
					    #[test]
 | 
				
			||||||
@@ -105,7 +100,7 @@ mod tests {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #[test]
 | 
					    #[test]
 | 
				
			||||||
    #[cfg(all(feature = "nightly", not(feature = "_verify")))]
 | 
					    #[cfg(not(feature = "_verify"))]
 | 
				
			||||||
    fn test_swap_state() {
 | 
					    fn test_swap_state() {
 | 
				
			||||||
        const FIRMWARE_SIZE: usize = 57344;
 | 
					        const FIRMWARE_SIZE: usize = 57344;
 | 
				
			||||||
        let flash = AsyncTestFlash::new(BootLoaderConfig {
 | 
					        let flash = AsyncTestFlash::new(BootLoaderConfig {
 | 
				
			||||||
@@ -183,7 +178,7 @@ mod tests {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #[test]
 | 
					    #[test]
 | 
				
			||||||
    #[cfg(all(feature = "nightly", not(feature = "_verify")))]
 | 
					    #[cfg(not(feature = "_verify"))]
 | 
				
			||||||
    fn test_swap_state_active_page_biggest() {
 | 
					    fn test_swap_state_active_page_biggest() {
 | 
				
			||||||
        const FIRMWARE_SIZE: usize = 12288;
 | 
					        const FIRMWARE_SIZE: usize = 12288;
 | 
				
			||||||
        let flash = AsyncTestFlash::new(BootLoaderConfig {
 | 
					        let flash = AsyncTestFlash::new(BootLoaderConfig {
 | 
				
			||||||
@@ -228,7 +223,7 @@ mod tests {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #[test]
 | 
					    #[test]
 | 
				
			||||||
    #[cfg(all(feature = "nightly", not(feature = "_verify")))]
 | 
					    #[cfg(not(feature = "_verify"))]
 | 
				
			||||||
    fn test_swap_state_dfu_page_biggest() {
 | 
					    fn test_swap_state_dfu_page_biggest() {
 | 
				
			||||||
        const FIRMWARE_SIZE: usize = 12288;
 | 
					        const FIRMWARE_SIZE: usize = 12288;
 | 
				
			||||||
        let flash = AsyncTestFlash::new(BootLoaderConfig {
 | 
					        let flash = AsyncTestFlash::new(BootLoaderConfig {
 | 
				
			||||||
@@ -272,7 +267,7 @@ mod tests {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #[test]
 | 
					    #[test]
 | 
				
			||||||
    #[cfg(all(feature = "nightly", feature = "_verify"))]
 | 
					    #[cfg(feature = "_verify")]
 | 
				
			||||||
    fn test_verify() {
 | 
					    fn test_verify() {
 | 
				
			||||||
        // The following key setup is based on:
 | 
					        // The following key setup is based on:
 | 
				
			||||||
        // https://docs.rs/ed25519-dalek/latest/ed25519_dalek/#example
 | 
					        // https://docs.rs/ed25519-dalek/latest/ed25519_dalek/#example
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,7 +3,6 @@
 | 
				
			|||||||
use core::ops::{Bound, Range, RangeBounds};
 | 
					use core::ops::{Bound, Range, RangeBounds};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use embedded_storage::nor_flash::{ErrorType, NorFlash, NorFlashError, NorFlashErrorKind, ReadNorFlash};
 | 
					use embedded_storage::nor_flash::{ErrorType, NorFlash, NorFlashError, NorFlashErrorKind, ReadNorFlash};
 | 
				
			||||||
#[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
use embedded_storage_async::nor_flash::{NorFlash as AsyncNorFlash, ReadNorFlash as AsyncReadNorFlash};
 | 
					use embedded_storage_async::nor_flash::{NorFlash as AsyncNorFlash, ReadNorFlash as AsyncReadNorFlash};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub struct MemFlash<const SIZE: usize, const ERASE_SIZE: usize, const WRITE_SIZE: usize> {
 | 
					pub struct MemFlash<const SIZE: usize, const ERASE_SIZE: usize, const WRITE_SIZE: usize> {
 | 
				
			||||||
@@ -141,7 +140,6 @@ impl<const SIZE: usize, const ERASE_SIZE: usize, const WRITE_SIZE: usize> NorFla
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
impl<const SIZE: usize, const ERASE_SIZE: usize, const WRITE_SIZE: usize> AsyncReadNorFlash
 | 
					impl<const SIZE: usize, const ERASE_SIZE: usize, const WRITE_SIZE: usize> AsyncReadNorFlash
 | 
				
			||||||
    for MemFlash<SIZE, ERASE_SIZE, WRITE_SIZE>
 | 
					    for MemFlash<SIZE, ERASE_SIZE, WRITE_SIZE>
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -156,7 +154,6 @@ impl<const SIZE: usize, const ERASE_SIZE: usize, const WRITE_SIZE: usize> AsyncR
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
impl<const SIZE: usize, const ERASE_SIZE: usize, const WRITE_SIZE: usize> AsyncNorFlash
 | 
					impl<const SIZE: usize, const ERASE_SIZE: usize, const WRITE_SIZE: usize> AsyncNorFlash
 | 
				
			||||||
    for MemFlash<SIZE, ERASE_SIZE, WRITE_SIZE>
 | 
					    for MemFlash<SIZE, ERASE_SIZE, WRITE_SIZE>
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -51,7 +51,6 @@ where
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
impl<ACTIVE, DFU, STATE> BlockingTestFlash<ACTIVE, DFU, STATE>
 | 
					impl<ACTIVE, DFU, STATE> BlockingTestFlash<ACTIVE, DFU, STATE>
 | 
				
			||||||
where
 | 
					where
 | 
				
			||||||
    ACTIVE: NorFlash + embedded_storage_async::nor_flash::NorFlash,
 | 
					    ACTIVE: NorFlash + embedded_storage_async::nor_flash::NorFlash,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,5 @@
 | 
				
			|||||||
#[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
mod asynch;
 | 
					mod asynch;
 | 
				
			||||||
mod blocking;
 | 
					mod blocking;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
pub(crate) use asynch::AsyncTestFlash;
 | 
					pub(crate) use asynch::AsyncTestFlash;
 | 
				
			||||||
pub(crate) use blocking::BlockingTestFlash;
 | 
					pub(crate) use blocking::BlockingTestFlash;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,7 +22,7 @@ embassy-boot = { path = "../boot", default-features = false }
 | 
				
			|||||||
cortex-m = { version = "0.7.6" }
 | 
					cortex-m = { version = "0.7.6" }
 | 
				
			||||||
cortex-m-rt = { version = "0.7" }
 | 
					cortex-m-rt = { version = "0.7" }
 | 
				
			||||||
embedded-storage = "0.3.0"
 | 
					embedded-storage = "0.3.0"
 | 
				
			||||||
embedded-storage-async = { version = "0.4.0", optional = true }
 | 
					embedded-storage-async = { version = "0.4.0" }
 | 
				
			||||||
cfg-if = "1.0.0"
 | 
					cfg-if = "1.0.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
nrf-softdevice-mbr = { version = "0.1.0", git = "https://github.com/embassy-rs/nrf-softdevice.git", branch = "master", optional = true }
 | 
					nrf-softdevice-mbr = { version = "0.1.0", git = "https://github.com/embassy-rs/nrf-softdevice.git", branch = "master", optional = true }
 | 
				
			||||||
@@ -36,8 +36,3 @@ defmt = [
 | 
				
			|||||||
softdevice = [
 | 
					softdevice = [
 | 
				
			||||||
    "nrf-softdevice-mbr",
 | 
					    "nrf-softdevice-mbr",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
nightly = [
 | 
					 | 
				
			||||||
    "dep:embedded-storage-async",
 | 
					 | 
				
			||||||
    "embassy-boot/nightly",
 | 
					 | 
				
			||||||
    "embassy-nrf/nightly"
 | 
					 | 
				
			||||||
]
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,10 +4,9 @@
 | 
				
			|||||||
mod fmt;
 | 
					mod fmt;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub use embassy_boot::{
 | 
					pub use embassy_boot::{
 | 
				
			||||||
    AlignedBuffer, BlockingFirmwareState, BlockingFirmwareUpdater, BootLoaderConfig, FirmwareUpdaterConfig,
 | 
					    AlignedBuffer, BlockingFirmwareState, BlockingFirmwareUpdater, BootLoaderConfig, FirmwareState, FirmwareUpdater,
 | 
				
			||||||
 | 
					    FirmwareUpdaterConfig,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
#[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
pub use embassy_boot::{FirmwareState, FirmwareUpdater};
 | 
					 | 
				
			||||||
use embassy_nrf::nvmc::PAGE_SIZE;
 | 
					use embassy_nrf::nvmc::PAGE_SIZE;
 | 
				
			||||||
use embassy_nrf::peripherals::WDT;
 | 
					use embassy_nrf::peripherals::WDT;
 | 
				
			||||||
use embassy_nrf::wdt;
 | 
					use embassy_nrf::wdt;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -25,7 +25,7 @@ embassy-time = { path = "../../embassy-time" }
 | 
				
			|||||||
cortex-m = { version = "0.7.6" }
 | 
					cortex-m = { version = "0.7.6" }
 | 
				
			||||||
cortex-m-rt = { version = "0.7" }
 | 
					cortex-m-rt = { version = "0.7" }
 | 
				
			||||||
embedded-storage = "0.3.0"
 | 
					embedded-storage = "0.3.0"
 | 
				
			||||||
embedded-storage-async = { version = "0.4.0", optional = true }
 | 
					embedded-storage-async = { version = "0.4.0" }
 | 
				
			||||||
cfg-if = "1.0.0"
 | 
					cfg-if = "1.0.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[features]
 | 
					[features]
 | 
				
			||||||
@@ -40,12 +40,6 @@ log = [
 | 
				
			|||||||
    "embassy-rp/log",
 | 
					    "embassy-rp/log",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
debug = ["defmt-rtt"]
 | 
					debug = ["defmt-rtt"]
 | 
				
			||||||
nightly = [
 | 
					 | 
				
			||||||
    "dep:embedded-storage-async",
 | 
					 | 
				
			||||||
    "embassy-boot/nightly",
 | 
					 | 
				
			||||||
    "embassy-rp/nightly",
 | 
					 | 
				
			||||||
    "embassy-time/nightly"
 | 
					 | 
				
			||||||
]
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
[profile.dev]
 | 
					[profile.dev]
 | 
				
			||||||
debug = 2
 | 
					debug = 2
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,10 +4,9 @@
 | 
				
			|||||||
mod fmt;
 | 
					mod fmt;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub use embassy_boot::{
 | 
					pub use embassy_boot::{
 | 
				
			||||||
    AlignedBuffer, BlockingFirmwareState, BlockingFirmwareUpdater, BootLoaderConfig, FirmwareUpdaterConfig, State,
 | 
					    AlignedBuffer, BlockingFirmwareState, BlockingFirmwareUpdater, BootLoaderConfig, FirmwareState, FirmwareUpdater,
 | 
				
			||||||
 | 
					    FirmwareUpdaterConfig, State,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
#[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
pub use embassy_boot::{FirmwareState, FirmwareUpdater};
 | 
					 | 
				
			||||||
use embassy_rp::flash::{Blocking, Flash, ERASE_SIZE};
 | 
					use embassy_rp::flash::{Blocking, Flash, ERASE_SIZE};
 | 
				
			||||||
use embassy_rp::peripherals::{FLASH, WATCHDOG};
 | 
					use embassy_rp::peripherals::{FLASH, WATCHDOG};
 | 
				
			||||||
use embassy_rp::watchdog::Watchdog;
 | 
					use embassy_rp::watchdog::Watchdog;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,26 +24,13 @@ embassy-boot = { path = "../boot", default-features = false }
 | 
				
			|||||||
cortex-m = { version = "0.7.6" }
 | 
					cortex-m = { version = "0.7.6" }
 | 
				
			||||||
cortex-m-rt = { version = "0.7" }
 | 
					cortex-m-rt = { version = "0.7" }
 | 
				
			||||||
embedded-storage = "0.3.0"
 | 
					embedded-storage = "0.3.0"
 | 
				
			||||||
embedded-storage-async = { version = "0.4.0", optional = true }
 | 
					embedded-storage-async = { version = "0.4.0" }
 | 
				
			||||||
cfg-if = "1.0.0"
 | 
					cfg-if = "1.0.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[features]
 | 
					[features]
 | 
				
			||||||
defmt = [
 | 
					defmt = ["dep:defmt", "embassy-boot/defmt", "embassy-stm32/defmt"]
 | 
				
			||||||
    "dep:defmt",
 | 
					log = ["dep:log", "embassy-boot/log", "embassy-stm32/log"]
 | 
				
			||||||
    "embassy-boot/defmt",
 | 
					 | 
				
			||||||
    "embassy-stm32/defmt",
 | 
					 | 
				
			||||||
]
 | 
					 | 
				
			||||||
log = [
 | 
					 | 
				
			||||||
    "dep:log",
 | 
					 | 
				
			||||||
    "embassy-boot/log",
 | 
					 | 
				
			||||||
    "embassy-stm32/log",
 | 
					 | 
				
			||||||
]
 | 
					 | 
				
			||||||
debug = ["defmt-rtt"]
 | 
					debug = ["defmt-rtt"]
 | 
				
			||||||
nightly = [
 | 
					 | 
				
			||||||
    "dep:embedded-storage-async",
 | 
					 | 
				
			||||||
    "embassy-boot/nightly",
 | 
					 | 
				
			||||||
    "embassy-stm32/nightly"
 | 
					 | 
				
			||||||
]
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
[profile.dev]
 | 
					[profile.dev]
 | 
				
			||||||
debug = 2
 | 
					debug = 2
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,10 +4,9 @@
 | 
				
			|||||||
mod fmt;
 | 
					mod fmt;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub use embassy_boot::{
 | 
					pub use embassy_boot::{
 | 
				
			||||||
    AlignedBuffer, BlockingFirmwareState, BlockingFirmwareUpdater, BootLoaderConfig, FirmwareUpdaterConfig, State,
 | 
					    AlignedBuffer, BlockingFirmwareState, BlockingFirmwareUpdater, BootLoaderConfig, FirmwareState, FirmwareUpdater,
 | 
				
			||||||
 | 
					    FirmwareUpdaterConfig, State,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
#[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
pub use embassy_boot::{FirmwareState, FirmwareUpdater};
 | 
					 | 
				
			||||||
use embedded_storage::nor_flash::NorFlash;
 | 
					use embedded_storage::nor_flash::NorFlash;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// A bootloader for STM32 devices.
 | 
					/// A bootloader for STM32 devices.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,27 +8,25 @@ license = "MIT OR Apache-2.0"
 | 
				
			|||||||
[package.metadata.embassy_docs]
 | 
					[package.metadata.embassy_docs]
 | 
				
			||||||
src_base = "https://github.com/embassy-rs/embassy/blob/embassy-embedded-hal-v$VERSION/embassy-embedded-hal/src/"
 | 
					src_base = "https://github.com/embassy-rs/embassy/blob/embassy-embedded-hal-v$VERSION/embassy-embedded-hal/src/"
 | 
				
			||||||
src_base_git = "https://github.com/embassy-rs/embassy/blob/$COMMIT/embassy-embedded-hal/src/"
 | 
					src_base_git = "https://github.com/embassy-rs/embassy/blob/$COMMIT/embassy-embedded-hal/src/"
 | 
				
			||||||
features = ["nightly", "std"]
 | 
					features = ["std"]
 | 
				
			||||||
target = "x86_64-unknown-linux-gnu"
 | 
					target = "x86_64-unknown-linux-gnu"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[features]
 | 
					[features]
 | 
				
			||||||
std = []
 | 
					std = []
 | 
				
			||||||
# Enable nightly-only features
 | 
					 | 
				
			||||||
nightly = ["embassy-futures", "embedded-hal-async", "embedded-storage-async"]
 | 
					 | 
				
			||||||
time = ["dep:embassy-time"]
 | 
					time = ["dep:embassy-time"]
 | 
				
			||||||
default = ["time"]
 | 
					default = ["time"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[dependencies]
 | 
					[dependencies]
 | 
				
			||||||
embassy-futures = { version = "0.1.0", path = "../embassy-futures", optional = true }
 | 
					embassy-futures = { version = "0.1.0", path = "../embassy-futures" }
 | 
				
			||||||
embassy-sync = { version = "0.4.0", path = "../embassy-sync" }
 | 
					embassy-sync = { version = "0.4.0", path = "../embassy-sync" }
 | 
				
			||||||
embassy-time = { version = "0.1.5", path = "../embassy-time", optional = true }
 | 
					embassy-time = { version = "0.1.5", path = "../embassy-time", optional = true }
 | 
				
			||||||
embedded-hal-02 = { package = "embedded-hal", version = "0.2.6", features = [
 | 
					embedded-hal-02 = { package = "embedded-hal", version = "0.2.6", features = [
 | 
				
			||||||
    "unproven",
 | 
					    "unproven",
 | 
				
			||||||
] }
 | 
					] }
 | 
				
			||||||
embedded-hal-1 = { package = "embedded-hal", version = "=1.0.0-rc.2" }
 | 
					embedded-hal-1 = { package = "embedded-hal", version = "=1.0.0-rc.2" }
 | 
				
			||||||
embedded-hal-async = { version = "=1.0.0-rc.2", optional = true }
 | 
					embedded-hal-async = { version = "=1.0.0-rc.2" }
 | 
				
			||||||
embedded-storage = "0.3.0"
 | 
					embedded-storage = "0.3.0"
 | 
				
			||||||
embedded-storage-async = { version = "0.4.0", optional = true }
 | 
					embedded-storage-async = { version = "0.4.0" }
 | 
				
			||||||
nb = "1.0.0"
 | 
					nb = "1.0.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
defmt = { version = "0.3", optional = true }
 | 
					defmt = { version = "0.3", optional = true }
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										18
									
								
								embassy-embedded-hal/build.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								embassy-embedded-hal/build.rs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
				
			|||||||
 | 
					use std::env;
 | 
				
			||||||
 | 
					use std::ffi::OsString;
 | 
				
			||||||
 | 
					use std::process::Command;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn main() {
 | 
				
			||||||
 | 
					    println!("cargo:rerun-if-changed=build.rs");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let rustc = env::var_os("RUSTC").unwrap_or_else(|| OsString::from("rustc"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let output = Command::new(rustc)
 | 
				
			||||||
 | 
					        .arg("--version")
 | 
				
			||||||
 | 
					        .output()
 | 
				
			||||||
 | 
					        .expect("failed to run `rustc --version`");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if String::from_utf8_lossy(&output.stdout).contains("nightly") {
 | 
				
			||||||
 | 
					        println!("cargo:rustc-cfg=nightly");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -1,5 +1,4 @@
 | 
				
			|||||||
use embedded_storage::nor_flash::{ErrorType, NorFlash, NorFlashError, ReadNorFlash};
 | 
					use embedded_storage::nor_flash::{ErrorType, NorFlash, NorFlashError, ReadNorFlash};
 | 
				
			||||||
#[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
use embedded_storage_async::nor_flash::{NorFlash as AsyncNorFlash, ReadNorFlash as AsyncReadNorFlash};
 | 
					use embedded_storage_async::nor_flash::{NorFlash as AsyncNorFlash, ReadNorFlash as AsyncReadNorFlash};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// Convenience helper for concatenating two consecutive flashes into one.
 | 
					/// Convenience helper for concatenating two consecutive flashes into one.
 | 
				
			||||||
@@ -117,7 +116,6 @@ where
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
impl<First, Second, E> AsyncReadNorFlash for ConcatFlash<First, Second>
 | 
					impl<First, Second, E> AsyncReadNorFlash for ConcatFlash<First, Second>
 | 
				
			||||||
where
 | 
					where
 | 
				
			||||||
    First: AsyncReadNorFlash<Error = E>,
 | 
					    First: AsyncReadNorFlash<Error = E>,
 | 
				
			||||||
@@ -146,7 +144,6 @@ where
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
impl<First, Second, E> AsyncNorFlash for ConcatFlash<First, Second>
 | 
					impl<First, Second, E> AsyncNorFlash for ConcatFlash<First, Second>
 | 
				
			||||||
where
 | 
					where
 | 
				
			||||||
    First: AsyncNorFlash<Error = E>,
 | 
					    First: AsyncNorFlash<Error = E>,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,6 @@
 | 
				
			|||||||
use alloc::vec::Vec;
 | 
					use alloc::vec::Vec;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use embedded_storage::nor_flash::{ErrorType, NorFlash, ReadNorFlash};
 | 
					use embedded_storage::nor_flash::{ErrorType, NorFlash, ReadNorFlash};
 | 
				
			||||||
#[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
use embedded_storage_async::nor_flash::{NorFlash as AsyncNorFlash, ReadNorFlash as AsyncReadNorFlash};
 | 
					use embedded_storage_async::nor_flash::{NorFlash as AsyncNorFlash, ReadNorFlash as AsyncReadNorFlash};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern crate alloc;
 | 
					extern crate alloc;
 | 
				
			||||||
@@ -93,7 +92,6 @@ impl<const SIZE: usize, const ERASE_SIZE: usize, const WRITE_SIZE: usize> NorFla
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
impl<const SIZE: usize, const ERASE_SIZE: usize, const WRITE_SIZE: usize> AsyncReadNorFlash
 | 
					impl<const SIZE: usize, const ERASE_SIZE: usize, const WRITE_SIZE: usize> AsyncReadNorFlash
 | 
				
			||||||
    for MemFlash<SIZE, ERASE_SIZE, WRITE_SIZE>
 | 
					    for MemFlash<SIZE, ERASE_SIZE, WRITE_SIZE>
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -109,7 +107,6 @@ impl<const SIZE: usize, const ERASE_SIZE: usize, const WRITE_SIZE: usize> AsyncR
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
impl<const SIZE: usize, const ERASE_SIZE: usize, const WRITE_SIZE: usize> AsyncNorFlash
 | 
					impl<const SIZE: usize, const ERASE_SIZE: usize, const WRITE_SIZE: usize> AsyncNorFlash
 | 
				
			||||||
    for MemFlash<SIZE, ERASE_SIZE, WRITE_SIZE>
 | 
					    for MemFlash<SIZE, ERASE_SIZE, WRITE_SIZE>
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,11 +2,9 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use embedded_storage::nor_flash::{NorFlashError, NorFlashErrorKind};
 | 
					use embedded_storage::nor_flash::{NorFlashError, NorFlashErrorKind};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
mod asynch;
 | 
					mod asynch;
 | 
				
			||||||
mod blocking;
 | 
					mod blocking;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
pub use asynch::Partition;
 | 
					pub use asynch::Partition;
 | 
				
			||||||
pub use blocking::BlockingPartition;
 | 
					pub use blocking::BlockingPartition;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,15 +1,13 @@
 | 
				
			|||||||
#![cfg_attr(not(feature = "std"), no_std)]
 | 
					#![cfg_attr(not(feature = "std"), no_std)]
 | 
				
			||||||
#![cfg_attr(feature = "nightly", feature(async_fn_in_trait, impl_trait_projections))]
 | 
					#![cfg_attr(nightly, feature(async_fn_in_trait, impl_trait_projections))]
 | 
				
			||||||
#![cfg_attr(feature = "nightly", allow(stable_features, unknown_lints, async_fn_in_trait))]
 | 
					#![cfg_attr(nightly, allow(stable_features, unknown_lints))]
 | 
				
			||||||
 | 
					#![allow(async_fn_in_trait)]
 | 
				
			||||||
#![warn(missing_docs)]
 | 
					#![warn(missing_docs)]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//! Utilities to use `embedded-hal` traits with Embassy.
 | 
					//! Utilities to use `embedded-hal` traits with Embassy.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
pub mod adapter;
 | 
					pub mod adapter;
 | 
				
			||||||
 | 
					 | 
				
			||||||
pub mod flash;
 | 
					pub mod flash;
 | 
				
			||||||
 | 
					 | 
				
			||||||
pub mod shared_bus;
 | 
					pub mod shared_bus;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// Set the configuration of a peripheral driver.
 | 
					/// Set the configuration of a peripheral driver.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,16 +2,15 @@
 | 
				
			|||||||
//!
 | 
					//!
 | 
				
			||||||
//! # Example (nrf52)
 | 
					//! # Example (nrf52)
 | 
				
			||||||
//!
 | 
					//!
 | 
				
			||||||
//! ```rust
 | 
					//! ```rust,ignore
 | 
				
			||||||
//! use embassy_embedded_hal::shared_bus::i2c::I2cDevice;
 | 
					//! use embassy_embedded_hal::shared_bus::asynch::i2c::I2cDevice;
 | 
				
			||||||
//! use embassy_sync::mutex::Mutex;
 | 
					//! use embassy_sync::mutex::Mutex;
 | 
				
			||||||
//! use embassy_sync::blocking_mutex::raw::ThreadModeRawMutex;
 | 
					//! use embassy_sync::blocking_mutex::raw::NoopRawMutex;
 | 
				
			||||||
//!
 | 
					//!
 | 
				
			||||||
//! static I2C_BUS: StaticCell<Mutex::<ThreadModeRawMutex, Twim<TWISPI0>>> = StaticCell::new();
 | 
					//! static I2C_BUS: StaticCell<Mutex<NoopRawMutex, Twim<TWISPI0>>> = StaticCell::new();
 | 
				
			||||||
//! let config = twim::Config::default();
 | 
					//! let config = twim::Config::default();
 | 
				
			||||||
//! let irq = interrupt::take!(SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0);
 | 
					//! let i2c = Twim::new(p.TWISPI0, Irqs, p.P0_03, p.P0_04, config);
 | 
				
			||||||
//! let i2c = Twim::new(p.TWISPI0, irq, p.P0_03, p.P0_04, config);
 | 
					//! let i2c_bus = Mutex::new(i2c);
 | 
				
			||||||
//! let i2c_bus = Mutex::<ThreadModeRawMutex, _>::new(i2c);
 | 
					 | 
				
			||||||
//! let i2c_bus = I2C_BUS.init(i2c_bus);
 | 
					//! let i2c_bus = I2C_BUS.init(i2c_bus);
 | 
				
			||||||
//!
 | 
					//!
 | 
				
			||||||
//! // Device 1, using embedded-hal-async compatible driver for QMC5883L compass
 | 
					//! // Device 1, using embedded-hal-async compatible driver for QMC5883L compass
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,17 +2,16 @@
 | 
				
			|||||||
//!
 | 
					//!
 | 
				
			||||||
//! # Example (nrf52)
 | 
					//! # Example (nrf52)
 | 
				
			||||||
//!
 | 
					//!
 | 
				
			||||||
//! ```rust
 | 
					//! ```rust,ignore
 | 
				
			||||||
//! use embassy_embedded_hal::shared_bus::spi::SpiDevice;
 | 
					//! use embassy_embedded_hal::shared_bus::spi::SpiDevice;
 | 
				
			||||||
//! use embassy_sync::mutex::Mutex;
 | 
					//! use embassy_sync::mutex::Mutex;
 | 
				
			||||||
//! use embassy_sync::blocking_mutex::raw::ThreadModeRawMutex;
 | 
					//! use embassy_sync::blocking_mutex::raw::NoopRawMutex;
 | 
				
			||||||
//!
 | 
					//!
 | 
				
			||||||
//! static SPI_BUS: StaticCell<Mutex<ThreadModeRawMutex, spim::Spim<SPI3>>> = StaticCell::new();
 | 
					//! static SPI_BUS: StaticCell<Mutex<NoopRawMutex, spim::Spim<SPI3>>> = StaticCell::new();
 | 
				
			||||||
//! let mut config = spim::Config::default();
 | 
					//! let mut config = spim::Config::default();
 | 
				
			||||||
//! config.frequency = spim::Frequency::M32;
 | 
					//! config.frequency = spim::Frequency::M32;
 | 
				
			||||||
//! let irq = interrupt::take!(SPIM3);
 | 
					//! let spi = spim::Spim::new_txonly(p.SPI3, Irqs, p.P0_15, p.P0_18, config);
 | 
				
			||||||
//! let spi = spim::Spim::new_txonly(p.SPI3, irq, p.P0_15, p.P0_18, config);
 | 
					//! let spi_bus = Mutex::new(spi);
 | 
				
			||||||
//! let spi_bus = Mutex::<ThreadModeRawMutex, _>::new(spi);
 | 
					 | 
				
			||||||
//! let spi_bus = SPI_BUS.init(spi_bus);
 | 
					//! let spi_bus = SPI_BUS.init(spi_bus);
 | 
				
			||||||
//!
 | 
					//!
 | 
				
			||||||
//! // Device 1, using embedded-hal-async compatible driver for ST7735 LCD display
 | 
					//! // Device 1, using embedded-hal-async compatible driver for ST7735 LCD display
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,9 +3,7 @@ use core::fmt::Debug;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use embedded_hal_1::{i2c, spi};
 | 
					use embedded_hal_1::{i2c, spi};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
pub mod asynch;
 | 
					pub mod asynch;
 | 
				
			||||||
 | 
					 | 
				
			||||||
pub mod blocking;
 | 
					pub mod blocking;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// Error returned by I2C device implementations in this crate.
 | 
					/// Error returned by I2C device implementations in this crate.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,5 @@
 | 
				
			|||||||
#![deny(clippy::pedantic)]
 | 
					#![deny(clippy::pedantic)]
 | 
				
			||||||
#![feature(async_fn_in_trait)]
 | 
					#![allow(async_fn_in_trait)]
 | 
				
			||||||
#![allow(stable_features, unknown_lints, async_fn_in_trait)]
 | 
					 | 
				
			||||||
#![cfg_attr(not(any(test, feature = "std")), no_std)]
 | 
					#![cfg_attr(not(any(test, feature = "std")), no_std)]
 | 
				
			||||||
#![allow(clippy::module_name_repetitions)]
 | 
					#![allow(clippy::module_name_repetitions)]
 | 
				
			||||||
#![allow(clippy::missing_errors_doc)]
 | 
					#![allow(clippy::missing_errors_doc)]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,5 @@
 | 
				
			|||||||
#![no_std]
 | 
					#![no_std]
 | 
				
			||||||
#![feature(async_fn_in_trait)]
 | 
					#![allow(async_fn_in_trait)]
 | 
				
			||||||
#![allow(stable_features, unknown_lints, async_fn_in_trait)]
 | 
					 | 
				
			||||||
#![doc = include_str!("../README.md")]
 | 
					#![doc = include_str!("../README.md")]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub mod chip;
 | 
					pub mod chip;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,11 +15,11 @@ categories = [
 | 
				
			|||||||
[package.metadata.embassy_docs]
 | 
					[package.metadata.embassy_docs]
 | 
				
			||||||
src_base = "https://github.com/embassy-rs/embassy/blob/embassy-net-v$VERSION/embassy-net/src/"
 | 
					src_base = "https://github.com/embassy-rs/embassy/blob/embassy-net-v$VERSION/embassy-net/src/"
 | 
				
			||||||
src_base_git = "https://github.com/embassy-rs/embassy/blob/$COMMIT/embassy-net/src/"
 | 
					src_base_git = "https://github.com/embassy-rs/embassy/blob/$COMMIT/embassy-net/src/"
 | 
				
			||||||
features = ["nightly", "defmt", "tcp", "udp", "dns", "dhcpv4", "proto-ipv6", "medium-ethernet", "medium-ip", "medium-ieee802154", "igmp"]
 | 
					features = ["defmt", "tcp", "udp", "dns", "dhcpv4", "proto-ipv6", "medium-ethernet", "medium-ip", "medium-ieee802154", "igmp"]
 | 
				
			||||||
target = "thumbv7em-none-eabi"
 | 
					target = "thumbv7em-none-eabi"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[package.metadata.docs.rs]
 | 
					[package.metadata.docs.rs]
 | 
				
			||||||
features = ["nightly", "defmt", "tcp", "udp", "dns", "dhcpv4", "proto-ipv6", "medium-ethernet", "medium-ip", "medium-ieee802154", "igmp"]
 | 
					features = ["defmt", "tcp", "udp", "dns", "dhcpv4", "proto-ipv6", "medium-ethernet", "medium-ip", "medium-ieee802154", "igmp"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[features]
 | 
					[features]
 | 
				
			||||||
default = []
 | 
					default = []
 | 
				
			||||||
@@ -27,8 +27,6 @@ std = []
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
defmt = ["dep:defmt", "smoltcp/defmt", "embassy-net-driver/defmt", "heapless/defmt-03"]
 | 
					defmt = ["dep:defmt", "smoltcp/defmt", "embassy-net-driver/defmt", "heapless/defmt-03"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
nightly = ["dep:embedded-io-async", "dep:embedded-nal-async"]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
udp = ["smoltcp/socket-udp"]
 | 
					udp = ["smoltcp/socket-udp"]
 | 
				
			||||||
tcp = ["smoltcp/socket-tcp"]
 | 
					tcp = ["smoltcp/socket-tcp"]
 | 
				
			||||||
dns = ["smoltcp/socket-dns", "smoltcp/proto-dns"]
 | 
					dns = ["smoltcp/socket-dns", "smoltcp/proto-dns"]
 | 
				
			||||||
@@ -54,7 +52,7 @@ smoltcp = { git = "https://github.com/smoltcp-rs/smoltcp.git", rev = "b57e2f9e70
 | 
				
			|||||||
embassy-net-driver = { version = "0.2.0", path = "../embassy-net-driver" }
 | 
					embassy-net-driver = { version = "0.2.0", path = "../embassy-net-driver" }
 | 
				
			||||||
embassy-time = { version = "0.1.5", path = "../embassy-time" }
 | 
					embassy-time = { version = "0.1.5", path = "../embassy-time" }
 | 
				
			||||||
embassy-sync = { version = "0.4.0", path = "../embassy-sync" }
 | 
					embassy-sync = { version = "0.4.0", path = "../embassy-sync" }
 | 
				
			||||||
embedded-io-async = { version = "0.6.1", optional = true }
 | 
					embedded-io-async = { version = "0.6.1" }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
managed = { version = "0.8.0", default-features = false, features = [ "map" ] }
 | 
					managed = { version = "0.8.0", default-features = false, features = [ "map" ] }
 | 
				
			||||||
heapless = { version = "0.8", default-features = false }
 | 
					heapless = { version = "0.8", default-features = false }
 | 
				
			||||||
@@ -63,4 +61,4 @@ generic-array = { version = "0.14.4", default-features = false }
 | 
				
			|||||||
stable_deref_trait = { version = "1.2.0", default-features = false }
 | 
					stable_deref_trait = { version = "1.2.0", default-features = false }
 | 
				
			||||||
futures = { version = "0.3.17", default-features = false, features = [ "async-await" ] }
 | 
					futures = { version = "0.3.17", default-features = false, features = [ "async-await" ] }
 | 
				
			||||||
atomic-pool = "1.0"
 | 
					atomic-pool = "1.0"
 | 
				
			||||||
embedded-nal-async = { version = "0.7.1", optional = true }
 | 
					embedded-nal-async = { version = "0.7.1" }
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										18
									
								
								embassy-net/build.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								embassy-net/build.rs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
				
			|||||||
 | 
					use std::env;
 | 
				
			||||||
 | 
					use std::ffi::OsString;
 | 
				
			||||||
 | 
					use std::process::Command;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn main() {
 | 
				
			||||||
 | 
					    println!("cargo:rerun-if-changed=build.rs");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let rustc = env::var_os("RUSTC").unwrap_or_else(|| OsString::from("rustc"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let output = Command::new(rustc)
 | 
				
			||||||
 | 
					        .arg("--version")
 | 
				
			||||||
 | 
					        .output()
 | 
				
			||||||
 | 
					        .expect("failed to run `rustc --version`");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if String::from_utf8_lossy(&output.stdout).contains("nightly") {
 | 
				
			||||||
 | 
					        println!("cargo:rustc-cfg=nightly");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -72,7 +72,6 @@ where
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
impl<'a, D> embedded_nal_async::Dns for DnsSocket<'a, D>
 | 
					impl<'a, D> embedded_nal_async::Dns for DnsSocket<'a, D>
 | 
				
			||||||
where
 | 
					where
 | 
				
			||||||
    D: Driver + 'static,
 | 
					    D: Driver + 'static,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,7 @@
 | 
				
			|||||||
#![cfg_attr(not(feature = "std"), no_std)]
 | 
					#![cfg_attr(not(feature = "std"), no_std)]
 | 
				
			||||||
#![cfg_attr(feature = "nightly", feature(async_fn_in_trait, impl_trait_projections))]
 | 
					#![cfg_attr(nightly, feature(async_fn_in_trait, impl_trait_projections))]
 | 
				
			||||||
#![cfg_attr(feature = "nightly", allow(stable_features, unknown_lints, async_fn_in_trait))]
 | 
					#![cfg_attr(nightly, allow(stable_features, unknown_lints))]
 | 
				
			||||||
 | 
					#![allow(async_fn_in_trait)]
 | 
				
			||||||
#![warn(missing_docs)]
 | 
					#![warn(missing_docs)]
 | 
				
			||||||
#![doc = include_str!("../README.md")]
 | 
					#![doc = include_str!("../README.md")]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -515,7 +515,6 @@ impl<'d> TcpIo<'d> {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
mod embedded_io_impls {
 | 
					mod embedded_io_impls {
 | 
				
			||||||
    use super::*;
 | 
					    use super::*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -584,7 +583,6 @@ mod embedded_io_impls {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// TCP client compatible with `embedded-nal-async` traits.
 | 
					/// TCP client compatible with `embedded-nal-async` traits.
 | 
				
			||||||
#[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
pub mod client {
 | 
					pub mod client {
 | 
				
			||||||
    use core::cell::{Cell, UnsafeCell};
 | 
					    use core::cell::{Cell, UnsafeCell};
 | 
				
			||||||
    use core::mem::MaybeUninit;
 | 
					    use core::mem::MaybeUninit;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,7 +8,7 @@ license = "MIT OR Apache-2.0"
 | 
				
			|||||||
src_base = "https://github.com/embassy-rs/embassy/blob/embassy-nrf-v$VERSION/embassy-nrf/src/"
 | 
					src_base = "https://github.com/embassy-rs/embassy/blob/embassy-nrf-v$VERSION/embassy-nrf/src/"
 | 
				
			||||||
src_base_git = "https://github.com/embassy-rs/embassy/blob/$COMMIT/embassy-nrf/src/"
 | 
					src_base_git = "https://github.com/embassy-rs/embassy/blob/$COMMIT/embassy-nrf/src/"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
features = ["nightly", "time", "defmt", "unstable-pac", "unstable-traits", "gpiote", "time-driver-rtc1"]
 | 
					features = ["time", "defmt", "unstable-pac", "gpiote", "time-driver-rtc1"]
 | 
				
			||||||
flavors = [
 | 
					flavors = [
 | 
				
			||||||
    { regex_feature = "nrf52.*", target = "thumbv7em-none-eabihf" },
 | 
					    { regex_feature = "nrf52.*", target = "thumbv7em-none-eabihf" },
 | 
				
			||||||
    { regex_feature = "nrf53.*", target = "thumbv8m.main-none-eabihf" },
 | 
					    { regex_feature = "nrf53.*", target = "thumbv8m.main-none-eabihf" },
 | 
				
			||||||
@@ -32,10 +32,7 @@ rt = [
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
time = ["dep:embassy-time"]
 | 
					time = ["dep:embassy-time"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
defmt = ["dep:defmt", "embassy-hal-internal/defmt", "embassy-sync/defmt", "embassy-usb-driver?/defmt", "embassy-embedded-hal/defmt"]
 | 
					defmt = ["dep:defmt", "embassy-hal-internal/defmt", "embassy-sync/defmt", "embassy-usb-driver/defmt", "embassy-embedded-hal/defmt"]
 | 
				
			||||||
 | 
					 | 
				
			||||||
# Enable nightly-only features
 | 
					 | 
				
			||||||
nightly = ["embedded-hal-1", "embedded-hal-async", "dep:embassy-usb-driver", "embedded-storage-async", "dep:embedded-io-async", "embassy-embedded-hal/nightly"]
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Reexport the PAC for the currently enabled chip at `embassy_nrf::pac`.
 | 
					# Reexport the PAC for the currently enabled chip at `embassy_nrf::pac`.
 | 
				
			||||||
# This is unstable because semver-minor (non-breaking) releases of embassy-nrf may major-bump (breaking) the PAC version.
 | 
					# This is unstable because semver-minor (non-breaking) releases of embassy-nrf may major-bump (breaking) the PAC version.
 | 
				
			||||||
@@ -43,10 +40,6 @@ nightly = ["embedded-hal-1", "embedded-hal-async", "dep:embassy-usb-driver", "em
 | 
				
			|||||||
# There are no plans to make this stable.
 | 
					# There are no plans to make this stable.
 | 
				
			||||||
unstable-pac = []
 | 
					unstable-pac = []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Implement embedded-hal 1.0 alpha traits.
 | 
					 | 
				
			||||||
# Implement embedded-hal-async traits if `nightly` is set as well.
 | 
					 | 
				
			||||||
unstable-traits = ["embedded-hal-1"]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
nrf52805 = ["nrf52805-pac", "_nrf52"]
 | 
					nrf52805 = ["nrf52805-pac", "_nrf52"]
 | 
				
			||||||
nrf52810 = ["nrf52810-pac", "_nrf52"]
 | 
					nrf52810 = ["nrf52810-pac", "_nrf52"]
 | 
				
			||||||
nrf52811 = ["nrf52811-pac", "_nrf52"]
 | 
					nrf52811 = ["nrf52811-pac", "_nrf52"]
 | 
				
			||||||
@@ -98,13 +91,13 @@ embassy-time = { version = "0.1.5", path = "../embassy-time", optional = true }
 | 
				
			|||||||
embassy-sync = { version = "0.4.0", path = "../embassy-sync" }
 | 
					embassy-sync = { version = "0.4.0", path = "../embassy-sync" }
 | 
				
			||||||
embassy-hal-internal = {version = "0.1.0", path = "../embassy-hal-internal", features = ["cortex-m", "prio-bits-3"] }
 | 
					embassy-hal-internal = {version = "0.1.0", path = "../embassy-hal-internal", features = ["cortex-m", "prio-bits-3"] }
 | 
				
			||||||
embassy-embedded-hal = {version = "0.1.0", path = "../embassy-embedded-hal" }
 | 
					embassy-embedded-hal = {version = "0.1.0", path = "../embassy-embedded-hal" }
 | 
				
			||||||
embassy-usb-driver = {version = "0.1.0", path = "../embassy-usb-driver", optional=true }
 | 
					embassy-usb-driver = {version = "0.1.0", path = "../embassy-usb-driver" }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
embedded-hal-02 = { package = "embedded-hal", version = "0.2.6", features = ["unproven"] }
 | 
					embedded-hal-02 = { package = "embedded-hal", version = "0.2.6", features = ["unproven"] }
 | 
				
			||||||
embedded-hal-1 = { package = "embedded-hal", version = "=1.0.0-rc.2", optional = true}
 | 
					embedded-hal-1 = { package = "embedded-hal", version = "=1.0.0-rc.2" }
 | 
				
			||||||
embedded-hal-async = { version = "=1.0.0-rc.2", optional = true}
 | 
					embedded-hal-async = { version = "=1.0.0-rc.2" }
 | 
				
			||||||
embedded-io = { version = "0.6.0" }
 | 
					embedded-io = { version = "0.6.0" }
 | 
				
			||||||
embedded-io-async = { version = "0.6.1", optional = true }
 | 
					embedded-io-async = { version = "0.6.1" }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
defmt = { version = "0.3", optional = true }
 | 
					defmt = { version = "0.3", optional = true }
 | 
				
			||||||
log = { version = "0.4.14", optional = true }
 | 
					log = { version = "0.4.14", optional = true }
 | 
				
			||||||
@@ -114,7 +107,7 @@ critical-section = "1.1"
 | 
				
			|||||||
rand_core = "0.6.3"
 | 
					rand_core = "0.6.3"
 | 
				
			||||||
fixed = "1.10.0"
 | 
					fixed = "1.10.0"
 | 
				
			||||||
embedded-storage = "0.3.0"
 | 
					embedded-storage = "0.3.0"
 | 
				
			||||||
embedded-storage-async = { version = "0.4.0", optional = true }
 | 
					embedded-storage-async = "0.4.0"
 | 
				
			||||||
cfg-if = "1.0.0"
 | 
					cfg-if = "1.0.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
nrf52805-pac = { version = "0.12.0", optional = true }
 | 
					nrf52805-pac = { version = "0.12.0", optional = true }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -607,7 +607,6 @@ impl<'u, 'd, U: UarteInstance, T: TimerInstance> BufferedUarteRx<'u, 'd, U, T> {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
mod _embedded_io {
 | 
					mod _embedded_io {
 | 
				
			||||||
    use super::*;
 | 
					    use super::*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -131,7 +131,6 @@ embassy_hal_internal::peripherals! {
 | 
				
			|||||||
    QDEC,
 | 
					    QDEC,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
impl_usb!(USBD, USBD, USBD);
 | 
					impl_usb!(USBD, USBD, USBD);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl_uarte!(UARTE0, UARTE0, UARTE0_UART0);
 | 
					impl_uarte!(UARTE0, UARTE0, UARTE0_UART0);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -171,7 +171,6 @@ embassy_hal_internal::peripherals! {
 | 
				
			|||||||
    I2S,
 | 
					    I2S,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
impl_usb!(USBD, USBD, USBD);
 | 
					impl_usb!(USBD, USBD, USBD);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl_uarte!(UARTE0, UARTE0, UARTE0_UART0);
 | 
					impl_uarte!(UARTE0, UARTE0, UARTE0_UART0);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -174,7 +174,6 @@ embassy_hal_internal::peripherals! {
 | 
				
			|||||||
    I2S,
 | 
					    I2S,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
impl_usb!(USBD, USBD, USBD);
 | 
					impl_usb!(USBD, USBD, USBD);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl_uarte!(UARTE0, UARTE0, UARTE0_UART0);
 | 
					impl_uarte!(UARTE0, UARTE0, UARTE0_UART0);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -382,7 +382,6 @@ embassy_hal_internal::peripherals! {
 | 
				
			|||||||
    P1_15,
 | 
					    P1_15,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
impl_usb!(USBD, USBD, USBD);
 | 
					impl_usb!(USBD, USBD, USBD);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl_uarte!(SERIAL0, UARTE0, SERIAL0);
 | 
					impl_uarte!(SERIAL0, UARTE0, SERIAL0);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -566,10 +566,6 @@ mod eh02 {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(feature = "unstable-traits")]
 | 
					 | 
				
			||||||
mod eh1 {
 | 
					 | 
				
			||||||
    use super::*;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
impl<'d, T: Pin> embedded_hal_1::digital::ErrorType for Input<'d, T> {
 | 
					impl<'d, T: Pin> embedded_hal_1::digital::ErrorType for Input<'d, T> {
 | 
				
			||||||
    type Error = Infallible;
 | 
					    type Error = Infallible;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -644,4 +640,3 @@ mod eh1 {
 | 
				
			|||||||
        Ok(self.is_set_low())
 | 
					        Ok(self.is_set_low())
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -490,10 +490,6 @@ mod eh02 {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(feature = "unstable-traits")]
 | 
					 | 
				
			||||||
mod eh1 {
 | 
					 | 
				
			||||||
    use super::*;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
impl<'d, C: Channel, T: GpioPin> embedded_hal_1::digital::ErrorType for InputChannel<'d, C, T> {
 | 
					impl<'d, C: Channel, T: GpioPin> embedded_hal_1::digital::ErrorType for InputChannel<'d, C, T> {
 | 
				
			||||||
    type Error = Infallible;
 | 
					    type Error = Infallible;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -507,11 +503,6 @@ mod eh1 {
 | 
				
			|||||||
        Ok(self.pin.is_low())
 | 
					        Ok(self.pin.is_low())
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#[cfg(all(feature = "unstable-traits", feature = "nightly"))]
 | 
					 | 
				
			||||||
mod eha {
 | 
					 | 
				
			||||||
    use super::*;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl<'d, T: GpioPin> embedded_hal_async::digital::Wait for Input<'d, T> {
 | 
					impl<'d, T: GpioPin> embedded_hal_async::digital::Wait for Input<'d, T> {
 | 
				
			||||||
    async fn wait_for_high(&mut self) -> Result<(), Self::Error> {
 | 
					    async fn wait_for_high(&mut self) -> Result<(), Self::Error> {
 | 
				
			||||||
@@ -556,4 +547,3 @@ mod eha {
 | 
				
			|||||||
        Ok(self.wait_for_any_edge().await)
 | 
					        Ok(self.wait_for_any_edge().await)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,5 @@
 | 
				
			|||||||
#![no_std]
 | 
					#![no_std]
 | 
				
			||||||
#![cfg_attr(feature = "nightly", feature(async_fn_in_trait, impl_trait_projections))]
 | 
					#![allow(async_fn_in_trait)]
 | 
				
			||||||
#![cfg_attr(feature = "nightly", allow(stable_features, unknown_lints, async_fn_in_trait))]
 | 
					 | 
				
			||||||
#![doc = include_str!("../README.md")]
 | 
					#![doc = include_str!("../README.md")]
 | 
				
			||||||
#![warn(missing_docs)]
 | 
					#![warn(missing_docs)]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -76,7 +75,6 @@ pub mod uarte;
 | 
				
			|||||||
    feature = "nrf52833",
 | 
					    feature = "nrf52833",
 | 
				
			||||||
    feature = "nrf52840"
 | 
					    feature = "nrf52840"
 | 
				
			||||||
))]
 | 
					))]
 | 
				
			||||||
#[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
pub mod usb;
 | 
					pub mod usb;
 | 
				
			||||||
#[cfg(not(feature = "_nrf5340"))]
 | 
					#[cfg(not(feature = "_nrf5340"))]
 | 
				
			||||||
pub mod wdt;
 | 
					pub mod wdt;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -585,7 +585,6 @@ impl<'d, T: Instance> NorFlash for Qspi<'d, T> {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
mod _eh1 {
 | 
					mod _eh1 {
 | 
				
			||||||
    use embedded_storage_async::nor_flash::{NorFlash as AsyncNorFlash, ReadNorFlash as AsyncReadNorFlash};
 | 
					    use embedded_storage_async::nor_flash::{NorFlash as AsyncNorFlash, ReadNorFlash as AsyncReadNorFlash};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -495,10 +495,6 @@ mod eh02 {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(feature = "unstable-traits")]
 | 
					 | 
				
			||||||
mod eh1 {
 | 
					 | 
				
			||||||
    use super::*;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
impl embedded_hal_1::spi::Error for Error {
 | 
					impl embedded_hal_1::spi::Error for Error {
 | 
				
			||||||
    fn kind(&self) -> embedded_hal_1::spi::ErrorKind {
 | 
					    fn kind(&self) -> embedded_hal_1::spi::ErrorKind {
 | 
				
			||||||
        match *self {
 | 
					        match *self {
 | 
				
			||||||
@@ -534,12 +530,6 @@ mod eh1 {
 | 
				
			|||||||
        self.blocking_transfer_in_place(words)
 | 
					        self.blocking_transfer_in_place(words)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#[cfg(all(feature = "unstable-traits", feature = "nightly"))]
 | 
					 | 
				
			||||||
mod eha {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    use super::*;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl<'d, T: Instance> embedded_hal_async::spi::SpiBus<u8> for Spim<'d, T> {
 | 
					impl<'d, T: Instance> embedded_hal_async::spi::SpiBus<u8> for Spim<'d, T> {
 | 
				
			||||||
    async fn flush(&mut self) -> Result<(), Error> {
 | 
					    async fn flush(&mut self) -> Result<(), Error> {
 | 
				
			||||||
@@ -562,7 +552,6 @@ mod eha {
 | 
				
			|||||||
        self.transfer_in_place(words).await
 | 
					        self.transfer_in_place(words).await
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl<'d, T: Instance> SetConfig for Spim<'d, T> {
 | 
					impl<'d, T: Instance> SetConfig for Spim<'d, T> {
 | 
				
			||||||
    type Config = Config;
 | 
					    type Config = Config;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -810,10 +810,6 @@ mod eh02 {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(feature = "unstable-traits")]
 | 
					 | 
				
			||||||
mod eh1 {
 | 
					 | 
				
			||||||
    use super::*;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
impl embedded_hal_1::i2c::Error for Error {
 | 
					impl embedded_hal_1::i2c::Error for Error {
 | 
				
			||||||
    fn kind(&self) -> embedded_hal_1::i2c::ErrorKind {
 | 
					    fn kind(&self) -> embedded_hal_1::i2c::ErrorKind {
 | 
				
			||||||
        match *self {
 | 
					        match *self {
 | 
				
			||||||
@@ -859,11 +855,7 @@ mod eh1 {
 | 
				
			|||||||
        todo!();
 | 
					        todo!();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(all(feature = "unstable-traits", feature = "nightly"))]
 | 
					 | 
				
			||||||
mod eha {
 | 
					 | 
				
			||||||
    use super::*;
 | 
					 | 
				
			||||||
impl<'d, T: Instance> embedded_hal_async::i2c::I2c for Twim<'d, T> {
 | 
					impl<'d, T: Instance> embedded_hal_async::i2c::I2c for Twim<'d, T> {
 | 
				
			||||||
    async fn read(&mut self, address: u8, read: &mut [u8]) -> Result<(), Self::Error> {
 | 
					    async fn read(&mut self, address: u8, read: &mut [u8]) -> Result<(), Self::Error> {
 | 
				
			||||||
        self.read(address, read).await
 | 
					        self.read(address, read).await
 | 
				
			||||||
@@ -886,7 +878,6 @@ mod eha {
 | 
				
			|||||||
        todo!()
 | 
					        todo!()
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl<'d, T: Instance> SetConfig for Twim<'d, T> {
 | 
					impl<'d, T: Instance> SetConfig for Twim<'d, T> {
 | 
				
			||||||
    type Config = Config;
 | 
					    type Config = Config;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,7 +7,7 @@ license = "MIT OR Apache-2.0"
 | 
				
			|||||||
[package.metadata.embassy_docs]
 | 
					[package.metadata.embassy_docs]
 | 
				
			||||||
src_base = "https://github.com/embassy-rs/embassy/blob/embassy-rp-v$VERSION/embassy-rp/src/"
 | 
					src_base = "https://github.com/embassy-rs/embassy/blob/embassy-rp-v$VERSION/embassy-rp/src/"
 | 
				
			||||||
src_base_git = "https://github.com/embassy-rs/embassy/blob/$COMMIT/embassy-rp/src/"
 | 
					src_base_git = "https://github.com/embassy-rs/embassy/blob/$COMMIT/embassy-rp/src/"
 | 
				
			||||||
features = ["nightly", "defmt", "unstable-pac", "unstable-traits", "time-driver"]
 | 
					features = ["defmt", "unstable-pac", "time-driver"]
 | 
				
			||||||
flavors = [
 | 
					flavors = [
 | 
				
			||||||
    { name = "rp2040", target = "thumbv6m-none-eabi" },
 | 
					    { name = "rp2040", target = "thumbv6m-none-eabi" },
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
@@ -16,7 +16,7 @@ flavors = [
 | 
				
			|||||||
default = [ "rt" ]
 | 
					default = [ "rt" ]
 | 
				
			||||||
rt = [ "rp-pac/rt" ]
 | 
					rt = [ "rp-pac/rt" ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
defmt = ["dep:defmt", "embassy-usb-driver?/defmt", "embassy-hal-internal/defmt"]
 | 
					defmt = ["dep:defmt", "embassy-usb-driver/defmt", "embassy-hal-internal/defmt"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# critical section that is safe for multicore use
 | 
					# critical section that is safe for multicore use
 | 
				
			||||||
critical-section-impl = ["critical-section/restore-state-u8"]
 | 
					critical-section-impl = ["critical-section/restore-state-u8"]
 | 
				
			||||||
@@ -51,20 +51,13 @@ qspi-as-gpio = []
 | 
				
			|||||||
# This allows the flash driver to not force pausing execution on both cores when doing flash operations.
 | 
					# This allows the flash driver to not force pausing execution on both cores when doing flash operations.
 | 
				
			||||||
run-from-ram = []
 | 
					run-from-ram = []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Enable nightly-only features
 | 
					 | 
				
			||||||
nightly = ["embedded-hal-1", "embedded-hal-async", "embedded-storage-async", "embassy-embedded-hal/nightly", "dep:embassy-usb-driver", "dep:embedded-io-async"]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Implement embedded-hal 1.0 alpha traits.
 | 
					 | 
				
			||||||
# Implement embedded-hal-async traits if `nightly` is set as well.
 | 
					 | 
				
			||||||
unstable-traits = ["embedded-hal-1", "embedded-hal-nb"]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[dependencies]
 | 
					[dependencies]
 | 
				
			||||||
embassy-sync = { version = "0.4.0", path = "../embassy-sync" }
 | 
					embassy-sync = { version = "0.4.0", path = "../embassy-sync" }
 | 
				
			||||||
embassy-time = { version = "0.1.5", path = "../embassy-time", features = [ "tick-hz-1_000_000" ] }
 | 
					embassy-time = { version = "0.1.5", path = "../embassy-time", features = [ "tick-hz-1_000_000" ] }
 | 
				
			||||||
embassy-futures = { version = "0.1.0", path = "../embassy-futures" }
 | 
					embassy-futures = { version = "0.1.0", path = "../embassy-futures" }
 | 
				
			||||||
embassy-hal-internal = {version = "0.1.0", path = "../embassy-hal-internal", features = ["cortex-m", "prio-bits-2"] }
 | 
					embassy-hal-internal = {version = "0.1.0", path = "../embassy-hal-internal", features = ["cortex-m", "prio-bits-2"] }
 | 
				
			||||||
embassy-embedded-hal = {version = "0.1.0", path = "../embassy-embedded-hal" }
 | 
					embassy-embedded-hal = {version = "0.1.0", path = "../embassy-embedded-hal" }
 | 
				
			||||||
embassy-usb-driver = {version = "0.1.0", path = "../embassy-usb-driver", optional = true }
 | 
					embassy-usb-driver = {version = "0.1.0", path = "../embassy-usb-driver" }
 | 
				
			||||||
atomic-polyfill = "1.0.1"
 | 
					atomic-polyfill = "1.0.1"
 | 
				
			||||||
defmt = { version = "0.3", optional = true }
 | 
					defmt = { version = "0.3", optional = true }
 | 
				
			||||||
log = { version = "0.4.14", optional = true }
 | 
					log = { version = "0.4.14", optional = true }
 | 
				
			||||||
@@ -76,18 +69,18 @@ critical-section = "1.1"
 | 
				
			|||||||
futures = { version = "0.3.17", default-features = false, features = ["async-await"] }
 | 
					futures = { version = "0.3.17", default-features = false, features = ["async-await"] }
 | 
				
			||||||
chrono = { version = "0.4", default-features = false, optional = true }
 | 
					chrono = { version = "0.4", default-features = false, optional = true }
 | 
				
			||||||
embedded-io = { version = "0.6.0" }
 | 
					embedded-io = { version = "0.6.0" }
 | 
				
			||||||
embedded-io-async = { version = "0.6.1", optional = true }
 | 
					embedded-io-async = { version = "0.6.1" }
 | 
				
			||||||
embedded-storage = { version = "0.3" }
 | 
					embedded-storage = { version = "0.3" }
 | 
				
			||||||
embedded-storage-async = { version = "0.4.0", optional = true }
 | 
					embedded-storage-async = { version = "0.4.0" }
 | 
				
			||||||
rand_core = "0.6.4"
 | 
					rand_core = "0.6.4"
 | 
				
			||||||
fixed = "1.23.1"
 | 
					fixed = "1.23.1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
rp-pac = { version = "6" }
 | 
					rp-pac = { version = "6" }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
embedded-hal-02 = { package = "embedded-hal", version = "0.2.6", features = ["unproven"] }
 | 
					embedded-hal-02 = { package = "embedded-hal", version = "0.2.6", features = ["unproven"] }
 | 
				
			||||||
embedded-hal-1 = { package = "embedded-hal", version = "=1.0.0-rc.2", optional = true}
 | 
					embedded-hal-1 = { package = "embedded-hal", version = "=1.0.0-rc.2" }
 | 
				
			||||||
embedded-hal-async = { version = "=1.0.0-rc.2", optional = true}
 | 
					embedded-hal-async = { version = "=1.0.0-rc.2" }
 | 
				
			||||||
embedded-hal-nb = { version = "=1.0.0-rc.2", optional = true}
 | 
					embedded-hal-nb = { version = "=1.0.0-rc.2" }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pio-proc = {version= "0.2" }
 | 
					pio-proc = {version= "0.2" }
 | 
				
			||||||
pio = {version= "0.2.1" }
 | 
					pio = {version= "0.2.1" }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -352,7 +352,6 @@ impl<'d, T: Instance, M: Mode, const FLASH_SIZE: usize> NorFlash for Flash<'d, T
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
impl<'d, T: Instance, const FLASH_SIZE: usize> embedded_storage_async::nor_flash::ReadNorFlash
 | 
					impl<'d, T: Instance, const FLASH_SIZE: usize> embedded_storage_async::nor_flash::ReadNorFlash
 | 
				
			||||||
    for Flash<'d, T, Async, FLASH_SIZE>
 | 
					    for Flash<'d, T, Async, FLASH_SIZE>
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -367,7 +366,6 @@ impl<'d, T: Instance, const FLASH_SIZE: usize> embedded_storage_async::nor_flash
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
impl<'d, T: Instance, const FLASH_SIZE: usize> embedded_storage_async::nor_flash::NorFlash
 | 
					impl<'d, T: Instance, const FLASH_SIZE: usize> embedded_storage_async::nor_flash::NorFlash
 | 
				
			||||||
    for Flash<'d, T, Async, FLASH_SIZE>
 | 
					    for Flash<'d, T, Async, FLASH_SIZE>
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,5 @@
 | 
				
			|||||||
#![macro_use]
 | 
					#![macro_use]
 | 
				
			||||||
 | 
					use core::convert::Infallible;
 | 
				
			||||||
use core::future::Future;
 | 
					use core::future::Future;
 | 
				
			||||||
use core::pin::Pin as FuturePin;
 | 
					use core::pin::Pin as FuturePin;
 | 
				
			||||||
use core::task::{Context, Poll};
 | 
					use core::task::{Context, Poll};
 | 
				
			||||||
@@ -1036,12 +1037,6 @@ mod eh02 {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(feature = "unstable-traits")]
 | 
					 | 
				
			||||||
mod eh1 {
 | 
					 | 
				
			||||||
    use core::convert::Infallible;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    use super::*;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
impl<'d, T: Pin> embedded_hal_1::digital::ErrorType for Input<'d, T> {
 | 
					impl<'d, T: Pin> embedded_hal_1::digital::ErrorType for Input<'d, T> {
 | 
				
			||||||
    type Error = Infallible;
 | 
					    type Error = Infallible;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -1166,7 +1161,6 @@ mod eh1 {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
impl<'d, T: Pin> embedded_hal_async::digital::Wait for Flex<'d, T> {
 | 
					impl<'d, T: Pin> embedded_hal_async::digital::Wait for Flex<'d, T> {
 | 
				
			||||||
    async fn wait_for_high(&mut self) -> Result<(), Self::Error> {
 | 
					    async fn wait_for_high(&mut self) -> Result<(), Self::Error> {
 | 
				
			||||||
        self.wait_for_high().await;
 | 
					        self.wait_for_high().await;
 | 
				
			||||||
@@ -1194,7 +1188,6 @@ mod eh1 {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
impl<'d, T: Pin> embedded_hal_async::digital::Wait for Input<'d, T> {
 | 
					impl<'d, T: Pin> embedded_hal_async::digital::Wait for Input<'d, T> {
 | 
				
			||||||
    async fn wait_for_high(&mut self) -> Result<(), Self::Error> {
 | 
					    async fn wait_for_high(&mut self) -> Result<(), Self::Error> {
 | 
				
			||||||
        self.wait_for_high().await;
 | 
					        self.wait_for_high().await;
 | 
				
			||||||
@@ -1222,7 +1215,6 @@ mod eh1 {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
impl<'d, T: Pin> embedded_hal_async::digital::Wait for OutputOpenDrain<'d, T> {
 | 
					impl<'d, T: Pin> embedded_hal_async::digital::Wait for OutputOpenDrain<'d, T> {
 | 
				
			||||||
    async fn wait_for_high(&mut self) -> Result<(), Self::Error> {
 | 
					    async fn wait_for_high(&mut self) -> Result<(), Self::Error> {
 | 
				
			||||||
        self.wait_for_high().await;
 | 
					        self.wait_for_high().await;
 | 
				
			||||||
@@ -1249,4 +1241,3 @@ mod eh1 {
 | 
				
			|||||||
        Ok(())
 | 
					        Ok(())
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -588,9 +588,6 @@ impl<'d, T: Instance + 'd, M: Mode> I2c<'d, T, M> {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
mod eh02 {
 | 
					 | 
				
			||||||
    use super::*;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
impl<'d, T: Instance, M: Mode> embedded_hal_02::blocking::i2c::Read for I2c<'d, T, M> {
 | 
					impl<'d, T: Instance, M: Mode> embedded_hal_02::blocking::i2c::Read for I2c<'d, T, M> {
 | 
				
			||||||
    type Error = Error;
 | 
					    type Error = Error;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -636,11 +633,6 @@ mod eh02 {
 | 
				
			|||||||
        Ok(())
 | 
					        Ok(())
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#[cfg(feature = "unstable-traits")]
 | 
					 | 
				
			||||||
mod eh1 {
 | 
					 | 
				
			||||||
    use super::*;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl embedded_hal_1::i2c::Error for Error {
 | 
					impl embedded_hal_1::i2c::Error for Error {
 | 
				
			||||||
    fn kind(&self) -> embedded_hal_1::i2c::ErrorKind {
 | 
					    fn kind(&self) -> embedded_hal_1::i2c::ErrorKind {
 | 
				
			||||||
@@ -692,17 +684,10 @@ mod eh1 {
 | 
				
			|||||||
        Ok(())
 | 
					        Ok(())
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
#[cfg(all(feature = "unstable-traits", feature = "nightly"))]
 | 
					 | 
				
			||||||
mod nightly {
 | 
					 | 
				
			||||||
    use embedded_hal_1::i2c::Operation;
 | 
					 | 
				
			||||||
    use embedded_hal_async::i2c::AddressMode;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    use super::*;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl<'d, A, T> embedded_hal_async::i2c::I2c<A> for I2c<'d, T, Async>
 | 
					impl<'d, A, T> embedded_hal_async::i2c::I2c<A> for I2c<'d, T, Async>
 | 
				
			||||||
where
 | 
					where
 | 
				
			||||||
        A: AddressMode + Into<u16> + 'static,
 | 
					    A: embedded_hal_async::i2c::AddressMode + Into<u16> + 'static,
 | 
				
			||||||
    T: Instance + 'd,
 | 
					    T: Instance + 'd,
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    async fn read(&mut self, address: A, read: &mut [u8]) -> Result<(), Self::Error> {
 | 
					    async fn read(&mut self, address: A, read: &mut [u8]) -> Result<(), Self::Error> {
 | 
				
			||||||
@@ -727,7 +712,13 @@ mod nightly {
 | 
				
			|||||||
        self.read_async_internal(read, true, true).await
 | 
					        self.read_async_internal(read, true, true).await
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        async fn transaction(&mut self, address: A, operations: &mut [Operation<'_>]) -> Result<(), Self::Error> {
 | 
					    async fn transaction(
 | 
				
			||||||
 | 
					        &mut self,
 | 
				
			||||||
 | 
					        address: A,
 | 
				
			||||||
 | 
					        operations: &mut [embedded_hal_1::i2c::Operation<'_>],
 | 
				
			||||||
 | 
					    ) -> Result<(), Self::Error> {
 | 
				
			||||||
 | 
					        use embedded_hal_1::i2c::Operation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        let addr: u16 = address.into();
 | 
					        let addr: u16 = address.into();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if operations.len() > 0 {
 | 
					        if operations.len() > 0 {
 | 
				
			||||||
@@ -750,7 +741,6 @@ mod nightly {
 | 
				
			|||||||
        Ok(())
 | 
					        Ok(())
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub fn i2c_reserved_addr(addr: u16) -> bool {
 | 
					pub fn i2c_reserved_addr(addr: u16) -> bool {
 | 
				
			||||||
    ((addr & 0x78) == 0 || (addr & 0x78) == 0x78) && addr != 0
 | 
					    ((addr & 0x78) == 0 || (addr & 0x78) == 0x78) && addr != 0
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,5 @@
 | 
				
			|||||||
#![no_std]
 | 
					#![no_std]
 | 
				
			||||||
#![cfg_attr(feature = "nightly", feature(async_fn_in_trait, impl_trait_projections))]
 | 
					#![allow(async_fn_in_trait)]
 | 
				
			||||||
#![cfg_attr(feature = "nightly", allow(stable_features, unknown_lints, async_fn_in_trait))]
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
// This mod MUST go first, so that the others see its macros.
 | 
					// This mod MUST go first, so that the others see its macros.
 | 
				
			||||||
pub(crate) mod fmt;
 | 
					pub(crate) mod fmt;
 | 
				
			||||||
@@ -28,7 +27,6 @@ pub mod spi;
 | 
				
			|||||||
#[cfg(feature = "time-driver")]
 | 
					#[cfg(feature = "time-driver")]
 | 
				
			||||||
pub mod timer;
 | 
					pub mod timer;
 | 
				
			||||||
pub mod uart;
 | 
					pub mod uart;
 | 
				
			||||||
#[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
pub mod usb;
 | 
					pub mod usb;
 | 
				
			||||||
pub mod watchdog;
 | 
					pub mod watchdog;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -511,9 +511,6 @@ impl_mode!(Async);
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// ====================
 | 
					// ====================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
mod eh02 {
 | 
					 | 
				
			||||||
    use super::*;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
impl<'d, T: Instance, M: Mode> embedded_hal_02::blocking::spi::Transfer<u8> for Spi<'d, T, M> {
 | 
					impl<'d, T: Instance, M: Mode> embedded_hal_02::blocking::spi::Transfer<u8> for Spi<'d, T, M> {
 | 
				
			||||||
    type Error = Error;
 | 
					    type Error = Error;
 | 
				
			||||||
    fn transfer<'w>(&mut self, words: &'w mut [u8]) -> Result<&'w [u8], Self::Error> {
 | 
					    fn transfer<'w>(&mut self, words: &'w mut [u8]) -> Result<&'w [u8], Self::Error> {
 | 
				
			||||||
@@ -529,11 +526,6 @@ mod eh02 {
 | 
				
			|||||||
        self.blocking_write(words)
 | 
					        self.blocking_write(words)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#[cfg(feature = "unstable-traits")]
 | 
					 | 
				
			||||||
mod eh1 {
 | 
					 | 
				
			||||||
    use super::*;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl embedded_hal_1::spi::Error for Error {
 | 
					impl embedded_hal_1::spi::Error for Error {
 | 
				
			||||||
    fn kind(&self) -> embedded_hal_1::spi::ErrorKind {
 | 
					    fn kind(&self) -> embedded_hal_1::spi::ErrorKind {
 | 
				
			||||||
@@ -566,11 +558,6 @@ mod eh1 {
 | 
				
			|||||||
        self.blocking_transfer_in_place(words)
 | 
					        self.blocking_transfer_in_place(words)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#[cfg(all(feature = "unstable-traits", feature = "nightly"))]
 | 
					 | 
				
			||||||
mod eha {
 | 
					 | 
				
			||||||
    use super::*;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl<'d, T: Instance> embedded_hal_async::spi::SpiBus<u8> for Spi<'d, T, Async> {
 | 
					impl<'d, T: Instance> embedded_hal_async::spi::SpiBus<u8> for Spi<'d, T, Async> {
 | 
				
			||||||
    async fn flush(&mut self) -> Result<(), Self::Error> {
 | 
					    async fn flush(&mut self) -> Result<(), Self::Error> {
 | 
				
			||||||
@@ -593,7 +580,6 @@ mod eha {
 | 
				
			|||||||
        self.transfer_in_place(words).await
 | 
					        self.transfer_in_place(words).await
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl<'d, T: Instance, M: Mode> SetConfig for Spi<'d, T, M> {
 | 
					impl<'d, T: Instance, M: Mode> SetConfig for Spi<'d, T, M> {
 | 
				
			||||||
    type Config = Config;
 | 
					    type Config = Config;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -668,9 +668,6 @@ impl<'d, T: Instance + 'd> embedded_io::Write for BufferedUartTx<'d, T> {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
mod eh02 {
 | 
					 | 
				
			||||||
    use super::*;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
impl<'d, T: Instance> embedded_hal_02::serial::Read<u8> for BufferedUartRx<'d, T> {
 | 
					impl<'d, T: Instance> embedded_hal_02::serial::Read<u8> for BufferedUartRx<'d, T> {
 | 
				
			||||||
    type Error = Error;
 | 
					    type Error = Error;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -741,11 +738,6 @@ mod eh02 {
 | 
				
			|||||||
        self.blocking_flush()
 | 
					        self.blocking_flush()
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#[cfg(feature = "unstable-traits")]
 | 
					 | 
				
			||||||
mod eh1 {
 | 
					 | 
				
			||||||
    use super::*;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl<'d, T: Instance> embedded_hal_nb::serial::ErrorType for BufferedUartRx<'d, T> {
 | 
					impl<'d, T: Instance> embedded_hal_nb::serial::ErrorType for BufferedUartRx<'d, T> {
 | 
				
			||||||
    type Error = Error;
 | 
					    type Error = Error;
 | 
				
			||||||
@@ -790,4 +782,3 @@ mod eh1 {
 | 
				
			|||||||
        self.blocking_flush().map_err(nb::Error::Other)
 | 
					        self.blocking_flush().map_err(nb::Error::Other)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,9 +17,7 @@ use crate::interrupt::typelevel::{Binding, Interrupt};
 | 
				
			|||||||
use crate::pac::io::vals::{Inover, Outover};
 | 
					use crate::pac::io::vals::{Inover, Outover};
 | 
				
			||||||
use crate::{interrupt, pac, peripherals, Peripheral, RegExt};
 | 
					use crate::{interrupt, pac, peripherals, Peripheral, RegExt};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
mod buffered;
 | 
					mod buffered;
 | 
				
			||||||
#[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
pub use buffered::{BufferedInterruptHandler, BufferedUart, BufferedUartRx, BufferedUartTx};
 | 
					pub use buffered::{BufferedInterruptHandler, BufferedUart, BufferedUartRx, BufferedUartTx};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[derive(Clone, Copy, PartialEq, Eq, Debug)]
 | 
					#[derive(Clone, Copy, PartialEq, Eq, Debug)]
 | 
				
			||||||
@@ -193,7 +191,6 @@ impl<'d, T: Instance, M: Mode> UartTx<'d, T, M> {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl<'d, T: Instance> UartTx<'d, T, Blocking> {
 | 
					impl<'d, T: Instance> UartTx<'d, T, Blocking> {
 | 
				
			||||||
    #[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
    pub fn into_buffered(
 | 
					    pub fn into_buffered(
 | 
				
			||||||
        self,
 | 
					        self,
 | 
				
			||||||
        irq: impl Binding<T::Interrupt, BufferedInterruptHandler<T>>,
 | 
					        irq: impl Binding<T::Interrupt, BufferedInterruptHandler<T>>,
 | 
				
			||||||
@@ -307,7 +304,6 @@ impl<'d, T: Instance> UartRx<'d, T, Blocking> {
 | 
				
			|||||||
        Self::new_inner(false, None)
 | 
					        Self::new_inner(false, None)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
    pub fn into_buffered(
 | 
					    pub fn into_buffered(
 | 
				
			||||||
        self,
 | 
					        self,
 | 
				
			||||||
        irq: impl Binding<T::Interrupt, BufferedInterruptHandler<T>>,
 | 
					        irq: impl Binding<T::Interrupt, BufferedInterruptHandler<T>>,
 | 
				
			||||||
@@ -462,7 +458,6 @@ impl<'d, T: Instance> Uart<'d, T, Blocking> {
 | 
				
			|||||||
        )
 | 
					        )
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
    pub fn into_buffered(
 | 
					    pub fn into_buffered(
 | 
				
			||||||
        self,
 | 
					        self,
 | 
				
			||||||
        irq: impl Binding<T::Interrupt, BufferedInterruptHandler<T>>,
 | 
					        irq: impl Binding<T::Interrupt, BufferedInterruptHandler<T>>,
 | 
				
			||||||
@@ -709,9 +704,6 @@ impl<'d, T: Instance> Uart<'d, T, Async> {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
mod eh02 {
 | 
					 | 
				
			||||||
    use super::*;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
impl<'d, T: Instance, M: Mode> embedded_hal_02::serial::Read<u8> for UartRx<'d, T, M> {
 | 
					impl<'d, T: Instance, M: Mode> embedded_hal_02::serial::Read<u8> for UartRx<'d, T, M> {
 | 
				
			||||||
    type Error = Error;
 | 
					    type Error = Error;
 | 
				
			||||||
    fn read(&mut self) -> Result<u8, nb::Error<Self::Error>> {
 | 
					    fn read(&mut self) -> Result<u8, nb::Error<Self::Error>> {
 | 
				
			||||||
@@ -801,11 +793,6 @@ mod eh02 {
 | 
				
			|||||||
        self.blocking_flush()
 | 
					        self.blocking_flush()
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#[cfg(feature = "unstable-traits")]
 | 
					 | 
				
			||||||
mod eh1 {
 | 
					 | 
				
			||||||
    use super::*;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl embedded_hal_nb::serial::Error for Error {
 | 
					impl embedded_hal_nb::serial::Error for Error {
 | 
				
			||||||
    fn kind(&self) -> embedded_hal_nb::serial::ErrorKind {
 | 
					    fn kind(&self) -> embedded_hal_nb::serial::ErrorKind {
 | 
				
			||||||
@@ -876,7 +863,6 @@ mod eh1 {
 | 
				
			|||||||
        self.blocking_flush().map_err(nb::Error::Other)
 | 
					        self.blocking_flush().map_err(nb::Error::Other)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
mod sealed {
 | 
					mod sealed {
 | 
				
			||||||
    use super::*;
 | 
					    use super::*;
 | 
				
			||||||
@@ -891,7 +877,6 @@ mod sealed {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        fn regs() -> pac::uart::Uart;
 | 
					        fn regs() -> pac::uart::Uart;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
        fn buffered_state() -> &'static buffered::State;
 | 
					        fn buffered_state() -> &'static buffered::State;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        fn dma_state() -> &'static DmaState;
 | 
					        fn dma_state() -> &'static DmaState;
 | 
				
			||||||
@@ -931,7 +916,6 @@ macro_rules! impl_instance {
 | 
				
			|||||||
                pac::$inst
 | 
					                pac::$inst
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            #[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
            fn buffered_state() -> &'static buffered::State {
 | 
					            fn buffered_state() -> &'static buffered::State {
 | 
				
			||||||
                static STATE: buffered::State = buffered::State::new();
 | 
					                static STATE: buffered::State = buffered::State::new();
 | 
				
			||||||
                &STATE
 | 
					                &STATE
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,9 +1,5 @@
 | 
				
			|||||||
#![no_std]
 | 
					#![no_std]
 | 
				
			||||||
#![cfg_attr(any(feature = "ble", feature = "mac"), feature(async_fn_in_trait))]
 | 
					#![allow(async_fn_in_trait)]
 | 
				
			||||||
#![cfg_attr(
 | 
					 | 
				
			||||||
    any(feature = "ble", feature = "mac"),
 | 
					 | 
				
			||||||
    allow(stable_features, unknown_lints, async_fn_in_trait)
 | 
					 | 
				
			||||||
)]
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
// This must go FIRST so that all the other modules see its macros.
 | 
					// This must go FIRST so that all the other modules see its macros.
 | 
				
			||||||
mod fmt;
 | 
					mod fmt;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,7 +8,7 @@ license = "MIT OR Apache-2.0"
 | 
				
			|||||||
src_base = "https://github.com/embassy-rs/embassy/blob/embassy-stm32-v$VERSION/embassy-stm32/src/"
 | 
					src_base = "https://github.com/embassy-rs/embassy/blob/embassy-stm32-v$VERSION/embassy-stm32/src/"
 | 
				
			||||||
src_base_git = "https://github.com/embassy-rs/embassy/blob/$COMMIT/embassy-stm32/src/"
 | 
					src_base_git = "https://github.com/embassy-rs/embassy/blob/$COMMIT/embassy-stm32/src/"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
features = ["nightly", "defmt", "unstable-pac", "unstable-traits", "exti", "time-driver-any", "time"]
 | 
					features = ["defmt", "unstable-pac", "exti", "time-driver-any", "time"]
 | 
				
			||||||
flavors = [
 | 
					flavors = [
 | 
				
			||||||
    { regex_feature = "stm32f0.*", target = "thumbv6m-none-eabi" },
 | 
					    { regex_feature = "stm32f0.*", target = "thumbv6m-none-eabi" },
 | 
				
			||||||
    { regex_feature = "stm32f1.*", target = "thumbv7m-none-eabi" },
 | 
					    { regex_feature = "stm32f1.*", target = "thumbv7m-none-eabi" },
 | 
				
			||||||
@@ -38,16 +38,16 @@ embassy-futures = { version = "0.1.0", path = "../embassy-futures" }
 | 
				
			|||||||
embassy-hal-internal = {version = "0.1.0", path = "../embassy-hal-internal", features = ["cortex-m", "prio-bits-4"] }
 | 
					embassy-hal-internal = {version = "0.1.0", path = "../embassy-hal-internal", features = ["cortex-m", "prio-bits-4"] }
 | 
				
			||||||
embassy-embedded-hal = {version = "0.1.0", path = "../embassy-embedded-hal" }
 | 
					embassy-embedded-hal = {version = "0.1.0", path = "../embassy-embedded-hal" }
 | 
				
			||||||
embassy-net-driver = { version = "0.2.0", path = "../embassy-net-driver" }
 | 
					embassy-net-driver = { version = "0.2.0", path = "../embassy-net-driver" }
 | 
				
			||||||
embassy-usb-driver = {version = "0.1.0", path = "../embassy-usb-driver", optional = true }
 | 
					embassy-usb-driver = {version = "0.1.0", path = "../embassy-usb-driver" }
 | 
				
			||||||
embassy-executor = { version = "0.3.3", path = "../embassy-executor", optional = true }
 | 
					embassy-executor = { version = "0.3.3", path = "../embassy-executor", optional = true }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
embedded-hal-02 = { package = "embedded-hal", version = "0.2.6", features = ["unproven"] }
 | 
					embedded-hal-02 = { package = "embedded-hal", version = "0.2.6", features = ["unproven"] }
 | 
				
			||||||
embedded-hal-1 = { package = "embedded-hal", version = "=1.0.0-rc.2", optional = true}
 | 
					embedded-hal-1 = { package = "embedded-hal", version = "=1.0.0-rc.2" }
 | 
				
			||||||
embedded-hal-async = { version = "=1.0.0-rc.2", optional = true}
 | 
					embedded-hal-async = { version = "=1.0.0-rc.2" }
 | 
				
			||||||
embedded-hal-nb = { version = "=1.0.0-rc.2", optional = true}
 | 
					embedded-hal-nb = { version = "=1.0.0-rc.2" }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
embedded-storage = "0.3.0"
 | 
					embedded-storage = "0.3.0"
 | 
				
			||||||
embedded-storage-async = { version = "0.4.0", optional = true }
 | 
					embedded-storage-async = { version = "0.4.0" }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
defmt = { version = "0.3", optional = true }
 | 
					defmt = { version = "0.3", optional = true }
 | 
				
			||||||
log = { version = "0.4.14", optional = true }
 | 
					log = { version = "0.4.14", optional = true }
 | 
				
			||||||
@@ -65,7 +65,7 @@ nb = "1.0.0"
 | 
				
			|||||||
stm32-fmc = "0.3.0"
 | 
					stm32-fmc = "0.3.0"
 | 
				
			||||||
cfg-if = "1.0.0"
 | 
					cfg-if = "1.0.0"
 | 
				
			||||||
embedded-io = { version = "0.6.0" }
 | 
					embedded-io = { version = "0.6.0" }
 | 
				
			||||||
embedded-io-async = { version = "0.6.1", optional = true }
 | 
					embedded-io-async = { version = "0.6.1" }
 | 
				
			||||||
chrono = { version = "^0.4", default-features = false, optional = true}
 | 
					chrono = { version = "^0.4", default-features = false, optional = true}
 | 
				
			||||||
bit_field = "0.10.2"
 | 
					bit_field = "0.10.2"
 | 
				
			||||||
document-features = "0.2.7"
 | 
					document-features = "0.2.7"
 | 
				
			||||||
@@ -86,29 +86,21 @@ default = ["rt"]
 | 
				
			|||||||
rt = ["stm32-metapac/rt"]
 | 
					rt = ["stm32-metapac/rt"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Use [`defmt`](https://docs.rs/defmt/latest/defmt/) for logging
 | 
					## Use [`defmt`](https://docs.rs/defmt/latest/defmt/) for logging
 | 
				
			||||||
defmt = ["dep:defmt", "bxcan/unstable-defmt", "embassy-sync/defmt", "embassy-embedded-hal/defmt", "embassy-hal-internal/defmt", "embedded-io-async?/defmt-03", "embassy-usb-driver?/defmt", "embassy-net-driver/defmt", "embassy-time?/defmt"]
 | 
					defmt = ["dep:defmt", "bxcan/unstable-defmt", "embassy-sync/defmt", "embassy-embedded-hal/defmt", "embassy-hal-internal/defmt", "embedded-io-async/defmt-03", "embassy-usb-driver/defmt", "embassy-net-driver/defmt", "embassy-time?/defmt"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
exti = []
 | 
					exti = []
 | 
				
			||||||
low-power = [ "dep:embassy-executor", "embassy-executor/arch-cortex-m" ]
 | 
					low-power = [ "dep:embassy-executor", "embassy-executor?/arch-cortex-m" ]
 | 
				
			||||||
low-power-debug-with-sleep = []
 | 
					low-power-debug-with-sleep = []
 | 
				
			||||||
embassy-executor = []
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Automatically generate `memory.x` file using [`stm32-metapac`](https://docs.rs/stm32-metapac/)
 | 
					## Automatically generate `memory.x` file using [`stm32-metapac`](https://docs.rs/stm32-metapac/)
 | 
				
			||||||
memory-x = ["stm32-metapac/memory-x"]
 | 
					memory-x = ["stm32-metapac/memory-x"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Enable nightly-only features
 | 
					 | 
				
			||||||
nightly = ["embedded-hal-1", "embedded-hal-async", "embedded-storage-async", "dep:embedded-io-async", "dep:embassy-usb-driver", "embassy-embedded-hal/nightly"]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Re-export stm32-metapac at `embassy_stm32::pac`.
 | 
					## Re-export stm32-metapac at `embassy_stm32::pac`.
 | 
				
			||||||
## This is unstable because semver-minor (non-breaking) releases of embassy-stm32 may major-bump (breaking) the stm32-metapac version.
 | 
					## This is unstable because semver-minor (non-breaking) releases of embassy-stm32 may major-bump (breaking) the stm32-metapac version.
 | 
				
			||||||
## If this is an issue for you, you're encouraged to directly depend on a fixed version of the PAC.
 | 
					## If this is an issue for you, you're encouraged to directly depend on a fixed version of the PAC.
 | 
				
			||||||
## There are no plans to make this stable.
 | 
					## There are no plans to make this stable.
 | 
				
			||||||
unstable-pac = []
 | 
					unstable-pac = []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Implement embedded-hal 1.0 alpha traits.
 | 
					 | 
				
			||||||
## Implement embedded-hal-async traits if `nightly` is set as well.
 | 
					 | 
				
			||||||
unstable-traits = ["embedded-hal-1", "dep:embedded-hal-nb"]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#! ## Time
 | 
					#! ## Time
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Enables additional driver features that depend on embassy-time
 | 
					## Enables additional driver features that depend on embassy-time
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,3 +1,4 @@
 | 
				
			|||||||
 | 
					use core::convert::Infallible;
 | 
				
			||||||
use core::future::Future;
 | 
					use core::future::Future;
 | 
				
			||||||
use core::marker::PhantomData;
 | 
					use core::marker::PhantomData;
 | 
				
			||||||
use core::pin::Pin;
 | 
					use core::pin::Pin;
 | 
				
			||||||
@@ -137,11 +138,6 @@ impl<'d, T: GpioPin> ExtiInput<'d, T> {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
mod eh02 {
 | 
					 | 
				
			||||||
    use core::convert::Infallible;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    use super::*;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
impl<'d, T: GpioPin> embedded_hal_02::digital::v2::InputPin for ExtiInput<'d, T> {
 | 
					impl<'d, T: GpioPin> embedded_hal_02::digital::v2::InputPin for ExtiInput<'d, T> {
 | 
				
			||||||
    type Error = Infallible;
 | 
					    type Error = Infallible;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -153,13 +149,6 @@ mod eh02 {
 | 
				
			|||||||
        Ok(self.is_low())
 | 
					        Ok(self.is_low())
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#[cfg(feature = "unstable-traits")]
 | 
					 | 
				
			||||||
mod eh1 {
 | 
					 | 
				
			||||||
    use core::convert::Infallible;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    use super::*;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl<'d, T: GpioPin> embedded_hal_1::digital::ErrorType for ExtiInput<'d, T> {
 | 
					impl<'d, T: GpioPin> embedded_hal_1::digital::ErrorType for ExtiInput<'d, T> {
 | 
				
			||||||
    type Error = Infallible;
 | 
					    type Error = Infallible;
 | 
				
			||||||
@@ -174,11 +163,6 @@ mod eh1 {
 | 
				
			|||||||
        Ok(self.is_low())
 | 
					        Ok(self.is_low())
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
#[cfg(all(feature = "unstable-traits", feature = "nightly"))]
 | 
					 | 
				
			||||||
mod eha {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    use super::*;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl<'d, T: GpioPin> embedded_hal_async::digital::Wait for ExtiInput<'d, T> {
 | 
					impl<'d, T: GpioPin> embedded_hal_async::digital::Wait for ExtiInput<'d, T> {
 | 
				
			||||||
    async fn wait_for_high(&mut self) -> Result<(), Self::Error> {
 | 
					    async fn wait_for_high(&mut self) -> Result<(), Self::Error> {
 | 
				
			||||||
@@ -206,7 +190,6 @@ mod eha {
 | 
				
			|||||||
        Ok(())
 | 
					        Ok(())
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[must_use = "futures do nothing unless you `.await` or poll them"]
 | 
					#[must_use = "futures do nothing unless you `.await` or poll them"]
 | 
				
			||||||
struct ExtiInputFuture<'a> {
 | 
					struct ExtiInputFuture<'a> {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -55,7 +55,6 @@ impl interrupt::typelevel::Handler<crate::interrupt::typelevel::FLASH> for Inter
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
impl embedded_storage_async::nor_flash::ReadNorFlash for Flash<'_, Async> {
 | 
					impl embedded_storage_async::nor_flash::ReadNorFlash for Flash<'_, Async> {
 | 
				
			||||||
    const READ_SIZE: usize = super::READ_SIZE;
 | 
					    const READ_SIZE: usize = super::READ_SIZE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -68,7 +67,6 @@ impl embedded_storage_async::nor_flash::ReadNorFlash for Flash<'_, Async> {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
impl embedded_storage_async::nor_flash::NorFlash for Flash<'_, Async> {
 | 
					impl embedded_storage_async::nor_flash::NorFlash for Flash<'_, Async> {
 | 
				
			||||||
    const WRITE_SIZE: usize = WRITE_SIZE;
 | 
					    const WRITE_SIZE: usize = WRITE_SIZE;
 | 
				
			||||||
    const ERASE_SIZE: usize = super::MAX_ERASE_SIZE;
 | 
					    const ERASE_SIZE: usize = super::MAX_ERASE_SIZE;
 | 
				
			||||||
@@ -158,7 +156,6 @@ foreach_flash_region! {
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
                impl embedded_storage_async::nor_flash::ReadNorFlash for crate::_generated::flash_regions::$type_name<'_, Async> {
 | 
					                impl embedded_storage_async::nor_flash::ReadNorFlash for crate::_generated::flash_regions::$type_name<'_, Async> {
 | 
				
			||||||
            const READ_SIZE: usize = super::READ_SIZE;
 | 
					            const READ_SIZE: usize = super::READ_SIZE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -171,7 +168,6 @@ foreach_flash_region! {
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
                impl embedded_storage_async::nor_flash::NorFlash for crate::_generated::flash_regions::$type_name<'_, Async> {
 | 
					                impl embedded_storage_async::nor_flash::NorFlash for crate::_generated::flash_regions::$type_name<'_, Async> {
 | 
				
			||||||
            const WRITE_SIZE: usize = $write_size;
 | 
					            const WRITE_SIZE: usize = $write_size;
 | 
				
			||||||
            const ERASE_SIZE: usize = $erase_size;
 | 
					            const ERASE_SIZE: usize = $erase_size;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -142,7 +142,6 @@ mod alt_regions {
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            #[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
            impl embedded_storage_async::nor_flash::ReadNorFlash for $type_name<'_, Async> {
 | 
					            impl embedded_storage_async::nor_flash::ReadNorFlash for $type_name<'_, Async> {
 | 
				
			||||||
                const READ_SIZE: usize = crate::flash::READ_SIZE;
 | 
					                const READ_SIZE: usize = crate::flash::READ_SIZE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -155,7 +154,6 @@ mod alt_regions {
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            #[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
            impl embedded_storage_async::nor_flash::NorFlash for $type_name<'_, Async> {
 | 
					            impl embedded_storage_async::nor_flash::NorFlash for $type_name<'_, Async> {
 | 
				
			||||||
                const WRITE_SIZE: usize = $region.write_size as usize;
 | 
					                const WRITE_SIZE: usize = $region.write_size as usize;
 | 
				
			||||||
                const ERASE_SIZE: usize = $region.erase_size as usize;
 | 
					                const ERASE_SIZE: usize = $region.erase_size as usize;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -772,12 +772,7 @@ pub(crate) unsafe fn init(_cs: CriticalSection) {
 | 
				
			|||||||
    });
 | 
					    });
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
mod eh02 {
 | 
					impl<'d, T: Pin> embedded_hal_02::digital::v2::InputPin for Input<'d, T> {
 | 
				
			||||||
    use embedded_hal_02::digital::v2::{InputPin, OutputPin, StatefulOutputPin, ToggleableOutputPin};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    use super::*;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    impl<'d, T: Pin> InputPin for Input<'d, T> {
 | 
					 | 
				
			||||||
    type Error = Infallible;
 | 
					    type Error = Infallible;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #[inline]
 | 
					    #[inline]
 | 
				
			||||||
@@ -791,7 +786,7 @@ mod eh02 {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    impl<'d, T: Pin> OutputPin for Output<'d, T> {
 | 
					impl<'d, T: Pin> embedded_hal_02::digital::v2::OutputPin for Output<'d, T> {
 | 
				
			||||||
    type Error = Infallible;
 | 
					    type Error = Infallible;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #[inline]
 | 
					    #[inline]
 | 
				
			||||||
@@ -807,7 +802,7 @@ mod eh02 {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    impl<'d, T: Pin> StatefulOutputPin for Output<'d, T> {
 | 
					impl<'d, T: Pin> embedded_hal_02::digital::v2::StatefulOutputPin for Output<'d, T> {
 | 
				
			||||||
    #[inline]
 | 
					    #[inline]
 | 
				
			||||||
    fn is_set_high(&self) -> Result<bool, Self::Error> {
 | 
					    fn is_set_high(&self) -> Result<bool, Self::Error> {
 | 
				
			||||||
        Ok(self.is_set_high())
 | 
					        Ok(self.is_set_high())
 | 
				
			||||||
@@ -820,7 +815,7 @@ mod eh02 {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    impl<'d, T: Pin> ToggleableOutputPin for Output<'d, T> {
 | 
					impl<'d, T: Pin> embedded_hal_02::digital::v2::ToggleableOutputPin for Output<'d, T> {
 | 
				
			||||||
    type Error = Infallible;
 | 
					    type Error = Infallible;
 | 
				
			||||||
    #[inline]
 | 
					    #[inline]
 | 
				
			||||||
    fn toggle(&mut self) -> Result<(), Self::Error> {
 | 
					    fn toggle(&mut self) -> Result<(), Self::Error> {
 | 
				
			||||||
@@ -829,7 +824,7 @@ mod eh02 {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    impl<'d, T: Pin> OutputPin for OutputOpenDrain<'d, T> {
 | 
					impl<'d, T: Pin> embedded_hal_02::digital::v2::OutputPin for OutputOpenDrain<'d, T> {
 | 
				
			||||||
    type Error = Infallible;
 | 
					    type Error = Infallible;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #[inline]
 | 
					    #[inline]
 | 
				
			||||||
@@ -845,7 +840,7 @@ mod eh02 {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    impl<'d, T: Pin> StatefulOutputPin for OutputOpenDrain<'d, T> {
 | 
					impl<'d, T: Pin> embedded_hal_02::digital::v2::StatefulOutputPin for OutputOpenDrain<'d, T> {
 | 
				
			||||||
    #[inline]
 | 
					    #[inline]
 | 
				
			||||||
    fn is_set_high(&self) -> Result<bool, Self::Error> {
 | 
					    fn is_set_high(&self) -> Result<bool, Self::Error> {
 | 
				
			||||||
        Ok(self.is_set_high())
 | 
					        Ok(self.is_set_high())
 | 
				
			||||||
@@ -858,7 +853,7 @@ mod eh02 {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    impl<'d, T: Pin> ToggleableOutputPin for OutputOpenDrain<'d, T> {
 | 
					impl<'d, T: Pin> embedded_hal_02::digital::v2::ToggleableOutputPin for OutputOpenDrain<'d, T> {
 | 
				
			||||||
    type Error = Infallible;
 | 
					    type Error = Infallible;
 | 
				
			||||||
    #[inline]
 | 
					    #[inline]
 | 
				
			||||||
    fn toggle(&mut self) -> Result<(), Self::Error> {
 | 
					    fn toggle(&mut self) -> Result<(), Self::Error> {
 | 
				
			||||||
@@ -867,7 +862,7 @@ mod eh02 {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    impl<'d, T: Pin> InputPin for Flex<'d, T> {
 | 
					impl<'d, T: Pin> embedded_hal_02::digital::v2::InputPin for Flex<'d, T> {
 | 
				
			||||||
    type Error = Infallible;
 | 
					    type Error = Infallible;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #[inline]
 | 
					    #[inline]
 | 
				
			||||||
@@ -881,7 +876,7 @@ mod eh02 {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    impl<'d, T: Pin> OutputPin for Flex<'d, T> {
 | 
					impl<'d, T: Pin> embedded_hal_02::digital::v2::OutputPin for Flex<'d, T> {
 | 
				
			||||||
    type Error = Infallible;
 | 
					    type Error = Infallible;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #[inline]
 | 
					    #[inline]
 | 
				
			||||||
@@ -897,7 +892,7 @@ mod eh02 {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    impl<'d, T: Pin> StatefulOutputPin for Flex<'d, T> {
 | 
					impl<'d, T: Pin> embedded_hal_02::digital::v2::StatefulOutputPin for Flex<'d, T> {
 | 
				
			||||||
    #[inline]
 | 
					    #[inline]
 | 
				
			||||||
    fn is_set_high(&self) -> Result<bool, Self::Error> {
 | 
					    fn is_set_high(&self) -> Result<bool, Self::Error> {
 | 
				
			||||||
        Ok(self.is_set_high())
 | 
					        Ok(self.is_set_high())
 | 
				
			||||||
@@ -910,7 +905,7 @@ mod eh02 {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    impl<'d, T: Pin> ToggleableOutputPin for Flex<'d, T> {
 | 
					impl<'d, T: Pin> embedded_hal_02::digital::v2::ToggleableOutputPin for Flex<'d, T> {
 | 
				
			||||||
    type Error = Infallible;
 | 
					    type Error = Infallible;
 | 
				
			||||||
    #[inline]
 | 
					    #[inline]
 | 
				
			||||||
    fn toggle(&mut self) -> Result<(), Self::Error> {
 | 
					    fn toggle(&mut self) -> Result<(), Self::Error> {
 | 
				
			||||||
@@ -918,19 +913,12 @@ mod eh02 {
 | 
				
			|||||||
        Ok(())
 | 
					        Ok(())
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(feature = "unstable-traits")]
 | 
					impl<'d, T: Pin> embedded_hal_1::digital::ErrorType for Input<'d, T> {
 | 
				
			||||||
mod eh1 {
 | 
					 | 
				
			||||||
    use embedded_hal_1::digital::{ErrorType, InputPin, OutputPin, StatefulOutputPin, ToggleableOutputPin};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    use super::*;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    impl<'d, T: Pin> ErrorType for Input<'d, T> {
 | 
					 | 
				
			||||||
    type Error = Infallible;
 | 
					    type Error = Infallible;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    impl<'d, T: Pin> InputPin for Input<'d, T> {
 | 
					impl<'d, T: Pin> embedded_hal_1::digital::InputPin for Input<'d, T> {
 | 
				
			||||||
    #[inline]
 | 
					    #[inline]
 | 
				
			||||||
    fn is_high(&self) -> Result<bool, Self::Error> {
 | 
					    fn is_high(&self) -> Result<bool, Self::Error> {
 | 
				
			||||||
        Ok(self.is_high())
 | 
					        Ok(self.is_high())
 | 
				
			||||||
@@ -942,11 +930,11 @@ mod eh1 {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    impl<'d, T: Pin> ErrorType for Output<'d, T> {
 | 
					impl<'d, T: Pin> embedded_hal_1::digital::ErrorType for Output<'d, T> {
 | 
				
			||||||
    type Error = Infallible;
 | 
					    type Error = Infallible;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    impl<'d, T: Pin> OutputPin for Output<'d, T> {
 | 
					impl<'d, T: Pin> embedded_hal_1::digital::OutputPin for Output<'d, T> {
 | 
				
			||||||
    #[inline]
 | 
					    #[inline]
 | 
				
			||||||
    fn set_high(&mut self) -> Result<(), Self::Error> {
 | 
					    fn set_high(&mut self) -> Result<(), Self::Error> {
 | 
				
			||||||
        Ok(self.set_high())
 | 
					        Ok(self.set_high())
 | 
				
			||||||
@@ -958,7 +946,7 @@ mod eh1 {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    impl<'d, T: Pin> StatefulOutputPin for Output<'d, T> {
 | 
					impl<'d, T: Pin> embedded_hal_1::digital::StatefulOutputPin for Output<'d, T> {
 | 
				
			||||||
    #[inline]
 | 
					    #[inline]
 | 
				
			||||||
    fn is_set_high(&self) -> Result<bool, Self::Error> {
 | 
					    fn is_set_high(&self) -> Result<bool, Self::Error> {
 | 
				
			||||||
        Ok(self.is_set_high())
 | 
					        Ok(self.is_set_high())
 | 
				
			||||||
@@ -971,18 +959,18 @@ mod eh1 {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    impl<'d, T: Pin> ToggleableOutputPin for Output<'d, T> {
 | 
					impl<'d, T: Pin> embedded_hal_1::digital::ToggleableOutputPin for Output<'d, T> {
 | 
				
			||||||
    #[inline]
 | 
					    #[inline]
 | 
				
			||||||
    fn toggle(&mut self) -> Result<(), Self::Error> {
 | 
					    fn toggle(&mut self) -> Result<(), Self::Error> {
 | 
				
			||||||
        Ok(self.toggle())
 | 
					        Ok(self.toggle())
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    impl<'d, T: Pin> ErrorType for OutputOpenDrain<'d, T> {
 | 
					impl<'d, T: Pin> embedded_hal_1::digital::ErrorType for OutputOpenDrain<'d, T> {
 | 
				
			||||||
    type Error = Infallible;
 | 
					    type Error = Infallible;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    impl<'d, T: Pin> InputPin for OutputOpenDrain<'d, T> {
 | 
					impl<'d, T: Pin> embedded_hal_1::digital::InputPin for OutputOpenDrain<'d, T> {
 | 
				
			||||||
    #[inline]
 | 
					    #[inline]
 | 
				
			||||||
    fn is_high(&self) -> Result<bool, Self::Error> {
 | 
					    fn is_high(&self) -> Result<bool, Self::Error> {
 | 
				
			||||||
        Ok(self.is_high())
 | 
					        Ok(self.is_high())
 | 
				
			||||||
@@ -994,7 +982,7 @@ mod eh1 {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    impl<'d, T: Pin> OutputPin for OutputOpenDrain<'d, T> {
 | 
					impl<'d, T: Pin> embedded_hal_1::digital::OutputPin for OutputOpenDrain<'d, T> {
 | 
				
			||||||
    #[inline]
 | 
					    #[inline]
 | 
				
			||||||
    fn set_high(&mut self) -> Result<(), Self::Error> {
 | 
					    fn set_high(&mut self) -> Result<(), Self::Error> {
 | 
				
			||||||
        Ok(self.set_high())
 | 
					        Ok(self.set_high())
 | 
				
			||||||
@@ -1006,7 +994,7 @@ mod eh1 {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    impl<'d, T: Pin> StatefulOutputPin for OutputOpenDrain<'d, T> {
 | 
					impl<'d, T: Pin> embedded_hal_1::digital::StatefulOutputPin for OutputOpenDrain<'d, T> {
 | 
				
			||||||
    #[inline]
 | 
					    #[inline]
 | 
				
			||||||
    fn is_set_high(&self) -> Result<bool, Self::Error> {
 | 
					    fn is_set_high(&self) -> Result<bool, Self::Error> {
 | 
				
			||||||
        Ok(self.is_set_high())
 | 
					        Ok(self.is_set_high())
 | 
				
			||||||
@@ -1019,14 +1007,14 @@ mod eh1 {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    impl<'d, T: Pin> ToggleableOutputPin for OutputOpenDrain<'d, T> {
 | 
					impl<'d, T: Pin> embedded_hal_1::digital::ToggleableOutputPin for OutputOpenDrain<'d, T> {
 | 
				
			||||||
    #[inline]
 | 
					    #[inline]
 | 
				
			||||||
    fn toggle(&mut self) -> Result<(), Self::Error> {
 | 
					    fn toggle(&mut self) -> Result<(), Self::Error> {
 | 
				
			||||||
        Ok(self.toggle())
 | 
					        Ok(self.toggle())
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    impl<'d, T: Pin> InputPin for Flex<'d, T> {
 | 
					impl<'d, T: Pin> embedded_hal_1::digital::InputPin for Flex<'d, T> {
 | 
				
			||||||
    #[inline]
 | 
					    #[inline]
 | 
				
			||||||
    fn is_high(&self) -> Result<bool, Self::Error> {
 | 
					    fn is_high(&self) -> Result<bool, Self::Error> {
 | 
				
			||||||
        Ok(self.is_high())
 | 
					        Ok(self.is_high())
 | 
				
			||||||
@@ -1038,7 +1026,7 @@ mod eh1 {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    impl<'d, T: Pin> OutputPin for Flex<'d, T> {
 | 
					impl<'d, T: Pin> embedded_hal_1::digital::OutputPin for Flex<'d, T> {
 | 
				
			||||||
    #[inline]
 | 
					    #[inline]
 | 
				
			||||||
    fn set_high(&mut self) -> Result<(), Self::Error> {
 | 
					    fn set_high(&mut self) -> Result<(), Self::Error> {
 | 
				
			||||||
        Ok(self.set_high())
 | 
					        Ok(self.set_high())
 | 
				
			||||||
@@ -1050,18 +1038,18 @@ mod eh1 {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    impl<'d, T: Pin> ToggleableOutputPin for Flex<'d, T> {
 | 
					impl<'d, T: Pin> embedded_hal_1::digital::ToggleableOutputPin for Flex<'d, T> {
 | 
				
			||||||
    #[inline]
 | 
					    #[inline]
 | 
				
			||||||
    fn toggle(&mut self) -> Result<(), Self::Error> {
 | 
					    fn toggle(&mut self) -> Result<(), Self::Error> {
 | 
				
			||||||
        Ok(self.toggle())
 | 
					        Ok(self.toggle())
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    impl<'d, T: Pin> ErrorType for Flex<'d, T> {
 | 
					impl<'d, T: Pin> embedded_hal_1::digital::ErrorType for Flex<'d, T> {
 | 
				
			||||||
    type Error = Infallible;
 | 
					    type Error = Infallible;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    impl<'d, T: Pin> StatefulOutputPin for Flex<'d, T> {
 | 
					impl<'d, T: Pin> embedded_hal_1::digital::StatefulOutputPin for Flex<'d, T> {
 | 
				
			||||||
    #[inline]
 | 
					    #[inline]
 | 
				
			||||||
    fn is_set_high(&self) -> Result<bool, Self::Error> {
 | 
					    fn is_set_high(&self) -> Result<bool, Self::Error> {
 | 
				
			||||||
        Ok(self.is_set_high())
 | 
					        Ok(self.is_set_high())
 | 
				
			||||||
@@ -1073,7 +1061,6 @@ mod eh1 {
 | 
				
			|||||||
        Ok(self.is_set_low())
 | 
					        Ok(self.is_set_low())
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(feature = "unstable-pac")]
 | 
					#[cfg(feature = "unstable-pac")]
 | 
				
			||||||
pub mod low_level {
 | 
					pub mod low_level {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,6 +2,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use core::marker::PhantomData;
 | 
					use core::marker::PhantomData;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use crate::dma::NoDma;
 | 
				
			||||||
use crate::interrupt;
 | 
					use crate::interrupt;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg_attr(i2c_v1, path = "v1.rs")]
 | 
					#[cfg_attr(i2c_v1, path = "v1.rs")]
 | 
				
			||||||
@@ -97,9 +98,6 @@ foreach_peripheral!(
 | 
				
			|||||||
    };
 | 
					    };
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
mod eh02 {
 | 
					 | 
				
			||||||
    use super::*;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
impl<'d, T: Instance> embedded_hal_02::blocking::i2c::Read for I2c<'d, T> {
 | 
					impl<'d, T: Instance> embedded_hal_02::blocking::i2c::Read for I2c<'d, T> {
 | 
				
			||||||
    type Error = Error;
 | 
					    type Error = Error;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -123,12 +121,6 @@ mod eh02 {
 | 
				
			|||||||
        self.blocking_write_read(address, write, read)
 | 
					        self.blocking_write_read(address, write, read)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#[cfg(feature = "unstable-traits")]
 | 
					 | 
				
			||||||
mod eh1 {
 | 
					 | 
				
			||||||
    use super::*;
 | 
					 | 
				
			||||||
    use crate::dma::NoDma;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl embedded_hal_1::i2c::Error for Error {
 | 
					impl embedded_hal_1::i2c::Error for Error {
 | 
				
			||||||
    fn kind(&self) -> embedded_hal_1::i2c::ErrorKind {
 | 
					    fn kind(&self) -> embedded_hal_1::i2c::ErrorKind {
 | 
				
			||||||
@@ -171,11 +163,6 @@ mod eh1 {
 | 
				
			|||||||
        todo!();
 | 
					        todo!();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#[cfg(all(feature = "unstable-traits", feature = "nightly"))]
 | 
					 | 
				
			||||||
mod eha {
 | 
					 | 
				
			||||||
    use super::*;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl<'d, T: Instance, TXDMA: TxDma<T>, RXDMA: RxDma<T>> embedded_hal_async::i2c::I2c for I2c<'d, T, TXDMA, RXDMA> {
 | 
					impl<'d, T: Instance, TXDMA: TxDma<T>, RXDMA: RxDma<T>> embedded_hal_async::i2c::I2c for I2c<'d, T, TXDMA, RXDMA> {
 | 
				
			||||||
    async fn read(&mut self, address: u8, read: &mut [u8]) -> Result<(), Self::Error> {
 | 
					    async fn read(&mut self, address: u8, read: &mut [u8]) -> Result<(), Self::Error> {
 | 
				
			||||||
@@ -200,4 +187,3 @@ mod eha {
 | 
				
			|||||||
        todo!()
 | 
					        todo!()
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,5 @@
 | 
				
			|||||||
#![cfg_attr(not(test), no_std)]
 | 
					#![cfg_attr(not(test), no_std)]
 | 
				
			||||||
#![cfg_attr(feature = "nightly", feature(async_fn_in_trait, impl_trait_projections))]
 | 
					#![allow(async_fn_in_trait)]
 | 
				
			||||||
#![cfg_attr(feature = "nightly", allow(stable_features, unknown_lints, async_fn_in_trait))]
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
//! ## Feature flags
 | 
					//! ## Feature flags
 | 
				
			||||||
#![doc = document_features::document_features!(feature_label = r#"<span class="stab portability"><code>{feature}</code></span>"#)]
 | 
					#![doc = document_features::document_features!(feature_label = r#"<span class="stab portability"><code>{feature}</code></span>"#)]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -848,9 +848,6 @@ fn transfer_word<W: Word>(regs: Regs, tx_word: W) -> Result<W, Error> {
 | 
				
			|||||||
    Ok(rx_word)
 | 
					    Ok(rx_word)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
mod eh02 {
 | 
					 | 
				
			||||||
    use super::*;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Note: It is not possible to impl these traits generically in embedded-hal 0.2 due to a conflict with
 | 
					// Note: It is not possible to impl these traits generically in embedded-hal 0.2 due to a conflict with
 | 
				
			||||||
// some marker traits. For details, see https://github.com/rust-embedded/embedded-hal/pull/289
 | 
					// some marker traits. For details, see https://github.com/rust-embedded/embedded-hal/pull/289
 | 
				
			||||||
macro_rules! impl_blocking {
 | 
					macro_rules! impl_blocking {
 | 
				
			||||||
@@ -876,11 +873,6 @@ mod eh02 {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
impl_blocking!(u8);
 | 
					impl_blocking!(u8);
 | 
				
			||||||
impl_blocking!(u16);
 | 
					impl_blocking!(u16);
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#[cfg(feature = "unstable-traits")]
 | 
					 | 
				
			||||||
mod eh1 {
 | 
					 | 
				
			||||||
    use super::*;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl<'d, T: Instance, Tx, Rx> embedded_hal_1::spi::ErrorType for Spi<'d, T, Tx, Rx> {
 | 
					impl<'d, T: Instance, Tx, Rx> embedded_hal_1::spi::ErrorType for Spi<'d, T, Tx, Rx> {
 | 
				
			||||||
    type Error = Error;
 | 
					    type Error = Error;
 | 
				
			||||||
@@ -918,11 +910,6 @@ mod eh1 {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#[cfg(all(feature = "unstable-traits", feature = "nightly"))]
 | 
					 | 
				
			||||||
mod eha {
 | 
					 | 
				
			||||||
    use super::*;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl<'d, T: Instance, Tx: TxDma<T>, Rx: RxDma<T>, W: Word> embedded_hal_async::spi::SpiBus<W> for Spi<'d, T, Tx, Rx> {
 | 
					impl<'d, T: Instance, Tx: TxDma<T>, Rx: RxDma<T>, W: Word> embedded_hal_async::spi::SpiBus<W> for Spi<'d, T, Tx, Rx> {
 | 
				
			||||||
    async fn flush(&mut self) -> Result<(), Self::Error> {
 | 
					    async fn flush(&mut self) -> Result<(), Self::Error> {
 | 
				
			||||||
@@ -945,7 +932,6 @@ mod eha {
 | 
				
			|||||||
        self.transfer_in_place(words).await
 | 
					        self.transfer_in_place(words).await
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub(crate) mod sealed {
 | 
					pub(crate) mod sealed {
 | 
				
			||||||
    use super::*;
 | 
					    use super::*;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -560,9 +560,6 @@ impl<'d, T: BasicInstance> embedded_io::Write for BufferedUartTx<'d, T> {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
mod eh02 {
 | 
					 | 
				
			||||||
    use super::*;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
impl<'d, T: BasicInstance> embedded_hal_02::serial::Read<u8> for BufferedUartRx<'d, T> {
 | 
					impl<'d, T: BasicInstance> embedded_hal_02::serial::Read<u8> for BufferedUartRx<'d, T> {
 | 
				
			||||||
    type Error = Error;
 | 
					    type Error = Error;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -636,11 +633,6 @@ mod eh02 {
 | 
				
			|||||||
        self.tx.blocking_flush()
 | 
					        self.tx.blocking_flush()
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#[cfg(feature = "unstable-traits")]
 | 
					 | 
				
			||||||
mod eh1 {
 | 
					 | 
				
			||||||
    use super::*;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl<'d, T: BasicInstance> embedded_hal_nb::serial::ErrorType for BufferedUart<'d, T> {
 | 
					impl<'d, T: BasicInstance> embedded_hal_nb::serial::ErrorType for BufferedUart<'d, T> {
 | 
				
			||||||
    type Error = Error;
 | 
					    type Error = Error;
 | 
				
			||||||
@@ -685,47 +677,3 @@ mod eh1 {
 | 
				
			|||||||
        self.tx.blocking_flush().map_err(nb::Error::Other)
 | 
					        self.tx.blocking_flush().map_err(nb::Error::Other)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#[cfg(all(
 | 
					 | 
				
			||||||
    feature = "unstable-traits",
 | 
					 | 
				
			||||||
    feature = "nightly",
 | 
					 | 
				
			||||||
    feature = "_todo_embedded_hal_serial"
 | 
					 | 
				
			||||||
))]
 | 
					 | 
				
			||||||
mod eha {
 | 
					 | 
				
			||||||
    use core::future::Future;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    use super::*;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    impl<'d, T: BasicInstance> embedded_hal_async::serial::Write for BufferedUartTx<'d, T> {
 | 
					 | 
				
			||||||
        async fn write(&mut self, buf: &[u8]) -> Result<(), Self::Error> {
 | 
					 | 
				
			||||||
            Self::write(buf)
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        async fn flush(&mut self) -> Result<(), Self::Error> {
 | 
					 | 
				
			||||||
            Self::flush()
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    impl<'d, T: BasicInstance> embedded_hal_async::serial::Read for BufferedUartRx<'d, T> {
 | 
					 | 
				
			||||||
        async fn read(&mut self, buf: &mut [u8]) -> Result<(), Self::Error> {
 | 
					 | 
				
			||||||
            Self::read(buf)
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    impl<'d, T: BasicInstance> embedded_hal_async::serial::Write for BufferedUart<'d, T> {
 | 
					 | 
				
			||||||
        async fn write(&mut self, buf: &[u8]) -> Result<(), Self::Error> {
 | 
					 | 
				
			||||||
            self.tx.write(buf)
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        async fn flush(&mut self) -> Result<(), Self::Error> {
 | 
					 | 
				
			||||||
            self.tx.flush()
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    impl<'d, T: BasicInstance> embedded_hal_async::serial::Read for BufferedUart<'d, T> {
 | 
					 | 
				
			||||||
        async fn read(&mut self, buf: &mut [u8]) -> Result<(), Self::Error> {
 | 
					 | 
				
			||||||
            self.rx.read(buf)
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1010,9 +1010,6 @@ fn configure(
 | 
				
			|||||||
    Ok(())
 | 
					    Ok(())
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
mod eh02 {
 | 
					 | 
				
			||||||
    use super::*;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
impl<'d, T: BasicInstance, RxDma> embedded_hal_02::serial::Read<u8> for UartRx<'d, T, RxDma> {
 | 
					impl<'d, T: BasicInstance, RxDma> embedded_hal_02::serial::Read<u8> for UartRx<'d, T, RxDma> {
 | 
				
			||||||
    type Error = Error;
 | 
					    type Error = Error;
 | 
				
			||||||
    fn read(&mut self) -> Result<u8, nb::Error<Self::Error>> {
 | 
					    fn read(&mut self) -> Result<u8, nb::Error<Self::Error>> {
 | 
				
			||||||
@@ -1046,11 +1043,6 @@ mod eh02 {
 | 
				
			|||||||
        self.blocking_flush()
 | 
					        self.blocking_flush()
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#[cfg(feature = "unstable-traits")]
 | 
					 | 
				
			||||||
mod eh1 {
 | 
					 | 
				
			||||||
    use super::*;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl embedded_hal_nb::serial::Error for Error {
 | 
					impl embedded_hal_nb::serial::Error for Error {
 | 
				
			||||||
    fn kind(&self) -> embedded_hal_nb::serial::ErrorKind {
 | 
					    fn kind(&self) -> embedded_hal_nb::serial::ErrorKind {
 | 
				
			||||||
@@ -1107,7 +1099,6 @@ mod eh1 {
 | 
				
			|||||||
        self.blocking_flush().map_err(nb::Error::Other)
 | 
					        self.blocking_flush().map_err(nb::Error::Other)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl embedded_io::Error for Error {
 | 
					impl embedded_io::Error for Error {
 | 
				
			||||||
    fn kind(&self) -> embedded_io::ErrorKind {
 | 
					    fn kind(&self) -> embedded_io::ErrorKind {
 | 
				
			||||||
@@ -1159,14 +1150,10 @@ where
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(all(feature = "unstable-traits", feature = "nightly"))]
 | 
					 | 
				
			||||||
mod eio {
 | 
					 | 
				
			||||||
    use super::*;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
impl<T, TxDma, RxDma> embedded_io_async::Write for Uart<'_, T, TxDma, RxDma>
 | 
					impl<T, TxDma, RxDma> embedded_io_async::Write for Uart<'_, T, TxDma, RxDma>
 | 
				
			||||||
where
 | 
					where
 | 
				
			||||||
    T: BasicInstance,
 | 
					    T: BasicInstance,
 | 
				
			||||||
        TxDma: super::TxDma<T>,
 | 
					    TxDma: self::TxDma<T>,
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    async fn write(&mut self, buf: &[u8]) -> Result<usize, Self::Error> {
 | 
					    async fn write(&mut self, buf: &[u8]) -> Result<usize, Self::Error> {
 | 
				
			||||||
        self.write(buf).await?;
 | 
					        self.write(buf).await?;
 | 
				
			||||||
@@ -1181,7 +1168,7 @@ mod eio {
 | 
				
			|||||||
impl<T, TxDma> embedded_io_async::Write for UartTx<'_, T, TxDma>
 | 
					impl<T, TxDma> embedded_io_async::Write for UartTx<'_, T, TxDma>
 | 
				
			||||||
where
 | 
					where
 | 
				
			||||||
    T: BasicInstance,
 | 
					    T: BasicInstance,
 | 
				
			||||||
        TxDma: super::TxDma<T>,
 | 
					    TxDma: self::TxDma<T>,
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    async fn write(&mut self, buf: &[u8]) -> Result<usize, Self::Error> {
 | 
					    async fn write(&mut self, buf: &[u8]) -> Result<usize, Self::Error> {
 | 
				
			||||||
        self.write(buf).await?;
 | 
					        self.write(buf).await?;
 | 
				
			||||||
@@ -1192,14 +1179,10 @@ mod eio {
 | 
				
			|||||||
        self.blocking_flush()
 | 
					        self.blocking_flush()
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
pub use buffered::*;
 | 
					pub use buffered::*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
pub use crate::usart::buffered::InterruptHandler as BufferedInterruptHandler;
 | 
					pub use crate::usart::buffered::InterruptHandler as BufferedInterruptHandler;
 | 
				
			||||||
#[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
mod buffered;
 | 
					mod buffered;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(not(gpdma))]
 | 
					#[cfg(not(gpdma))]
 | 
				
			||||||
@@ -1284,7 +1267,6 @@ pub(crate) mod sealed {
 | 
				
			|||||||
        fn regs() -> Regs;
 | 
					        fn regs() -> Regs;
 | 
				
			||||||
        fn state() -> &'static State;
 | 
					        fn state() -> &'static State;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
        fn buffered_state() -> &'static buffered::State;
 | 
					        fn buffered_state() -> &'static buffered::State;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1322,7 +1304,6 @@ macro_rules! impl_usart {
 | 
				
			|||||||
                &STATE
 | 
					                &STATE
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            #[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
            fn buffered_state() -> &'static buffered::State {
 | 
					            fn buffered_state() -> &'static buffered::State {
 | 
				
			||||||
                static STATE: buffered::State = buffered::State::new();
 | 
					                static STATE: buffered::State = buffered::State::new();
 | 
				
			||||||
                &STATE
 | 
					                &STATE
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,7 +7,7 @@ use embassy_embedded_hal::SetConfig;
 | 
				
			|||||||
use embassy_hal_internal::PeripheralRef;
 | 
					use embassy_hal_internal::PeripheralRef;
 | 
				
			||||||
use futures::future::{select, Either};
 | 
					use futures::future::{select, Either};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use super::{clear_interrupt_flags, rdr, reconfigure, sr, BasicInstance, Config, ConfigError, Error, UartRx};
 | 
					use super::{clear_interrupt_flags, rdr, reconfigure, sr, BasicInstance, Config, ConfigError, Error, RxDma, UartRx};
 | 
				
			||||||
use crate::dma::ReadableRingBuffer;
 | 
					use crate::dma::ReadableRingBuffer;
 | 
				
			||||||
use crate::usart::{Regs, Sr};
 | 
					use crate::usart::{Regs, Sr};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -240,14 +240,7 @@ fn clear_idle_flag(r: Regs) -> Sr {
 | 
				
			|||||||
    sr
 | 
					    sr
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(all(feature = "unstable-traits", feature = "nightly"))]
 | 
					impl<T, Rx> embedded_io_async::ErrorType for RingBufferedUartRx<'_, T, Rx>
 | 
				
			||||||
mod eio {
 | 
					 | 
				
			||||||
    use embedded_io_async::{ErrorType, Read};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    use super::RingBufferedUartRx;
 | 
					 | 
				
			||||||
    use crate::usart::{BasicInstance, Error, RxDma};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    impl<T, Rx> ErrorType for RingBufferedUartRx<'_, T, Rx>
 | 
					 | 
				
			||||||
where
 | 
					where
 | 
				
			||||||
    T: BasicInstance,
 | 
					    T: BasicInstance,
 | 
				
			||||||
    Rx: RxDma<T>,
 | 
					    Rx: RxDma<T>,
 | 
				
			||||||
@@ -255,7 +248,7 @@ mod eio {
 | 
				
			|||||||
    type Error = Error;
 | 
					    type Error = Error;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    impl<T, Rx> Read for RingBufferedUartRx<'_, T, Rx>
 | 
					impl<T, Rx> embedded_io_async::Read for RingBufferedUartRx<'_, T, Rx>
 | 
				
			||||||
where
 | 
					where
 | 
				
			||||||
    T: BasicInstance,
 | 
					    T: BasicInstance,
 | 
				
			||||||
    Rx: RxDma<T>,
 | 
					    Rx: RxDma<T>,
 | 
				
			||||||
@@ -264,4 +257,3 @@ mod eio {
 | 
				
			|||||||
        self.read(buf).await
 | 
					        self.read(buf).await
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,9 +1,7 @@
 | 
				
			|||||||
use crate::interrupt;
 | 
					use crate::interrupt;
 | 
				
			||||||
use crate::rcc::RccPeripheral;
 | 
					use crate::rcc::RccPeripheral;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
mod usb;
 | 
					mod usb;
 | 
				
			||||||
#[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
pub use usb::*;
 | 
					pub use usb::*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub(crate) mod sealed {
 | 
					pub(crate) mod sealed {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,13 +1,10 @@
 | 
				
			|||||||
use crate::rcc::RccPeripheral;
 | 
					use crate::rcc::RccPeripheral;
 | 
				
			||||||
use crate::{interrupt, peripherals};
 | 
					use crate::{interrupt, peripherals};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
mod usb;
 | 
					mod usb;
 | 
				
			||||||
#[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
pub use usb::*;
 | 
					pub use usb::*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Using Instance::ENDPOINT_COUNT requires feature(const_generic_expr) so just define maximum eps
 | 
					// Using Instance::ENDPOINT_COUNT requires feature(const_generic_expr) so just define maximum eps
 | 
				
			||||||
#[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
const MAX_EP_COUNT: usize = 9;
 | 
					const MAX_EP_COUNT: usize = 9;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub(crate) mod sealed {
 | 
					pub(crate) mod sealed {
 | 
				
			||||||
@@ -17,7 +14,6 @@ pub(crate) mod sealed {
 | 
				
			|||||||
        const ENDPOINT_COUNT: usize;
 | 
					        const ENDPOINT_COUNT: usize;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        fn regs() -> crate::pac::otg::Otg;
 | 
					        fn regs() -> crate::pac::otg::Otg;
 | 
				
			||||||
        #[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
        fn state() -> &'static super::State<{ super::MAX_EP_COUNT }>;
 | 
					        fn state() -> &'static super::State<{ super::MAX_EP_COUNT }>;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -99,7 +95,6 @@ foreach_interrupt!(
 | 
				
			|||||||
                crate::pac::USB_OTG_FS
 | 
					                crate::pac::USB_OTG_FS
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            #[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
                        fn state() -> &'static State<MAX_EP_COUNT> {
 | 
					                        fn state() -> &'static State<MAX_EP_COUNT> {
 | 
				
			||||||
                static STATE: State<MAX_EP_COUNT> = State::new();
 | 
					                static STATE: State<MAX_EP_COUNT> = State::new();
 | 
				
			||||||
                &STATE
 | 
					                &STATE
 | 
				
			||||||
@@ -151,7 +146,6 @@ foreach_interrupt!(
 | 
				
			|||||||
                unsafe { crate::pac::otg::Otg::from_ptr(crate::pac::USB_OTG_HS.as_ptr()) }
 | 
					                unsafe { crate::pac::otg::Otg::from_ptr(crate::pac::USB_OTG_HS.as_ptr()) }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            #[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
                        fn state() -> &'static State<MAX_EP_COUNT> {
 | 
					                        fn state() -> &'static State<MAX_EP_COUNT> {
 | 
				
			||||||
                static STATE: State<MAX_EP_COUNT> = State::new();
 | 
					                static STATE: State<MAX_EP_COUNT> = State::new();
 | 
				
			||||||
                &STATE
 | 
					                &STATE
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -16,14 +16,9 @@ categories = [
 | 
				
			|||||||
[package.metadata.embassy_docs]
 | 
					[package.metadata.embassy_docs]
 | 
				
			||||||
src_base = "https://github.com/embassy-rs/embassy/blob/embassy-sync-v$VERSION/embassy-sync/src/"
 | 
					src_base = "https://github.com/embassy-rs/embassy/blob/embassy-sync-v$VERSION/embassy-sync/src/"
 | 
				
			||||||
src_base_git = "https://github.com/embassy-rs/embassy/blob/$COMMIT/embassy-sync/src/"
 | 
					src_base_git = "https://github.com/embassy-rs/embassy/blob/$COMMIT/embassy-sync/src/"
 | 
				
			||||||
features = ["nightly"]
 | 
					 | 
				
			||||||
target = "thumbv7em-none-eabi"
 | 
					target = "thumbv7em-none-eabi"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[package.metadata.docs.rs]
 | 
					 | 
				
			||||||
features = ["nightly"]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
[features]
 | 
					[features]
 | 
				
			||||||
nightly = ["dep:embedded-io-async"]
 | 
					 | 
				
			||||||
std = []
 | 
					std = []
 | 
				
			||||||
turbowakers = []
 | 
					turbowakers = []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -35,7 +30,7 @@ futures-util = { version = "0.3.17", default-features = false }
 | 
				
			|||||||
critical-section = "1.1"
 | 
					critical-section = "1.1"
 | 
				
			||||||
heapless = "0.8"
 | 
					heapless = "0.8"
 | 
				
			||||||
cfg-if = "1.0.0"
 | 
					cfg-if = "1.0.0"
 | 
				
			||||||
embedded-io-async = { version = "0.6.1", optional = true }
 | 
					embedded-io-async = { version = "0.6.1" }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[dev-dependencies]
 | 
					[dev-dependencies]
 | 
				
			||||||
futures-executor = { version = "0.3.17", features = [ "thread-pool" ] }
 | 
					futures-executor = { version = "0.3.17", features = [ "thread-pool" ] }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,21 @@
 | 
				
			|||||||
use std::env;
 | 
					use std::env;
 | 
				
			||||||
 | 
					use std::ffi::OsString;
 | 
				
			||||||
 | 
					use std::process::Command;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn main() {
 | 
					fn main() {
 | 
				
			||||||
 | 
					    println!("cargo:rerun-if-changed=build.rs");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let rustc = env::var_os("RUSTC").unwrap_or_else(|| OsString::from("rustc"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let output = Command::new(rustc)
 | 
				
			||||||
 | 
					        .arg("--version")
 | 
				
			||||||
 | 
					        .output()
 | 
				
			||||||
 | 
					        .expect("failed to run `rustc --version`");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if String::from_utf8_lossy(&output.stdout).contains("nightly") {
 | 
				
			||||||
 | 
					        println!("cargo:rustc-cfg=nightly");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let target = env::var("TARGET").unwrap();
 | 
					    let target = env::var("TARGET").unwrap();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if target.starts_with("thumbv6m-") {
 | 
					    if target.starts_with("thumbv6m-") {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,7 @@
 | 
				
			|||||||
#![cfg_attr(not(any(feature = "std", feature = "wasm")), no_std)]
 | 
					#![cfg_attr(not(any(feature = "std", feature = "wasm")), no_std)]
 | 
				
			||||||
#![cfg_attr(feature = "nightly", feature(async_fn_in_trait, impl_trait_projections))]
 | 
					#![cfg_attr(nightly, feature(async_fn_in_trait, impl_trait_projections))]
 | 
				
			||||||
#![cfg_attr(feature = "nightly", allow(stable_features, unknown_lints, async_fn_in_trait))]
 | 
					#![cfg_attr(nightly, allow(stable_features, unknown_lints))]
 | 
				
			||||||
 | 
					#![allow(async_fn_in_trait)]
 | 
				
			||||||
#![allow(clippy::new_without_default)]
 | 
					#![allow(clippy::new_without_default)]
 | 
				
			||||||
#![doc = include_str!("../README.md")]
 | 
					#![doc = include_str!("../README.md")]
 | 
				
			||||||
#![warn(missing_docs)]
 | 
					#![warn(missing_docs)]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,7 @@
 | 
				
			|||||||
//! Async byte stream pipe.
 | 
					//! Async byte stream pipe.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use core::cell::{RefCell, UnsafeCell};
 | 
					use core::cell::{RefCell, UnsafeCell};
 | 
				
			||||||
 | 
					use core::convert::Infallible;
 | 
				
			||||||
use core::future::Future;
 | 
					use core::future::Future;
 | 
				
			||||||
use core::ops::Range;
 | 
					use core::ops::Range;
 | 
				
			||||||
use core::pin::Pin;
 | 
					use core::pin::Pin;
 | 
				
			||||||
@@ -457,12 +458,6 @@ where
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(feature = "nightly")]
 | 
					 | 
				
			||||||
mod io_impls {
 | 
					 | 
				
			||||||
    use core::convert::Infallible;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    use super::*;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
impl<M: RawMutex, const N: usize> embedded_io_async::ErrorType for Pipe<M, N> {
 | 
					impl<M: RawMutex, const N: usize> embedded_io_async::ErrorType for Pipe<M, N> {
 | 
				
			||||||
    type Error = Infallible;
 | 
					    type Error = Infallible;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -536,7 +531,6 @@ mod io_impls {
 | 
				
			|||||||
        Ok(())
 | 
					        Ok(())
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(test)]
 | 
					#[cfg(test)]
 | 
				
			||||||
mod tests {
 | 
					mod tests {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,23 +22,16 @@ links = "embassy-time"
 | 
				
			|||||||
[package.metadata.embassy_docs]
 | 
					[package.metadata.embassy_docs]
 | 
				
			||||||
src_base = "https://github.com/embassy-rs/embassy/blob/embassy-time-v$VERSION/embassy-time/src/"
 | 
					src_base = "https://github.com/embassy-rs/embassy/blob/embassy-time-v$VERSION/embassy-time/src/"
 | 
				
			||||||
src_base_git = "https://github.com/embassy-rs/embassy/blob/$COMMIT/embassy-time/src/"
 | 
					src_base_git = "https://github.com/embassy-rs/embassy/blob/$COMMIT/embassy-time/src/"
 | 
				
			||||||
features = ["nightly", "defmt", "unstable-traits", "std"]
 | 
					features = ["defmt", "std"]
 | 
				
			||||||
target = "x86_64-unknown-linux-gnu"
 | 
					target = "x86_64-unknown-linux-gnu"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[package.metadata.docs.rs]
 | 
					[package.metadata.docs.rs]
 | 
				
			||||||
features = ["nightly", "defmt", "unstable-traits", "std"]
 | 
					features = ["defmt", "std"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[features]
 | 
					[features]
 | 
				
			||||||
std = ["tick-hz-1_000_000", "critical-section/std"]
 | 
					std = ["tick-hz-1_000_000", "critical-section/std"]
 | 
				
			||||||
wasm = ["dep:wasm-bindgen", "dep:js-sys", "dep:wasm-timer", "tick-hz-1_000_000"]
 | 
					wasm = ["dep:wasm-bindgen", "dep:js-sys", "dep:wasm-timer", "tick-hz-1_000_000"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Enable nightly-only features
 | 
					 | 
				
			||||||
nightly = ["embedded-hal-async"]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Implement embedded-hal 1.0 alpha and embedded-hal-async traits.
 | 
					 | 
				
			||||||
# Implement embedded-hal-async traits if `nightly` is set as well.
 | 
					 | 
				
			||||||
unstable-traits = ["embedded-hal-1"]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Display a timestamp of the number of seconds since startup next to defmt log messages
 | 
					# Display a timestamp of the number of seconds since startup next to defmt log messages
 | 
				
			||||||
# To use this you must have a time driver provided.
 | 
					# To use this you must have a time driver provided.
 | 
				
			||||||
defmt-timestamp-uptime = ["defmt"]
 | 
					defmt-timestamp-uptime = ["defmt"]
 | 
				
			||||||
@@ -242,8 +235,8 @@ defmt = { version = "0.3", optional = true }
 | 
				
			|||||||
log = { version = "0.4.14", optional = true }
 | 
					log = { version = "0.4.14", optional = true }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
embedded-hal-02 = { package = "embedded-hal", version = "0.2.6" }
 | 
					embedded-hal-02 = { package = "embedded-hal", version = "0.2.6" }
 | 
				
			||||||
embedded-hal-1 = { package = "embedded-hal", version = "=1.0.0-rc.2", optional = true}
 | 
					embedded-hal-1 = { package = "embedded-hal", version = "=1.0.0-rc.2" }
 | 
				
			||||||
embedded-hal-async = { version = "=1.0.0-rc.2", optional = true}
 | 
					embedded-hal-async = { version = "=1.0.0-rc.2" }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
futures-util = { version = "0.3.17", default-features = false }
 | 
					futures-util = { version = "0.3.17", default-features = false }
 | 
				
			||||||
critical-section = "1.1"
 | 
					critical-section = "1.1"
 | 
				
			||||||
@@ -258,4 +251,4 @@ wasm-timer = { version = "0.2.5", optional = true }
 | 
				
			|||||||
[dev-dependencies]
 | 
					[dev-dependencies]
 | 
				
			||||||
serial_test = "0.9"
 | 
					serial_test = "0.9"
 | 
				
			||||||
critical-section = { version = "1.1", features = ["std"] }
 | 
					critical-section = { version = "1.1", features = ["std"] }
 | 
				
			||||||
embassy-executor = { version = "0.3.3", path = "../embassy-executor", features = ["nightly"] }
 | 
					embassy-executor = { version = "0.3.3", path = "../embassy-executor" }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,3 +1,18 @@
 | 
				
			|||||||
// empty, needed to be able to use `links` in Cargo.toml.
 | 
					use std::env;
 | 
				
			||||||
 | 
					use std::ffi::OsString;
 | 
				
			||||||
 | 
					use std::process::Command;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn main() {}
 | 
					fn main() {
 | 
				
			||||||
 | 
					    println!("cargo:rerun-if-changed=build.rs");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let rustc = env::var_os("RUSTC").unwrap_or_else(|| OsString::from("rustc"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let output = Command::new(rustc)
 | 
				
			||||||
 | 
					        .arg("--version")
 | 
				
			||||||
 | 
					        .output()
 | 
				
			||||||
 | 
					        .expect("failed to run `rustc --version`");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if String::from_utf8_lossy(&output.stdout).contains("nightly") {
 | 
				
			||||||
 | 
					        println!("cargo:rustc-cfg=nightly");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,5 @@
 | 
				
			|||||||
use super::{Duration, Instant};
 | 
					use super::{Duration, Instant};
 | 
				
			||||||
 | 
					use crate::Timer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// Blocks for at least `duration`.
 | 
					/// Blocks for at least `duration`.
 | 
				
			||||||
pub fn block_for(duration: Duration) {
 | 
					pub fn block_for(duration: Duration) {
 | 
				
			||||||
@@ -14,10 +15,6 @@ pub fn block_for(duration: Duration) {
 | 
				
			|||||||
/// active driver.
 | 
					/// active driver.
 | 
				
			||||||
pub struct Delay;
 | 
					pub struct Delay;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(feature = "unstable-traits")]
 | 
					 | 
				
			||||||
mod eh1 {
 | 
					 | 
				
			||||||
    use super::*;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
impl embedded_hal_1::delay::DelayNs for Delay {
 | 
					impl embedded_hal_1::delay::DelayNs for Delay {
 | 
				
			||||||
    fn delay_ns(&mut self, ns: u32) {
 | 
					    fn delay_ns(&mut self, ns: u32) {
 | 
				
			||||||
        block_for(Duration::from_nanos(ns as u64))
 | 
					        block_for(Duration::from_nanos(ns as u64))
 | 
				
			||||||
@@ -31,12 +28,6 @@ mod eh1 {
 | 
				
			|||||||
        block_for(Duration::from_millis(ms as u64))
 | 
					        block_for(Duration::from_millis(ms as u64))
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#[cfg(all(feature = "unstable-traits", feature = "nightly"))]
 | 
					 | 
				
			||||||
mod eha {
 | 
					 | 
				
			||||||
    use super::*;
 | 
					 | 
				
			||||||
    use crate::Timer;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl embedded_hal_async::delay::DelayNs for Delay {
 | 
					impl embedded_hal_async::delay::DelayNs for Delay {
 | 
				
			||||||
    async fn delay_ns(&mut self, ns: u32) {
 | 
					    async fn delay_ns(&mut self, ns: u32) {
 | 
				
			||||||
@@ -51,46 +42,39 @@ mod eha {
 | 
				
			|||||||
        Timer::after_millis(ms as _).await
 | 
					        Timer::after_millis(ms as _).await
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
mod eh02 {
 | 
					impl embedded_hal_02::blocking::delay::DelayMs<u8> for Delay {
 | 
				
			||||||
    use embedded_hal_02::blocking::delay::{DelayMs, DelayUs};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    use super::*;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    impl DelayMs<u8> for Delay {
 | 
					 | 
				
			||||||
    fn delay_ms(&mut self, ms: u8) {
 | 
					    fn delay_ms(&mut self, ms: u8) {
 | 
				
			||||||
        block_for(Duration::from_millis(ms as u64))
 | 
					        block_for(Duration::from_millis(ms as u64))
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    impl DelayMs<u16> for Delay {
 | 
					impl embedded_hal_02::blocking::delay::DelayMs<u16> for Delay {
 | 
				
			||||||
    fn delay_ms(&mut self, ms: u16) {
 | 
					    fn delay_ms(&mut self, ms: u16) {
 | 
				
			||||||
        block_for(Duration::from_millis(ms as u64))
 | 
					        block_for(Duration::from_millis(ms as u64))
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    impl DelayMs<u32> for Delay {
 | 
					impl embedded_hal_02::blocking::delay::DelayMs<u32> for Delay {
 | 
				
			||||||
    fn delay_ms(&mut self, ms: u32) {
 | 
					    fn delay_ms(&mut self, ms: u32) {
 | 
				
			||||||
        block_for(Duration::from_millis(ms as u64))
 | 
					        block_for(Duration::from_millis(ms as u64))
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    impl DelayUs<u8> for Delay {
 | 
					impl embedded_hal_02::blocking::delay::DelayUs<u8> for Delay {
 | 
				
			||||||
    fn delay_us(&mut self, us: u8) {
 | 
					    fn delay_us(&mut self, us: u8) {
 | 
				
			||||||
        block_for(Duration::from_micros(us as u64))
 | 
					        block_for(Duration::from_micros(us as u64))
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    impl DelayUs<u16> for Delay {
 | 
					impl embedded_hal_02::blocking::delay::DelayUs<u16> for Delay {
 | 
				
			||||||
    fn delay_us(&mut self, us: u16) {
 | 
					    fn delay_us(&mut self, us: u16) {
 | 
				
			||||||
        block_for(Duration::from_micros(us as u64))
 | 
					        block_for(Duration::from_micros(us as u64))
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    impl DelayUs<u32> for Delay {
 | 
					impl embedded_hal_02::blocking::delay::DelayUs<u32> for Delay {
 | 
				
			||||||
    fn delay_us(&mut self, us: u32) {
 | 
					    fn delay_us(&mut self, us: u32) {
 | 
				
			||||||
        block_for(Duration::from_micros(us as u64))
 | 
					        block_for(Duration::from_micros(us as u64))
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,7 @@
 | 
				
			|||||||
#![cfg_attr(not(any(feature = "std", feature = "wasm", test)), no_std)]
 | 
					#![cfg_attr(not(any(feature = "std", feature = "wasm", test)), no_std)]
 | 
				
			||||||
#![cfg_attr(feature = "nightly", feature(async_fn_in_trait))]
 | 
					#![cfg_attr(nightly, feature(async_fn_in_trait, impl_trait_projections))]
 | 
				
			||||||
#![cfg_attr(feature = "nightly", allow(stable_features, unknown_lints, async_fn_in_trait))]
 | 
					#![cfg_attr(nightly, allow(stable_features, unknown_lints))]
 | 
				
			||||||
 | 
					#![allow(async_fn_in_trait)]
 | 
				
			||||||
#![doc = include_str!("../README.md")]
 | 
					#![doc = include_str!("../README.md")]
 | 
				
			||||||
#![allow(clippy::new_without_default)]
 | 
					#![allow(clippy::new_without_default)]
 | 
				
			||||||
#![warn(missing_docs)]
 | 
					#![warn(missing_docs)]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,5 @@
 | 
				
			|||||||
#![no_std]
 | 
					#![no_std]
 | 
				
			||||||
#![feature(async_fn_in_trait)]
 | 
					#![allow(async_fn_in_trait)]
 | 
				
			||||||
#![allow(stable_features, unknown_lints, async_fn_in_trait)]
 | 
					 | 
				
			||||||
#![doc = include_str!("../README.md")]
 | 
					#![doc = include_str!("../README.md")]
 | 
				
			||||||
#![warn(missing_docs)]
 | 
					#![warn(missing_docs)]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,10 +7,10 @@ license = "MIT OR Apache-2.0"
 | 
				
			|||||||
[dependencies]
 | 
					[dependencies]
 | 
				
			||||||
embassy-sync = { version = "0.4.0", path = "../../../../embassy-sync" }
 | 
					embassy-sync = { version = "0.4.0", path = "../../../../embassy-sync" }
 | 
				
			||||||
embassy-executor = { version = "0.3.3", path = "../../../../embassy-executor", features = ["arch-cortex-m", "executor-thread", "nightly", "integrated-timers", "arch-cortex-m", "executor-thread"] }
 | 
					embassy-executor = { version = "0.3.3", path = "../../../../embassy-executor", features = ["arch-cortex-m", "executor-thread", "nightly", "integrated-timers", "arch-cortex-m", "executor-thread"] }
 | 
				
			||||||
embassy-time = { version = "0.1.5", path = "../../../../embassy-time", features = ["nightly"] }
 | 
					embassy-time = { version = "0.1.5", path = "../../../../embassy-time", features = [] }
 | 
				
			||||||
embassy-nrf = { version = "0.1.0", path = "../../../../embassy-nrf", features = ["time-driver-rtc1", "gpiote", "nightly"] }
 | 
					embassy-nrf = { version = "0.1.0", path = "../../../../embassy-nrf", features = ["time-driver-rtc1", "gpiote", ] }
 | 
				
			||||||
embassy-boot = { version = "0.1.0", path = "../../../../embassy-boot/boot", features = ["nightly"] }
 | 
					embassy-boot = { version = "0.1.0", path = "../../../../embassy-boot/boot", features = [] }
 | 
				
			||||||
embassy-boot-nrf = { version = "0.1.0", path = "../../../../embassy-boot/nrf", features = ["nightly"] }
 | 
					embassy-boot-nrf = { version = "0.1.0", path = "../../../../embassy-boot/nrf", features = [] }
 | 
				
			||||||
embassy-embedded-hal = { version = "0.1.0", path = "../../../../embassy-embedded-hal" }
 | 
					embassy-embedded-hal = { version = "0.1.0", path = "../../../../embassy-embedded-hal" }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
defmt = { version = "0.3", optional = true }
 | 
					defmt = { version = "0.3", optional = true }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,9 +7,9 @@ license = "MIT OR Apache-2.0"
 | 
				
			|||||||
[dependencies]
 | 
					[dependencies]
 | 
				
			||||||
embassy-sync = { version = "0.4.0", path = "../../../../embassy-sync" }
 | 
					embassy-sync = { version = "0.4.0", path = "../../../../embassy-sync" }
 | 
				
			||||||
embassy-executor = { version = "0.3.3", path = "../../../../embassy-executor", features = ["arch-cortex-m", "executor-thread", "nightly", "integrated-timers", "arch-cortex-m", "executor-thread"] }
 | 
					embassy-executor = { version = "0.3.3", path = "../../../../embassy-executor", features = ["arch-cortex-m", "executor-thread", "nightly", "integrated-timers", "arch-cortex-m", "executor-thread"] }
 | 
				
			||||||
embassy-time = { version = "0.1.5", path = "../../../../embassy-time", features = ["nightly"] }
 | 
					embassy-time = { version = "0.1.5", path = "../../../../embassy-time", features = [] }
 | 
				
			||||||
embassy-rp = { version = "0.1.0", path = "../../../../embassy-rp", features = ["time-driver", "unstable-traits", "nightly"] }
 | 
					embassy-rp = { version = "0.1.0", path = "../../../../embassy-rp", features = ["time-driver", ] }
 | 
				
			||||||
embassy-boot-rp = { version = "0.1.0", path = "../../../../embassy-boot/rp", features = ["nightly"] }
 | 
					embassy-boot-rp = { version = "0.1.0", path = "../../../../embassy-boot/rp", features = [] }
 | 
				
			||||||
embassy-embedded-hal = { version = "0.1.0", path = "../../../../embassy-embedded-hal" }
 | 
					embassy-embedded-hal = { version = "0.1.0", path = "../../../../embassy-embedded-hal" }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
defmt = "0.3"
 | 
					defmt = "0.3"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,9 +7,9 @@ license = "MIT OR Apache-2.0"
 | 
				
			|||||||
[dependencies]
 | 
					[dependencies]
 | 
				
			||||||
embassy-sync = { version = "0.4.0", path = "../../../../embassy-sync" }
 | 
					embassy-sync = { version = "0.4.0", path = "../../../../embassy-sync" }
 | 
				
			||||||
embassy-executor = { version = "0.3.3", path = "../../../../embassy-executor", features = ["arch-cortex-m", "executor-thread", "nightly", "integrated-timers"] }
 | 
					embassy-executor = { version = "0.3.3", path = "../../../../embassy-executor", features = ["arch-cortex-m", "executor-thread", "nightly", "integrated-timers"] }
 | 
				
			||||||
embassy-time = { version = "0.1.5", path = "../../../../embassy-time", features = ["nightly", "tick-hz-32_768"] }
 | 
					embassy-time = { version = "0.1.5", path = "../../../../embassy-time", features = [ "tick-hz-32_768"] }
 | 
				
			||||||
embassy-stm32 = { version = "0.1.0", path = "../../../../embassy-stm32", features = ["unstable-traits", "nightly", "stm32f303re", "time-driver-any", "exti"]  }
 | 
					embassy-stm32 = { version = "0.1.0", path = "../../../../embassy-stm32", features = ["stm32f303re", "time-driver-any", "exti"]  }
 | 
				
			||||||
embassy-boot-stm32 = { version = "0.1.0", path = "../../../../embassy-boot/stm32", features = ["nightly"] }
 | 
					embassy-boot-stm32 = { version = "0.1.0", path = "../../../../embassy-boot/stm32" }
 | 
				
			||||||
embassy-embedded-hal = { version = "0.1.0", path = "../../../../embassy-embedded-hal" }
 | 
					embassy-embedded-hal = { version = "0.1.0", path = "../../../../embassy-embedded-hal" }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
defmt = { version = "0.3", optional = true }
 | 
					defmt = { version = "0.3", optional = true }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,9 +7,9 @@ license = "MIT OR Apache-2.0"
 | 
				
			|||||||
[dependencies]
 | 
					[dependencies]
 | 
				
			||||||
embassy-sync = { version = "0.4.0", path = "../../../../embassy-sync" }
 | 
					embassy-sync = { version = "0.4.0", path = "../../../../embassy-sync" }
 | 
				
			||||||
embassy-executor = { version = "0.3.3", path = "../../../../embassy-executor", features = ["arch-cortex-m", "executor-thread", "nightly", "integrated-timers"] }
 | 
					embassy-executor = { version = "0.3.3", path = "../../../../embassy-executor", features = ["arch-cortex-m", "executor-thread", "nightly", "integrated-timers"] }
 | 
				
			||||||
embassy-time = { version = "0.1.5", path = "../../../../embassy-time", features = ["nightly", "tick-hz-32_768"] }
 | 
					embassy-time = { version = "0.1.5", path = "../../../../embassy-time", features = [ "tick-hz-32_768"] }
 | 
				
			||||||
embassy-stm32 = { version = "0.1.0", path = "../../../../embassy-stm32", features = ["unstable-traits", "nightly", "stm32f767zi", "time-driver-any", "exti"]  }
 | 
					embassy-stm32 = { version = "0.1.0", path = "../../../../embassy-stm32", features = ["stm32f767zi", "time-driver-any", "exti"]  }
 | 
				
			||||||
embassy-boot-stm32 = { version = "0.1.0", path = "../../../../embassy-boot/stm32", features = ["nightly"] }
 | 
					embassy-boot-stm32 = { version = "0.1.0", path = "../../../../embassy-boot/stm32", features = [] }
 | 
				
			||||||
embassy-embedded-hal = { version = "0.1.0", path = "../../../../embassy-embedded-hal" }
 | 
					embassy-embedded-hal = { version = "0.1.0", path = "../../../../embassy-embedded-hal" }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
defmt = { version = "0.3", optional = true }
 | 
					defmt = { version = "0.3", optional = true }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,9 +7,9 @@ license = "MIT OR Apache-2.0"
 | 
				
			|||||||
[dependencies]
 | 
					[dependencies]
 | 
				
			||||||
embassy-sync = { version = "0.4.0", path = "../../../../embassy-sync" }
 | 
					embassy-sync = { version = "0.4.0", path = "../../../../embassy-sync" }
 | 
				
			||||||
embassy-executor = { version = "0.3.3", path = "../../../../embassy-executor", features = ["arch-cortex-m", "executor-thread", "nightly", "integrated-timers"] }
 | 
					embassy-executor = { version = "0.3.3", path = "../../../../embassy-executor", features = ["arch-cortex-m", "executor-thread", "nightly", "integrated-timers"] }
 | 
				
			||||||
embassy-time = { version = "0.1.5", path = "../../../../embassy-time", features = ["nightly", "tick-hz-32_768"] }
 | 
					embassy-time = { version = "0.1.5", path = "../../../../embassy-time", features = [ "tick-hz-32_768"] }
 | 
				
			||||||
embassy-stm32 = { version = "0.1.0", path = "../../../../embassy-stm32", features = ["unstable-traits", "nightly", "stm32h743zi", "time-driver-any", "exti"]  }
 | 
					embassy-stm32 = { version = "0.1.0", path = "../../../../embassy-stm32", features = ["stm32h743zi", "time-driver-any", "exti"]  }
 | 
				
			||||||
embassy-boot-stm32 = { version = "0.1.0", path = "../../../../embassy-boot/stm32", features = ["nightly"] }
 | 
					embassy-boot-stm32 = { version = "0.1.0", path = "../../../../embassy-boot/stm32", features = [] }
 | 
				
			||||||
embassy-embedded-hal = { version = "0.1.0", path = "../../../../embassy-embedded-hal" }
 | 
					embassy-embedded-hal = { version = "0.1.0", path = "../../../../embassy-embedded-hal" }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
defmt = { version = "0.3", optional = true }
 | 
					defmt = { version = "0.3", optional = true }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,9 +7,9 @@ license = "MIT OR Apache-2.0"
 | 
				
			|||||||
[dependencies]
 | 
					[dependencies]
 | 
				
			||||||
embassy-sync = { version = "0.4.0", path = "../../../../embassy-sync" }
 | 
					embassy-sync = { version = "0.4.0", path = "../../../../embassy-sync" }
 | 
				
			||||||
embassy-executor = { version = "0.3.3", path = "../../../../embassy-executor", features = ["arch-cortex-m", "executor-thread", "nightly", "integrated-timers"] }
 | 
					embassy-executor = { version = "0.3.3", path = "../../../../embassy-executor", features = ["arch-cortex-m", "executor-thread", "nightly", "integrated-timers"] }
 | 
				
			||||||
embassy-time = { version = "0.1.5", path = "../../../../embassy-time", features = ["nightly", "tick-hz-32_768"] }
 | 
					embassy-time = { version = "0.1.5", path = "../../../../embassy-time", features = [ "tick-hz-32_768"] }
 | 
				
			||||||
embassy-stm32 = { version = "0.1.0", path = "../../../../embassy-stm32", features = ["unstable-traits", "nightly", "stm32l072cz", "time-driver-any", "exti", "memory-x"]  }
 | 
					embassy-stm32 = { version = "0.1.0", path = "../../../../embassy-stm32", features = ["stm32l072cz", "time-driver-any", "exti", "memory-x"]  }
 | 
				
			||||||
embassy-boot-stm32 = { version = "0.1.0", path = "../../../../embassy-boot/stm32", features = ["nightly"] }
 | 
					embassy-boot-stm32 = { version = "0.1.0", path = "../../../../embassy-boot/stm32", features = [] }
 | 
				
			||||||
embassy-embedded-hal = { version = "0.1.0", path = "../../../../embassy-embedded-hal" }
 | 
					embassy-embedded-hal = { version = "0.1.0", path = "../../../../embassy-embedded-hal" }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
defmt = { version = "0.3", optional = true }
 | 
					defmt = { version = "0.3", optional = true }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,9 +7,9 @@ license = "MIT OR Apache-2.0"
 | 
				
			|||||||
[dependencies]
 | 
					[dependencies]
 | 
				
			||||||
embassy-sync = { version = "0.4.0", path = "../../../../embassy-sync" }
 | 
					embassy-sync = { version = "0.4.0", path = "../../../../embassy-sync" }
 | 
				
			||||||
embassy-executor = { version = "0.3.3", path = "../../../../embassy-executor", features = ["arch-cortex-m", "executor-thread", "nightly", "integrated-timers"] }
 | 
					embassy-executor = { version = "0.3.3", path = "../../../../embassy-executor", features = ["arch-cortex-m", "executor-thread", "nightly", "integrated-timers"] }
 | 
				
			||||||
embassy-time = { version = "0.1.5", path = "../../../../embassy-time", features = ["nightly", "tick-hz-32_768"] }
 | 
					embassy-time = { version = "0.1.5", path = "../../../../embassy-time", features = [ "tick-hz-32_768"] }
 | 
				
			||||||
embassy-stm32 = { version = "0.1.0", path = "../../../../embassy-stm32", features = ["unstable-traits", "nightly", "stm32l151cb-a", "time-driver-any", "exti"]  }
 | 
					embassy-stm32 = { version = "0.1.0", path = "../../../../embassy-stm32", features = ["stm32l151cb-a", "time-driver-any", "exti"]  }
 | 
				
			||||||
embassy-boot-stm32 = { version = "0.1.0", path = "../../../../embassy-boot/stm32", features = ["nightly"] }
 | 
					embassy-boot-stm32 = { version = "0.1.0", path = "../../../../embassy-boot/stm32", features = [] }
 | 
				
			||||||
embassy-embedded-hal = { version = "0.1.0", path = "../../../../embassy-embedded-hal" }
 | 
					embassy-embedded-hal = { version = "0.1.0", path = "../../../../embassy-embedded-hal" }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
defmt = { version = "0.3", optional = true }
 | 
					defmt = { version = "0.3", optional = true }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,9 +7,9 @@ license = "MIT OR Apache-2.0"
 | 
				
			|||||||
[dependencies]
 | 
					[dependencies]
 | 
				
			||||||
embassy-sync = { version = "0.4.0", path = "../../../../embassy-sync" }
 | 
					embassy-sync = { version = "0.4.0", path = "../../../../embassy-sync" }
 | 
				
			||||||
embassy-executor = { version = "0.3.3", path = "../../../../embassy-executor", features = ["arch-cortex-m", "executor-thread", "nightly", "integrated-timers"] }
 | 
					embassy-executor = { version = "0.3.3", path = "../../../../embassy-executor", features = ["arch-cortex-m", "executor-thread", "nightly", "integrated-timers"] }
 | 
				
			||||||
embassy-time = { version = "0.1.5", path = "../../../../embassy-time", features = ["nightly", "tick-hz-32_768"] }
 | 
					embassy-time = { version = "0.1.5", path = "../../../../embassy-time", features = [ "tick-hz-32_768"] }
 | 
				
			||||||
embassy-stm32 = { version = "0.1.0", path = "../../../../embassy-stm32", features = ["unstable-traits", "nightly", "stm32l475vg", "time-driver-any", "exti"]  }
 | 
					embassy-stm32 = { version = "0.1.0", path = "../../../../embassy-stm32", features = ["stm32l475vg", "time-driver-any", "exti"]  }
 | 
				
			||||||
embassy-boot-stm32 = { version = "0.1.0", path = "../../../../embassy-boot/stm32", features = ["nightly"] }
 | 
					embassy-boot-stm32 = { version = "0.1.0", path = "../../../../embassy-boot/stm32", features = [] }
 | 
				
			||||||
embassy-embedded-hal = { version = "0.1.0", path = "../../../../embassy-embedded-hal" }
 | 
					embassy-embedded-hal = { version = "0.1.0", path = "../../../../embassy-embedded-hal" }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
defmt = { version = "0.3", optional = true }
 | 
					defmt = { version = "0.3", optional = true }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,9 +7,9 @@ license = "MIT OR Apache-2.0"
 | 
				
			|||||||
[dependencies]
 | 
					[dependencies]
 | 
				
			||||||
embassy-sync = { version = "0.4.0", path = "../../../../embassy-sync" }
 | 
					embassy-sync = { version = "0.4.0", path = "../../../../embassy-sync" }
 | 
				
			||||||
embassy-executor = { version = "0.3.3", path = "../../../../embassy-executor", features = ["arch-cortex-m", "executor-thread", "nightly", "integrated-timers"] }
 | 
					embassy-executor = { version = "0.3.3", path = "../../../../embassy-executor", features = ["arch-cortex-m", "executor-thread", "nightly", "integrated-timers"] }
 | 
				
			||||||
embassy-time = { version = "0.1.5", path = "../../../../embassy-time", features = ["nightly", "tick-hz-32_768"] }
 | 
					embassy-time = { version = "0.1.5", path = "../../../../embassy-time", features = [ "tick-hz-32_768"] }
 | 
				
			||||||
embassy-stm32 = { version = "0.1.0", path = "../../../../embassy-stm32", features = ["unstable-traits", "nightly", "stm32wl55jc-cm4", "time-driver-any", "exti"]  }
 | 
					embassy-stm32 = { version = "0.1.0", path = "../../../../embassy-stm32", features = ["stm32wl55jc-cm4", "time-driver-any", "exti"]  }
 | 
				
			||||||
embassy-boot-stm32 = { version = "0.1.0", path = "../../../../embassy-boot/stm32", features = ["nightly"] }
 | 
					embassy-boot-stm32 = { version = "0.1.0", path = "../../../../embassy-boot/stm32", features = [] }
 | 
				
			||||||
embassy-embedded-hal = { version = "0.1.0", path = "../../../../embassy-embedded-hal" }
 | 
					embassy-embedded-hal = { version = "0.1.0", path = "../../../../embassy-embedded-hal" }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
defmt = { version = "0.3", optional = true }
 | 
					defmt = { version = "0.3", optional = true }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,7 +9,7 @@ license = "MIT OR Apache-2.0"
 | 
				
			|||||||
defmt = { version = "0.3", optional = true }
 | 
					defmt = { version = "0.3", optional = true }
 | 
				
			||||||
defmt-rtt = { version = "0.4", optional = true }
 | 
					defmt-rtt = { version = "0.4", optional = true }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
embassy-nrf = { path = "../../../../embassy-nrf", features = ["nightly"] }
 | 
					embassy-nrf = { path = "../../../../embassy-nrf", features = [] }
 | 
				
			||||||
embassy-boot-nrf = { path = "../../../../embassy-boot/nrf" }
 | 
					embassy-boot-nrf = { path = "../../../../embassy-boot/nrf" }
 | 
				
			||||||
cortex-m = { version = "0.7.6", features = ["inline-asm", "critical-section-single-core"] }
 | 
					cortex-m = { version = "0.7.6", features = ["inline-asm", "critical-section-single-core"] }
 | 
				
			||||||
embassy-sync = { version = "0.4.0", path = "../../../../embassy-sync" }
 | 
					embassy-sync = { version = "0.4.0", path = "../../../../embassy-sync" }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,10 +9,10 @@ license = "MIT OR Apache-2.0"
 | 
				
			|||||||
defmt = { version = "0.3", optional = true }
 | 
					defmt = { version = "0.3", optional = true }
 | 
				
			||||||
defmt-rtt = { version = "0.4", optional = true }
 | 
					defmt-rtt = { version = "0.4", optional = true }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
embassy-rp = { path = "../../../../embassy-rp", features = ["nightly"] }
 | 
					embassy-rp = { path = "../../../../embassy-rp", features = [] }
 | 
				
			||||||
embassy-boot-rp = { path = "../../../../embassy-boot/rp" }
 | 
					embassy-boot-rp = { path = "../../../../embassy-boot/rp" }
 | 
				
			||||||
embassy-sync = { version = "0.4.0", path = "../../../../embassy-sync" }
 | 
					embassy-sync = { version = "0.4.0", path = "../../../../embassy-sync" }
 | 
				
			||||||
embassy-time = { path = "../../../../embassy-time", features = ["nightly"] }
 | 
					embassy-time = { path = "../../../../embassy-time", features = [] }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cortex-m = { version = "0.7.6", features = ["inline-asm", "critical-section-single-core"] }
 | 
					cortex-m = { version = "0.7.6", features = ["inline-asm", "critical-section-single-core"] }
 | 
				
			||||||
cortex-m-rt = { version = "0.7" }
 | 
					cortex-m-rt = { version = "0.7" }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,7 +9,7 @@ license = "MIT OR Apache-2.0"
 | 
				
			|||||||
defmt = { version = "0.3", optional = true }
 | 
					defmt = { version = "0.3", optional = true }
 | 
				
			||||||
defmt-rtt = { version = "0.4", optional = true }
 | 
					defmt-rtt = { version = "0.4", optional = true }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
embassy-stm32 = { path = "../../../../embassy-stm32", features = ["nightly"] }
 | 
					embassy-stm32 = { path = "../../../../embassy-stm32", features = [] }
 | 
				
			||||||
embassy-boot-stm32 = { path = "../../../../embassy-boot/stm32" }
 | 
					embassy-boot-stm32 = { path = "../../../../embassy-boot/stm32" }
 | 
				
			||||||
cortex-m = { version = "0.7.6", features = ["inline-asm", "critical-section-single-core"] }
 | 
					cortex-m = { version = "0.7.6", features = ["inline-asm", "critical-section-single-core"] }
 | 
				
			||||||
embassy-sync = { version = "0.4.0", path = "../../../../embassy-sync" }
 | 
					embassy-sync = { version = "0.4.0", path = "../../../../embassy-sync" }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,8 +5,7 @@ version = "0.1.0"
 | 
				
			|||||||
license = "MIT OR Apache-2.0"
 | 
					license = "MIT OR Apache-2.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[features]
 | 
					[features]
 | 
				
			||||||
default = ["log", "nightly"]
 | 
					default = ["log"]
 | 
				
			||||||
nightly = ["embassy-executor/nightly", "embassy-nrf/nightly", "embassy-nrf/unstable-traits"]
 | 
					 | 
				
			||||||
log = [
 | 
					log = [
 | 
				
			||||||
    "dep:log",
 | 
					    "dep:log",
 | 
				
			||||||
    "embassy-sync/log",
 | 
					    "embassy-sync/log",
 | 
				
			||||||
@@ -33,7 +32,7 @@ log = { version = "0.4.17", optional = true }
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
[[bin]]
 | 
					[[bin]]
 | 
				
			||||||
name = "rtos_trace"
 | 
					name = "rtos_trace"
 | 
				
			||||||
required-features = ["nightly"]
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[profile.release]
 | 
					[profile.release]
 | 
				
			||||||
debug = 2
 | 
					debug = 2
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,8 +9,8 @@ rtic = { version = "2", features = ["thumbv7-backend"] }
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
embassy-futures = { version = "0.1.0", path = "../../embassy-futures" }
 | 
					embassy-futures = { version = "0.1.0", path = "../../embassy-futures" }
 | 
				
			||||||
embassy-sync = { version = "0.4.0", path = "../../embassy-sync", features = ["defmt"] }
 | 
					embassy-sync = { version = "0.4.0", path = "../../embassy-sync", features = ["defmt"] }
 | 
				
			||||||
embassy-time = { version = "0.1.5", path = "../../embassy-time", features = ["nightly", "unstable-traits", "defmt", "defmt-timestamp-uptime", "generic-queue"] }
 | 
					embassy-time = { version = "0.1.5", path = "../../embassy-time", features = [ "defmt", "defmt-timestamp-uptime", "generic-queue"] }
 | 
				
			||||||
embassy-nrf = { version = "0.1.0", path = "../../embassy-nrf", features = ["nightly", "unstable-traits", "defmt", "nrf52840", "time-driver-rtc1", "gpiote", "unstable-pac", "time"] }
 | 
					embassy-nrf = { version = "0.1.0", path = "../../embassy-nrf", features = [ "defmt", "nrf52840", "time-driver-rtc1", "gpiote", "unstable-pac", "time"] }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
defmt = "0.3"
 | 
					defmt = "0.3"
 | 
				
			||||||
defmt-rtt = "0.4"
 | 
					defmt-rtt = "0.4"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,20 +7,7 @@ license = "MIT OR Apache-2.0"
 | 
				
			|||||||
[features]
 | 
					[features]
 | 
				
			||||||
default = ["nightly"]
 | 
					default = ["nightly"]
 | 
				
			||||||
nightly = [
 | 
					nightly = [
 | 
				
			||||||
    "embedded-hal-async",
 | 
					 | 
				
			||||||
    "embassy-executor/nightly",
 | 
					 | 
				
			||||||
    "embassy-nrf/nightly",
 | 
					 | 
				
			||||||
    "embassy-net/nightly",
 | 
					 | 
				
			||||||
    "embassy-net-esp-hosted",
 | 
					 | 
				
			||||||
    "embassy-net-enc28j60",
 | 
					 | 
				
			||||||
    "embassy-nrf/unstable-traits",
 | 
					 | 
				
			||||||
    "embassy-time/nightly",
 | 
					 | 
				
			||||||
    "embassy-time/unstable-traits",
 | 
					 | 
				
			||||||
    "static_cell/nightly",
 | 
					    "static_cell/nightly",
 | 
				
			||||||
    "embassy-usb",
 | 
					 | 
				
			||||||
    "embedded-io-async",
 | 
					 | 
				
			||||||
    "embedded-hal-bus/async",
 | 
					 | 
				
			||||||
    "embassy-net",
 | 
					 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[dependencies]
 | 
					[dependencies]
 | 
				
			||||||
@@ -29,12 +16,12 @@ embassy-sync = { version = "0.4.0", path = "../../embassy-sync", features = ["de
 | 
				
			|||||||
embassy-executor = { version = "0.3.3", path = "../../embassy-executor", features = ["arch-cortex-m", "executor-thread", "executor-interrupt", "defmt", "integrated-timers"] }
 | 
					embassy-executor = { version = "0.3.3", path = "../../embassy-executor", features = ["arch-cortex-m", "executor-thread", "executor-interrupt", "defmt", "integrated-timers"] }
 | 
				
			||||||
embassy-time = { version = "0.1.5", path = "../../embassy-time", features = ["defmt", "defmt-timestamp-uptime"] }
 | 
					embassy-time = { version = "0.1.5", path = "../../embassy-time", features = ["defmt", "defmt-timestamp-uptime"] }
 | 
				
			||||||
embassy-nrf = { version = "0.1.0", path = "../../embassy-nrf", features = ["defmt", "nrf52840", "time-driver-rtc1", "gpiote", "unstable-pac", "time"] }
 | 
					embassy-nrf = { version = "0.1.0", path = "../../embassy-nrf", features = ["defmt", "nrf52840", "time-driver-rtc1", "gpiote", "unstable-pac", "time"] }
 | 
				
			||||||
embassy-net = { version = "0.2.0", path = "../../embassy-net", features = ["defmt", "tcp", "dhcpv4", "medium-ethernet"], optional = true }
 | 
					embassy-net = { version = "0.2.0", path = "../../embassy-net", features = ["defmt", "tcp", "dhcpv4", "medium-ethernet"] }
 | 
				
			||||||
embassy-usb = { version = "0.1.0", path = "../../embassy-usb", features = ["defmt"], optional = true }
 | 
					embassy-usb = { version = "0.1.0", path = "../../embassy-usb", features = ["defmt"] }
 | 
				
			||||||
embedded-io = { version = "0.6.0", features = ["defmt-03"]  }
 | 
					embedded-io = { version = "0.6.0", features = ["defmt-03"]  }
 | 
				
			||||||
embedded-io-async = { version = "0.6.1", optional = true, features = ["defmt-03"] }
 | 
					embedded-io-async = { version = "0.6.1", features = ["defmt-03"] }
 | 
				
			||||||
embassy-net-esp-hosted = { version = "0.1.0", path = "../../embassy-net-esp-hosted", features = ["defmt"], optional = true }
 | 
					embassy-net-esp-hosted = { version = "0.1.0", path = "../../embassy-net-esp-hosted", features = ["defmt"] }
 | 
				
			||||||
embassy-net-enc28j60 = { version = "0.1.0", path = "../../embassy-net-enc28j60", features = ["defmt"], optional = true }
 | 
					embassy-net-enc28j60 = { version = "0.1.0", path = "../../embassy-net-enc28j60", features = ["defmt"] }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
defmt = "0.3"
 | 
					defmt = "0.3"
 | 
				
			||||||
defmt-rtt = "0.4"
 | 
					defmt-rtt = "0.4"
 | 
				
			||||||
@@ -50,8 +37,8 @@ embedded-storage = "0.3.0"
 | 
				
			|||||||
usbd-hid = "0.6.0"
 | 
					usbd-hid = "0.6.0"
 | 
				
			||||||
serde = { version = "1.0.136", default-features = false }
 | 
					serde = { version = "1.0.136", default-features = false }
 | 
				
			||||||
embedded-hal = { version = "1.0.0-rc.2" }
 | 
					embedded-hal = { version = "1.0.0-rc.2" }
 | 
				
			||||||
embedded-hal-async = { version = "1.0.0-rc.2", optional = true }
 | 
					embedded-hal-async = { version = "1.0.0-rc.2" }
 | 
				
			||||||
embedded-hal-bus = { version = "0.1.0-rc.2" }
 | 
					embedded-hal-bus = { version = "0.1.0-rc.2", features = ["async"] }
 | 
				
			||||||
num-integer = { version = "0.1.45", default-features = false }
 | 
					num-integer = { version = "0.1.45", default-features = false }
 | 
				
			||||||
microfft = "0.5.0"
 | 
					microfft = "0.5.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,37 +6,12 @@ license = "MIT OR Apache-2.0"
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
[dependencies]
 | 
					[dependencies]
 | 
				
			||||||
embassy-futures = { version = "0.1.0", path = "../../embassy-futures" }
 | 
					embassy-futures = { version = "0.1.0", path = "../../embassy-futures" }
 | 
				
			||||||
embassy-sync = { version = "0.4.0", path = "../../embassy-sync", features = [
 | 
					embassy-sync = { version = "0.4.0", path = "../../embassy-sync", features = ["defmt"] }
 | 
				
			||||||
    "defmt",
 | 
					embassy-executor = { version = "0.3.3", path = "../../embassy-executor", features = ["arch-cortex-m", "executor-thread", "nightly", "defmt", "integrated-timers"] }
 | 
				
			||||||
] }
 | 
					embassy-time = { version = "0.1.5", path = "../../embassy-time", features = ["defmt", "defmt-timestamp-uptime"] }
 | 
				
			||||||
embassy-executor = { version = "0.3.3", path = "../../embassy-executor", features = ["arch-cortex-m", "executor-thread", 
 | 
					embassy-nrf = { version = "0.1.0", path = "../../embassy-nrf", features = ["defmt", "nrf5340-app-s", "time-driver-rtc1", "gpiote", "unstable-pac"] }
 | 
				
			||||||
    "nightly",
 | 
					embassy-net = { version = "0.2.0", path = "../../embassy-net", features = ["defmt", "tcp", "dhcpv4", "medium-ethernet"] }
 | 
				
			||||||
    "defmt",
 | 
					embassy-usb = { version = "0.1.0", path = "../../embassy-usb", features = ["defmt"] }
 | 
				
			||||||
    "integrated-timers",
 | 
					 | 
				
			||||||
] }
 | 
					 | 
				
			||||||
embassy-time = { version = "0.1.5", path = "../../embassy-time", features = [
 | 
					 | 
				
			||||||
    "defmt",
 | 
					 | 
				
			||||||
    "defmt-timestamp-uptime",
 | 
					 | 
				
			||||||
] }
 | 
					 | 
				
			||||||
embassy-nrf = { version = "0.1.0", path = "../../embassy-nrf", features = [
 | 
					 | 
				
			||||||
    "nightly",
 | 
					 | 
				
			||||||
    "unstable-traits",
 | 
					 | 
				
			||||||
    "defmt",
 | 
					 | 
				
			||||||
    "nrf5340-app-s",
 | 
					 | 
				
			||||||
    "time-driver-rtc1",
 | 
					 | 
				
			||||||
    "gpiote",
 | 
					 | 
				
			||||||
    "unstable-pac",
 | 
					 | 
				
			||||||
] }
 | 
					 | 
				
			||||||
embassy-net = { version = "0.2.0", path = "../../embassy-net", features = [
 | 
					 | 
				
			||||||
    "nightly",
 | 
					 | 
				
			||||||
    "defmt",
 | 
					 | 
				
			||||||
    "tcp",
 | 
					 | 
				
			||||||
    "dhcpv4",
 | 
					 | 
				
			||||||
    "medium-ethernet",
 | 
					 | 
				
			||||||
] }
 | 
					 | 
				
			||||||
embassy-usb = { version = "0.1.0", path = "../../embassy-usb", features = [
 | 
					 | 
				
			||||||
    "defmt",
 | 
					 | 
				
			||||||
] }
 | 
					 | 
				
			||||||
embedded-io-async = { version = "0.6.1" }
 | 
					embedded-io-async = { version = "0.6.1" }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
defmt = "0.3"
 | 
					defmt = "0.3"
 | 
				
			||||||
@@ -46,9 +21,7 @@ static_cell = { version = "2", features = ["nightly"]}
 | 
				
			|||||||
cortex-m = { version = "0.7.6", features = ["inline-asm", "critical-section-single-core"] }
 | 
					cortex-m = { version = "0.7.6", features = ["inline-asm", "critical-section-single-core"] }
 | 
				
			||||||
cortex-m-rt = "0.7.0"
 | 
					cortex-m-rt = "0.7.0"
 | 
				
			||||||
panic-probe = { version = "0.3", features = ["print-defmt"] }
 | 
					panic-probe = { version = "0.3", features = ["print-defmt"] }
 | 
				
			||||||
futures = { version = "0.3.17", default-features = false, features = [
 | 
					futures = { version = "0.3.17", default-features = false, features = ["async-await"] }
 | 
				
			||||||
    "async-await",
 | 
					 | 
				
			||||||
] }
 | 
					 | 
				
			||||||
rand = { version = "0.8.4", default-features = false }
 | 
					rand = { version = "0.8.4", default-features = false }
 | 
				
			||||||
embedded-storage = "0.3.0"
 | 
					embedded-storage = "0.3.0"
 | 
				
			||||||
usbd-hid = "0.6.0"
 | 
					usbd-hid = "0.6.0"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,10 +9,10 @@ license = "MIT OR Apache-2.0"
 | 
				
			|||||||
embassy-embedded-hal = { version = "0.1.0", path = "../../embassy-embedded-hal", features = ["defmt"] }
 | 
					embassy-embedded-hal = { version = "0.1.0", path = "../../embassy-embedded-hal", features = ["defmt"] }
 | 
				
			||||||
embassy-sync = { version = "0.4.0", path = "../../embassy-sync", features = ["defmt"] }
 | 
					embassy-sync = { version = "0.4.0", path = "../../embassy-sync", features = ["defmt"] }
 | 
				
			||||||
embassy-executor = { version = "0.3.3", path = "../../embassy-executor", features = ["nightly", "arch-cortex-m", "executor-thread", "executor-interrupt", "defmt", "integrated-timers"] }
 | 
					embassy-executor = { version = "0.3.3", path = "../../embassy-executor", features = ["nightly", "arch-cortex-m", "executor-thread", "executor-interrupt", "defmt", "integrated-timers"] }
 | 
				
			||||||
embassy-time = { version = "0.1.5", path = "../../embassy-time", features = ["nightly", "unstable-traits", "defmt", "defmt-timestamp-uptime"] }
 | 
					embassy-time = { version = "0.1.5", path = "../../embassy-time", features = ["defmt", "defmt-timestamp-uptime"] }
 | 
				
			||||||
embassy-rp = { version = "0.1.0", path = "../../embassy-rp", features = ["defmt", "unstable-traits", "nightly", "unstable-pac", "time-driver", "critical-section-impl"] }
 | 
					embassy-rp = { version = "0.1.0", path = "../../embassy-rp", features = ["defmt", "unstable-pac", "time-driver", "critical-section-impl"] }
 | 
				
			||||||
embassy-usb = { version = "0.1.0", path = "../../embassy-usb", features = ["defmt"] }
 | 
					embassy-usb = { version = "0.1.0", path = "../../embassy-usb", features = ["defmt"] }
 | 
				
			||||||
embassy-net = { version = "0.2.0", path = "../../embassy-net", features = ["defmt", "nightly", "tcp", "udp", "dhcpv4", "medium-ethernet"] }
 | 
					embassy-net = { version = "0.2.0", path = "../../embassy-net", features = ["defmt", "tcp", "udp", "dhcpv4", "medium-ethernet"] }
 | 
				
			||||||
embassy-net-wiznet = { version = "0.1.0", path = "../../embassy-net-wiznet", features = ["defmt"] }
 | 
					embassy-net-wiznet = { version = "0.1.0", path = "../../embassy-net-wiznet", features = ["defmt"] }
 | 
				
			||||||
embassy-futures = { version = "0.1.0", path = "../../embassy-futures" }
 | 
					embassy-futures = { version = "0.1.0", path = "../../embassy-futures" }
 | 
				
			||||||
embassy-usb-logger = { version = "0.1.0", path = "../../embassy-usb-logger" }
 | 
					embassy-usb-logger = { version = "0.1.0", path = "../../embassy-usb-logger" }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,8 +9,7 @@
 | 
				
			|||||||
#![no_std]
 | 
					#![no_std]
 | 
				
			||||||
#![no_main]
 | 
					#![no_main]
 | 
				
			||||||
#![feature(type_alias_impl_trait)]
 | 
					#![feature(type_alias_impl_trait)]
 | 
				
			||||||
#![feature(async_fn_in_trait)]
 | 
					#![allow(async_fn_in_trait)]
 | 
				
			||||||
#![allow(stable_features, unknown_lints, async_fn_in_trait)]
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
use defmt::{info, panic, trace};
 | 
					use defmt::{info, panic, trace};
 | 
				
			||||||
use embassy_executor::Spawner;
 | 
					use embassy_executor::Spawner;
 | 
				
			||||||
@@ -148,7 +147,7 @@ async fn usb_read<'d, T: Instance + 'd>(
 | 
				
			|||||||
        let n = usb_rx.read_packet(&mut buf).await?;
 | 
					        let n = usb_rx.read_packet(&mut buf).await?;
 | 
				
			||||||
        let data = &buf[..n];
 | 
					        let data = &buf[..n];
 | 
				
			||||||
        trace!("USB IN: {:x}", data);
 | 
					        trace!("USB IN: {:x}", data);
 | 
				
			||||||
        uart_pipe_writer.write(data).await;
 | 
					        (*uart_pipe_writer).write(data).await;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -159,7 +158,7 @@ async fn usb_write<'d, T: Instance + 'd>(
 | 
				
			|||||||
) -> Result<(), Disconnected> {
 | 
					) -> Result<(), Disconnected> {
 | 
				
			||||||
    let mut buf = [0; 64];
 | 
					    let mut buf = [0; 64];
 | 
				
			||||||
    loop {
 | 
					    loop {
 | 
				
			||||||
        let n = usb_pipe_reader.read(&mut buf).await;
 | 
					        let n = (*usb_pipe_reader).read(&mut buf).await;
 | 
				
			||||||
        let data = &buf[..n];
 | 
					        let data = &buf[..n];
 | 
				
			||||||
        trace!("USB OUT: {:x}", data);
 | 
					        trace!("USB OUT: {:x}", data);
 | 
				
			||||||
        usb_tx.write_packet(&data).await?;
 | 
					        usb_tx.write_packet(&data).await?;
 | 
				
			||||||
@@ -179,7 +178,7 @@ async fn uart_read(
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        let data = &buf[..n];
 | 
					        let data = &buf[..n];
 | 
				
			||||||
        trace!("UART IN: {:x}", buf);
 | 
					        trace!("UART IN: {:x}", buf);
 | 
				
			||||||
        usb_pipe_writer.write(data).await;
 | 
					        (*usb_pipe_writer).write(data).await;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -190,7 +189,7 @@ async fn uart_write(
 | 
				
			|||||||
) -> ! {
 | 
					) -> ! {
 | 
				
			||||||
    let mut buf = [0; 64];
 | 
					    let mut buf = [0; 64];
 | 
				
			||||||
    loop {
 | 
					    loop {
 | 
				
			||||||
        let n = uart_pipe_reader.read(&mut buf).await;
 | 
					        let n = (*uart_pipe_reader).read(&mut buf).await;
 | 
				
			||||||
        let data = &buf[..n];
 | 
					        let data = &buf[..n];
 | 
				
			||||||
        trace!("UART OUT: {:x}", data);
 | 
					        trace!("UART OUT: {:x}", data);
 | 
				
			||||||
        let _ = uart_tx.write(&data).await;
 | 
					        let _ = uart_tx.write(&data).await;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,8 +4,7 @@
 | 
				
			|||||||
#![no_std]
 | 
					#![no_std]
 | 
				
			||||||
#![no_main]
 | 
					#![no_main]
 | 
				
			||||||
#![feature(type_alias_impl_trait)]
 | 
					#![feature(type_alias_impl_trait)]
 | 
				
			||||||
#![feature(async_fn_in_trait)]
 | 
					#![allow(async_fn_in_trait)]
 | 
				
			||||||
#![allow(stable_features, unknown_lints, async_fn_in_trait)]
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
use core::str::from_utf8;
 | 
					use core::str::from_utf8;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,8 +4,7 @@
 | 
				
			|||||||
#![no_std]
 | 
					#![no_std]
 | 
				
			||||||
#![no_main]
 | 
					#![no_main]
 | 
				
			||||||
#![feature(type_alias_impl_trait)]
 | 
					#![feature(type_alias_impl_trait)]
 | 
				
			||||||
#![feature(async_fn_in_trait)]
 | 
					#![allow(async_fn_in_trait)]
 | 
				
			||||||
#![allow(stable_features, unknown_lints, async_fn_in_trait)]
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
use core::str;
 | 
					use core::str;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,8 +4,7 @@
 | 
				
			|||||||
#![no_std]
 | 
					#![no_std]
 | 
				
			||||||
#![no_main]
 | 
					#![no_main]
 | 
				
			||||||
#![feature(type_alias_impl_trait)]
 | 
					#![feature(type_alias_impl_trait)]
 | 
				
			||||||
#![feature(async_fn_in_trait)]
 | 
					#![allow(async_fn_in_trait)]
 | 
				
			||||||
#![allow(stable_features, unknown_lints, async_fn_in_trait)]
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
use core::str::from_utf8;
 | 
					use core::str::from_utf8;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user