From 17f5e33be9598fb9d5e9bf09a812a1fc7ed35a98 Mon Sep 17 00:00:00 2001
From: Matt Johnston <matt@ucc.asn.au>
Date: Tue, 15 Aug 2023 23:35:17 +0800
Subject: [PATCH] Bump embassy version

Required updating embedded-io-async too
---
 Cargo.lock                           | 118 ++++++++++++++++-----------
 Cargo.toml                           |  35 ++++----
 async/Cargo.toml                     |   4 +-
 async/examples/serv1.rs              |   2 +-
 async/examples/sunsetc.rs            |   2 +-
 async/src/cmdline_client.rs          |   2 +-
 embassy/Cargo.toml                   |   2 +-
 embassy/demos/common/Cargo.toml      |   4 +-
 embassy/demos/common/src/server.rs   |   4 +-
 embassy/demos/picow/Cargo.toml       |   2 +-
 embassy/demos/picow/src/main.rs      |  12 ++-
 embassy/demos/picow/src/picowmenu.rs |  14 ++--
 embassy/demos/picow/src/takepipe.rs  |  18 ++--
 embassy/demos/picow/src/usbserial.rs |  12 +--
 embassy/demos/std/Cargo.toml         |   2 +-
 embassy/demos/std/src/main.rs        |   2 +-
 embassy/src/client.rs                |   6 +-
 embassy/src/embassy_channel.rs       |  22 ++---
 embassy/src/embassy_sunset.rs        |  24 +++---
 embassy/src/server.rs                |   6 +-
 src/error.rs                         |  10 +++
 21 files changed, 168 insertions(+), 135 deletions(-)

diff --git a/Cargo.lock b/Cargo.lock
index 4561745..4b52792 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -564,7 +564,7 @@ dependencies = [
 [[package]]
 name = "cyw43"
 version = "0.1.0"
-source = "git+https://github.com/embassy-rs/embassy/?rev=4d60c715e683aaadf25d9f066bde805c725fefb4#4d60c715e683aaadf25d9f066bde805c725fefb4"
+source = "git+https://github.com/embassy-rs/embassy/?rev=b6b44480457d272aace977e885d5dba252fd2bed#b6b44480457d272aace977e885d5dba252fd2bed"
 dependencies = [
  "atomic-polyfill 0.1.11",
  "cortex-m",
@@ -572,7 +572,7 @@ dependencies = [
  "defmt",
  "embassy-futures",
  "embassy-net-driver-channel",
- "embassy-sync 0.2.0 (git+https://github.com/embassy-rs/embassy/?rev=4d60c715e683aaadf25d9f066bde805c725fefb4)",
+ "embassy-sync 0.2.0 (git+https://github.com/embassy-rs/embassy/?rev=b6b44480457d272aace977e885d5dba252fd2bed)",
  "embassy-time",
  "embedded-hal 1.0.0-alpha.11",
  "futures",
@@ -582,7 +582,7 @@ dependencies = [
 [[package]]
 name = "cyw43-pio"
 version = "0.1.0"
-source = "git+https://github.com/embassy-rs/embassy/?rev=4d60c715e683aaadf25d9f066bde805c725fefb4#4d60c715e683aaadf25d9f066bde805c725fefb4"
+source = "git+https://github.com/embassy-rs/embassy/?rev=b6b44480457d272aace977e885d5dba252fd2bed#b6b44480457d272aace977e885d5dba252fd2bed"
 dependencies = [
  "cyw43",
  "embassy-rp",
@@ -859,10 +859,10 @@ dependencies = [
 [[package]]
 name = "embassy-embedded-hal"
 version = "0.1.0"
-source = "git+https://github.com/embassy-rs/embassy/?rev=4d60c715e683aaadf25d9f066bde805c725fefb4#4d60c715e683aaadf25d9f066bde805c725fefb4"
+source = "git+https://github.com/embassy-rs/embassy/?rev=b6b44480457d272aace977e885d5dba252fd2bed#b6b44480457d272aace977e885d5dba252fd2bed"
 dependencies = [
  "embassy-futures",
- "embassy-sync 0.2.0 (git+https://github.com/embassy-rs/embassy/?rev=4d60c715e683aaadf25d9f066bde805c725fefb4)",
+ "embassy-sync 0.2.0 (git+https://github.com/embassy-rs/embassy/?rev=b6b44480457d272aace977e885d5dba252fd2bed)",
  "embassy-time",
  "embedded-hal 0.2.7",
  "embedded-hal 1.0.0-alpha.11",
@@ -890,8 +890,8 @@ dependencies = [
 
 [[package]]
 name = "embassy-executor"
-version = "0.2.0"
-source = "git+https://github.com/embassy-rs/embassy/?rev=4d60c715e683aaadf25d9f066bde805c725fefb4#4d60c715e683aaadf25d9f066bde805c725fefb4"
+version = "0.2.1"
+source = "git+https://github.com/embassy-rs/embassy/?rev=b6b44480457d272aace977e885d5dba252fd2bed#b6b44480457d272aace977e885d5dba252fd2bed"
 dependencies = [
  "atomic-polyfill 1.0.2",
  "cortex-m",
@@ -906,12 +906,12 @@ dependencies = [
 [[package]]
 name = "embassy-futures"
 version = "0.1.0"
-source = "git+https://github.com/embassy-rs/embassy/?rev=4d60c715e683aaadf25d9f066bde805c725fefb4#4d60c715e683aaadf25d9f066bde805c725fefb4"
+source = "git+https://github.com/embassy-rs/embassy/?rev=b6b44480457d272aace977e885d5dba252fd2bed#b6b44480457d272aace977e885d5dba252fd2bed"
 
 [[package]]
 name = "embassy-hal-internal"
 version = "0.1.0"
-source = "git+https://github.com/embassy-rs/embassy/?rev=4d60c715e683aaadf25d9f066bde805c725fefb4#4d60c715e683aaadf25d9f066bde805c725fefb4"
+source = "git+https://github.com/embassy-rs/embassy/?rev=b6b44480457d272aace977e885d5dba252fd2bed#b6b44480457d272aace977e885d5dba252fd2bed"
 dependencies = [
  "cortex-m",
  "critical-section 1.1.1",
@@ -934,7 +934,7 @@ dependencies = [
 [[package]]
 name = "embassy-macros"
 version = "0.2.0"
-source = "git+https://github.com/embassy-rs/embassy/?rev=4d60c715e683aaadf25d9f066bde805c725fefb4#4d60c715e683aaadf25d9f066bde805c725fefb4"
+source = "git+https://github.com/embassy-rs/embassy/?rev=b6b44480457d272aace977e885d5dba252fd2bed#b6b44480457d272aace977e885d5dba252fd2bed"
 dependencies = [
  "darling 0.20.1",
  "proc-macro2",
@@ -945,15 +945,15 @@ dependencies = [
 [[package]]
 name = "embassy-net"
 version = "0.1.0"
-source = "git+https://github.com/embassy-rs/embassy/?rev=4d60c715e683aaadf25d9f066bde805c725fefb4#4d60c715e683aaadf25d9f066bde805c725fefb4"
+source = "git+https://github.com/embassy-rs/embassy/?rev=b6b44480457d272aace977e885d5dba252fd2bed#b6b44480457d272aace977e885d5dba252fd2bed"
 dependencies = [
  "as-slice 0.2.1",
  "atomic-polyfill 1.0.2",
  "atomic-pool",
  "embassy-net-driver",
- "embassy-sync 0.2.0 (git+https://github.com/embassy-rs/embassy/?rev=4d60c715e683aaadf25d9f066bde805c725fefb4)",
+ "embassy-sync 0.2.0 (git+https://github.com/embassy-rs/embassy/?rev=b6b44480457d272aace977e885d5dba252fd2bed)",
  "embassy-time",
- "embedded-io",
+ "embedded-io-async",
  "embedded-nal-async",
  "futures",
  "generic-array 0.14.7",
@@ -967,22 +967,22 @@ dependencies = [
 [[package]]
 name = "embassy-net-driver"
 version = "0.1.0"
-source = "git+https://github.com/embassy-rs/embassy/?rev=4d60c715e683aaadf25d9f066bde805c725fefb4#4d60c715e683aaadf25d9f066bde805c725fefb4"
+source = "git+https://github.com/embassy-rs/embassy/?rev=b6b44480457d272aace977e885d5dba252fd2bed#b6b44480457d272aace977e885d5dba252fd2bed"
 
 [[package]]
 name = "embassy-net-driver-channel"
 version = "0.1.0"
-source = "git+https://github.com/embassy-rs/embassy/?rev=4d60c715e683aaadf25d9f066bde805c725fefb4#4d60c715e683aaadf25d9f066bde805c725fefb4"
+source = "git+https://github.com/embassy-rs/embassy/?rev=b6b44480457d272aace977e885d5dba252fd2bed#b6b44480457d272aace977e885d5dba252fd2bed"
 dependencies = [
  "embassy-futures",
  "embassy-net-driver",
- "embassy-sync 0.2.0 (git+https://github.com/embassy-rs/embassy/?rev=4d60c715e683aaadf25d9f066bde805c725fefb4)",
+ "embassy-sync 0.2.0 (git+https://github.com/embassy-rs/embassy/?rev=b6b44480457d272aace977e885d5dba252fd2bed)",
 ]
 
 [[package]]
 name = "embassy-net-tuntap"
 version = "0.1.0"
-source = "git+https://github.com/embassy-rs/embassy/?rev=4d60c715e683aaadf25d9f066bde805c725fefb4#4d60c715e683aaadf25d9f066bde805c725fefb4"
+source = "git+https://github.com/embassy-rs/embassy/?rev=b6b44480457d272aace977e885d5dba252fd2bed#b6b44480457d272aace977e885d5dba252fd2bed"
 dependencies = [
  "async-io",
  "embassy-net-driver",
@@ -993,7 +993,7 @@ dependencies = [
 [[package]]
 name = "embassy-net-w5500"
 version = "0.1.0"
-source = "git+https://github.com/embassy-rs/embassy/?rev=4d60c715e683aaadf25d9f066bde805c725fefb4#4d60c715e683aaadf25d9f066bde805c725fefb4"
+source = "git+https://github.com/embassy-rs/embassy/?rev=b6b44480457d272aace977e885d5dba252fd2bed#b6b44480457d272aace977e885d5dba252fd2bed"
 dependencies = [
  "embassy-futures",
  "embassy-net-driver-channel",
@@ -1005,7 +1005,7 @@ dependencies = [
 [[package]]
 name = "embassy-rp"
 version = "0.1.0"
-source = "git+https://github.com/embassy-rs/embassy/?rev=4d60c715e683aaadf25d9f066bde805c725fefb4#4d60c715e683aaadf25d9f066bde805c725fefb4"
+source = "git+https://github.com/embassy-rs/embassy/?rev=b6b44480457d272aace977e885d5dba252fd2bed#b6b44480457d272aace977e885d5dba252fd2bed"
 dependencies = [
  "atomic-polyfill 1.0.2",
  "cfg-if",
@@ -1016,14 +1016,15 @@ dependencies = [
  "embassy-embedded-hal",
  "embassy-futures",
  "embassy-hal-internal",
- "embassy-sync 0.2.0 (git+https://github.com/embassy-rs/embassy/?rev=4d60c715e683aaadf25d9f066bde805c725fefb4)",
+ "embassy-sync 0.2.0 (git+https://github.com/embassy-rs/embassy/?rev=b6b44480457d272aace977e885d5dba252fd2bed)",
  "embassy-time",
  "embassy-usb-driver",
  "embedded-hal 0.2.7",
  "embedded-hal 1.0.0-alpha.11",
  "embedded-hal-async",
  "embedded-hal-nb",
- "embedded-io",
+ "embedded-io 0.5.0",
+ "embedded-io-async",
  "embedded-storage",
  "embedded-storage-async",
  "fixed",
@@ -1045,7 +1046,7 @@ checksum = "a0dad296a6f70bfdc32ef52442a31f98c28e1608893c1cecc9b6f419bab005a0"
 dependencies = [
  "cfg-if",
  "critical-section 1.1.1",
- "embedded-io",
+ "embedded-io 0.4.0",
  "futures-util",
  "heapless",
 ]
@@ -1053,11 +1054,10 @@ dependencies = [
 [[package]]
 name = "embassy-sync"
 version = "0.2.0"
-source = "git+https://github.com/embassy-rs/embassy/?rev=4d60c715e683aaadf25d9f066bde805c725fefb4#4d60c715e683aaadf25d9f066bde805c725fefb4"
+source = "git+https://github.com/embassy-rs/embassy/?rev=b6b44480457d272aace977e885d5dba252fd2bed#b6b44480457d272aace977e885d5dba252fd2bed"
 dependencies = [
  "cfg-if",
  "critical-section 1.1.1",
- "embedded-io",
  "futures-util",
  "heapless",
 ]
@@ -1065,7 +1065,7 @@ dependencies = [
 [[package]]
 name = "embassy-time"
 version = "0.1.2"
-source = "git+https://github.com/embassy-rs/embassy/?rev=4d60c715e683aaadf25d9f066bde805c725fefb4#4d60c715e683aaadf25d9f066bde805c725fefb4"
+source = "git+https://github.com/embassy-rs/embassy/?rev=b6b44480457d272aace977e885d5dba252fd2bed#b6b44480457d272aace977e885d5dba252fd2bed"
 dependencies = [
  "atomic-polyfill 1.0.2",
  "cfg-if",
@@ -1082,11 +1082,11 @@ dependencies = [
 [[package]]
 name = "embassy-usb"
 version = "0.1.0"
-source = "git+https://github.com/embassy-rs/embassy/?rev=4d60c715e683aaadf25d9f066bde805c725fefb4#4d60c715e683aaadf25d9f066bde805c725fefb4"
+source = "git+https://github.com/embassy-rs/embassy/?rev=b6b44480457d272aace977e885d5dba252fd2bed#b6b44480457d272aace977e885d5dba252fd2bed"
 dependencies = [
  "embassy-futures",
  "embassy-net-driver-channel",
- "embassy-sync 0.2.0 (git+https://github.com/embassy-rs/embassy/?rev=4d60c715e683aaadf25d9f066bde805c725fefb4)",
+ "embassy-sync 0.2.0 (git+https://github.com/embassy-rs/embassy/?rev=b6b44480457d272aace977e885d5dba252fd2bed)",
  "embassy-usb-driver",
  "heapless",
  "ssmarshal",
@@ -1096,7 +1096,7 @@ dependencies = [
 [[package]]
 name = "embassy-usb-driver"
 version = "0.1.0"
-source = "git+https://github.com/embassy-rs/embassy/?rev=4d60c715e683aaadf25d9f066bde805c725fefb4#4d60c715e683aaadf25d9f066bde805c725fefb4"
+source = "git+https://github.com/embassy-rs/embassy/?rev=b6b44480457d272aace977e885d5dba252fd2bed#b6b44480457d272aace977e885d5dba252fd2bed"
 dependencies = [
  "defmt",
 ]
@@ -1141,33 +1141,58 @@ name = "embedded-io"
 version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced"
+
+[[package]]
+name = "embedded-io"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "658bbadc628dc286b9ae02f0cb0f5411c056eb7487b72f0083203f115de94060"
 dependencies = [
  "defmt",
- "futures",
+]
+
+[[package]]
+name = "embedded-io-adapters"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8bf42b1ca6e49e960826782e3fb2721b8dac84317790b66d832fa8512edba1"
+dependencies = [
+ "embedded-io 0.5.0",
+ "embedded-io-async",
  "tokio",
 ]
 
+[[package]]
+name = "embedded-io-async"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1394754ad749a560b25a0c70dcd2b66a450824a1311fc475bb2ccbfabe7f8414"
+dependencies = [
+ "defmt",
+ "embedded-io 0.5.0",
+]
+
 [[package]]
 name = "embedded-nal"
-version = "0.6.0"
+version = "0.7.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "db9efecb57ab54fa918730f2874d7d37647169c50fa1357fecb81abee840b113"
+checksum = "447416d161ba378782c13e82b11b267d6d2104b4913679a7c5640e7e94f96ea7"
 dependencies = [
  "heapless",
  "nb 1.1.0",
- "no-std-net 0.5.0",
+ "no-std-net",
 ]
 
 [[package]]
 name = "embedded-nal-async"
-version = "0.4.0"
+version = "0.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "27ce84f518ca912777ec143db235f4d615e3bf8d4e46d507d6ef12daf5b1df98"
+checksum = "e706b5288eceaa582155b24d54e23385429402e4e99ae984f4a0a6a65b635f15"
 dependencies = [
- "embedded-io",
+ "embedded-io-async",
  "embedded-nal",
  "heapless",
- "no-std-net 0.6.0",
+ "no-std-net",
 ]
 
 [[package]]
@@ -1774,12 +1799,6 @@ dependencies = [
  "static_assertions",
 ]
 
-[[package]]
-name = "no-std-net"
-version = "0.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1bcece43b12349917e096cddfa66107277f123e6c96a5aea78711dc601a47152"
-
 [[package]]
 name = "no-std-net"
 version = "0.6.0"
@@ -2721,7 +2740,7 @@ dependencies = [
  "defmt",
  "digest 0.10.7",
  "ed25519-dalek 2.0.0-rc.3",
- "embedded-io",
+ "embedded-io 0.5.0",
  "futures",
  "getrandom 0.2.10",
  "heapless",
@@ -2750,7 +2769,8 @@ dependencies = [
  "argh",
  "embassy-futures",
  "embassy-sync 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "embedded-io",
+ "embedded-io-adapters",
+ "embedded-io-async",
  "futures",
  "heapless",
  "libc",
@@ -2781,7 +2801,7 @@ dependencies = [
  "embassy-net-driver",
  "embassy-sync 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "embassy-time",
- "embedded-io",
+ "embedded-io-async",
  "heapless",
  "hmac",
  "log",
@@ -2805,7 +2825,7 @@ dependencies = [
  "cyw43-pio",
  "defmt",
  "defmt-rtt",
- "embassy-executor 0.2.0",
+ "embassy-executor 0.2.1",
  "embassy-futures",
  "embassy-net",
  "embassy-net-driver",
@@ -2817,7 +2837,7 @@ dependencies = [
  "embassy-usb-driver",
  "embedded-hal 1.0.0-alpha.11",
  "embedded-hal-async",
- "embedded-io",
+ "embedded-io-async",
  "futures",
  "getrandom 0.2.10",
  "heapless",
@@ -2849,7 +2869,7 @@ dependencies = [
  "embassy-net-tuntap",
  "embassy-sync 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "embassy-time",
- "embedded-io",
+ "embedded-io-async",
  "env_logger",
  "heapless",
  "libc",
@@ -2870,7 +2890,7 @@ dependencies = [
  "defmt",
  "embassy-futures",
  "embassy-sync 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "embedded-io",
+ "embedded-io-async",
  "log",
  "pin-utils",
  "sunset",
diff --git a/Cargo.toml b/Cargo.toml
index fa8b5d6..20bc9e5 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -53,7 +53,7 @@ rsa = { version = "0.8", default-features = false, optional = true, features = [
 # TODO: getrandom feature is a workaround for missing ssh-key dependency with rsa. fixed in pending 0.6
 ssh-key = { version = "0.5", default-features = false, optional = true, features = ["getrandom"] }
 
-embedded-io = { version = "0.4", optional = true }
+embedded-io = { version = "0.5", optional = true }
 
 # for debug printing
 pretty-hex = { version = "0.3", default-features = false }
@@ -88,21 +88,26 @@ x25519-dalek = { git = "https://github.com/mkj/curve25519-dalek", branch = "suns
 # ed25519-dalek = { path = "/home/matt/3rd/rs/crypto/curve25519-dalek/ed25519-dalek" }
 # x25519-dalek = { path = "/home/matt/3rd/rs/crypto/curve25519-dalek/x25519-dalek" }
 
-embassy-executor = { git = "https://github.com/embassy-rs/embassy", rev = "4d60c715e683aaadf25d9f066bde805c725fefb4" }
-embassy-futures = { git = "https://github.com/embassy-rs/embassy", rev = "4d60c715e683aaadf25d9f066bde805c725fefb4" }
-embassy-rp = { git = "https://github.com/embassy-rs/embassy", rev = "4d60c715e683aaadf25d9f066bde805c725fefb4" }
-embassy-usb = { git = "https://github.com/embassy-rs/embassy", rev = "4d60c715e683aaadf25d9f066bde805c725fefb4" }
-embassy-time = { git = "https://github.com/embassy-rs/embassy", rev = "4d60c715e683aaadf25d9f066bde805c725fefb4" }
-embassy-usb-driver = { git = "https://github.com/embassy-rs/embassy", rev = "4d60c715e683aaadf25d9f066bde805c725fefb4" }
+embassy-executor = { git = "https://github.com/embassy-rs/embassy", rev = "b6b44480457d272aace977e885d5dba252fd2bed" }
+embassy-futures = { git = "https://github.com/embassy-rs/embassy", rev = "b6b44480457d272aace977e885d5dba252fd2bed" }
+embassy-rp = { git = "https://github.com/embassy-rs/embassy", rev = "b6b44480457d272aace977e885d5dba252fd2bed" }
+embassy-usb = { git = "https://github.com/embassy-rs/embassy", rev = "b6b44480457d272aace977e885d5dba252fd2bed" }
+embassy-time = { git = "https://github.com/embassy-rs/embassy", rev = "b6b44480457d272aace977e885d5dba252fd2bed" }
+embassy-usb-driver = { git = "https://github.com/embassy-rs/embassy", rev = "b6b44480457d272aace977e885d5dba252fd2bed" }
 # for cyw43
-embassy-net = { git = "https://github.com/embassy-rs/embassy", rev = "4d60c715e683aaadf25d9f066bde805c725fefb4" }
-embassy-net-driver-channel = { git = "https://github.com/embassy-rs/embassy", rev = "4d60c715e683aaadf25d9f066bde805c725fefb4" }
-embassy-net-driver = { git = "https://github.com/embassy-rs/embassy", rev = "4d60c715e683aaadf25d9f066bde805c725fefb4" }
-embassy-net-tuntap = { git = "https://github.com/embassy-rs/embassy", rev = "4d60c715e683aaadf25d9f066bde805c725fefb4" }
-
-cyw43 = { git = "https://github.com/embassy-rs/embassy/", rev = "4d60c715e683aaadf25d9f066bde805c725fefb4" }
-cyw43-pio = { git = "https://github.com/embassy-rs/embassy/", rev = "4d60c715e683aaadf25d9f066bde805c725fefb4" }
-embassy-net-w5500 = { git = "https://github.com/embassy-rs/embassy/", rev = "4d60c715e683aaadf25d9f066bde805c725fefb4" }
+embassy-net = { git = "https://github.com/embassy-rs/embassy", rev = "b6b44480457d272aace977e885d5dba252fd2bed" }
+embassy-net-driver-channel = { git = "https://github.com/embassy-rs/embassy", rev = "b6b44480457d272aace977e885d5dba252fd2bed" }
+embassy-net-driver = { git = "https://github.com/embassy-rs/embassy", rev = "b6b44480457d272aace977e885d5dba252fd2bed" }
+embassy-net-tuntap = { git = "https://github.com/embassy-rs/embassy", rev = "b6b44480457d272aace977e885d5dba252fd2bed" }
+
+cyw43 = { git = "https://github.com/embassy-rs/embassy/", rev = "b6b44480457d272aace977e885d5dba252fd2bed" }
+cyw43-pio = { git = "https://github.com/embassy-rs/embassy/", rev = "b6b44480457d272aace977e885d5dba252fd2bed" }
+embassy-net-w5500 = { git = "https://github.com/embassy-rs/embassy/", rev = "b6b44480457d272aace977e885d5dba252fd2bed" }
+
+# embassy-net = { path = "/home/matt/3rd/rs/embassy/embassy-net" }
+# embassy-net-driver = { path = "/home/matt/3rd/rs/embassy/embassy-net-driver" }
+# embassy-net-driver-channel = { path = "/home/matt/3rd/rs/embassy/embassy-net-driver-channel" }
+# embassy-net-tuntap = { path = "/home/matt/3rd/rs/embassy/embassy-net-tuntap" }
 
 # these are mostly applicable to picow, but can't hurt generally
 [profile.dev]
diff --git a/async/Cargo.toml b/async/Cargo.toml
index 9f96ac9..e17a285 100644
--- a/async/Cargo.toml
+++ b/async/Cargo.toml
@@ -21,7 +21,7 @@ embassy-futures = { version = "0.1.0" }
 
 # async feature requires nightly for async fn in trait
 # https://github.com/rust-lang/rust/issues/91611
-embedded-io = { version = "0.4", features = ["async"] }
+embedded-io-async = "0.5"
 
 # "net" for AsyncFd on unix
 tokio = { version = "1.25", features = ["net", "io-util", "signal"] }
@@ -49,7 +49,7 @@ zeroize = "1.5"
 tokio = { version = "1.17", features = ["full"] }
 
 # adapters for tokio and async-std
-embedded-io = { version = "0.4", features = ["tokio"] }
+embedded-io-adapters = { version = "0.5", features = ["tokio-1"] }
 
 simplelog = "0.12"
 # for simplelog
diff --git a/async/examples/serv1.rs b/async/examples/serv1.rs
index a9b8a45..f257f63 100644
--- a/async/examples/serv1.rs
+++ b/async/examples/serv1.rs
@@ -18,7 +18,7 @@ use tokio::sync::oneshot;
 use tokio::runtime::Runtime;
 use tokio::task::spawn_local;
 
-use embedded_io::adapters::FromTokio;
+use embedded_io_adapters::tokio_1::FromTokio;
 
 use sunset::*;
 use sunset_embassy::SSHServer;
diff --git a/async/examples/sunsetc.rs b/async/examples/sunsetc.rs
index 2c2e549..698c86b 100644
--- a/async/examples/sunsetc.rs
+++ b/async/examples/sunsetc.rs
@@ -17,7 +17,7 @@ use sunset_embassy::{SSHClient, SunsetRawMutex};
 
 use sunset_async::{CmdlineClient, AgentClient};
 
-use embedded_io::adapters::FromTokio;
+use embedded_io_adapters::tokio_1::FromTokio;
 
 use zeroize::Zeroizing;
 
diff --git a/async/src/cmdline_client.rs b/async/src/cmdline_client.rs
index 045a66f..faf666d 100644
--- a/async/src/cmdline_client.rs
+++ b/async/src/cmdline_client.rs
@@ -14,7 +14,7 @@ use sunset_embassy::*;
 use std::collections::VecDeque;
 use embassy_sync::channel::{Channel, Sender, Receiver};
 use embassy_sync::signal::Signal;
-use embedded_io::asynch::{Read as _, Write as _};
+use embedded_io_async::{Read as _, Write as _};
 
 use tokio::io::AsyncReadExt;
 use tokio::io::AsyncWriteExt;
diff --git a/embassy/Cargo.toml b/embassy/Cargo.toml
index b3f4709..155f2ee 100644
--- a/embassy/Cargo.toml
+++ b/embassy/Cargo.toml
@@ -9,7 +9,7 @@ license = "0BSD"
 [dependencies]
 embassy-sync = { version = "0.2.0" }
 embassy-futures = { version = "0.1.0" }
-embedded-io = { version = "0.4", features = ["async"] }
+embedded-io-async = "0.5"
 atomic-polyfill = "1.0"
 pin-utils = { version = "0.1" }
 
diff --git a/embassy/demos/common/Cargo.toml b/embassy/demos/common/Cargo.toml
index 393d345..f52c06e 100644
--- a/embassy/demos/common/Cargo.toml
+++ b/embassy/demos/common/Cargo.toml
@@ -18,7 +18,7 @@ embassy-time = { version = "0.1" }
 heapless = "0.7.15"
 # using local fork
 # menu = "0.3"
-embedded-io = { version = "0.4", features = ["async"] }
+embedded-io-async = "0.5"
 sha2 = { version = "0.10", default-features = false }
 hmac = { version = "0.12", default-features = false }
 bcrypt = { version = "0.15", default-features = false }
@@ -29,5 +29,5 @@ log = "0.4"
 pretty-hex = { version = "0.3", default-features = false }
 
 [features]
-defmt = ["dep:defmt", "embedded-io/defmt"]
+defmt = ["dep:defmt", "embedded-io-async/defmt-03"]
 log = ["embassy-net/log"]
diff --git a/embassy/demos/common/src/server.rs b/embassy/demos/common/src/server.rs
index 9fdcca9..725d13b 100644
--- a/embassy/demos/common/src/server.rs
+++ b/embassy/demos/common/src/server.rs
@@ -17,7 +17,7 @@ use embassy_net_driver::Driver;
 use embassy_futures::select::{select, Either};
 use embassy_time::{Duration, Timer};
 
-use embedded_io::asynch;
+use embedded_io_async::Write;
 
 use heapless::String;
 
@@ -263,7 +263,7 @@ pub struct BufOutput {
 
 impl BufOutput {
     pub async fn flush<W>(&mut self, w: &mut W) -> Result<()>
-    where W: asynch::Write + embedded_io::Io<Error = sunset::Error>
+    where W: Write<Error = sunset::Error>
     {
         let mut b = self.s.as_str().as_bytes();
         while b.len() > 0 {
diff --git a/embassy/demos/picow/Cargo.toml b/embassy/demos/picow/Cargo.toml
index e14efbe..3240602 100644
--- a/embassy/demos/picow/Cargo.toml
+++ b/embassy/demos/picow/Cargo.toml
@@ -43,7 +43,7 @@ cortex-m-rt = "0.7.0"
 
 embedded-hal-1 = { package = "embedded-hal", version = "1.0.0-alpha.11" }
 embedded-hal-async = { version = "0.2.0-alpha.1" }
-embedded-io = { version = "0.4", features = ["async", "defmt"] }
+embedded-io-async = "0.5"
 heapless = "0.7.15"
 
 getrandom = { version = "0.2", default-features = false, features = ["custom"]}
diff --git a/embassy/demos/picow/src/main.rs b/embassy/demos/picow/src/main.rs
index b32fad1..b657ac3 100644
--- a/embassy/demos/picow/src/main.rs
+++ b/embassy/demos/picow/src/main.rs
@@ -17,8 +17,7 @@ use {defmt_rtt as _, panic_probe as _};
 use embassy_executor::Spawner;
 use embassy_futures::select::select;
 use embassy_net::{Stack, HardwareAddress, EthernetAddress};
-use embedded_io::asynch::Write as _;
-use embedded_io::{asynch, Io};
+use embedded_io_async::{Write, Read};
 
 use heapless::{String, Vec};
 
@@ -27,7 +26,6 @@ use static_cell::StaticCell;
 use demo_common::menu::Runner as MenuRunner;
 use embassy_sync::blocking_mutex::raw::NoopRawMutex;
 use embassy_sync::signal::Signal;
-use embedded_io::asynch::Read;
 
 use sunset::*;
 use sunset_embassy::{SSHServer, SunsetMutex};
@@ -203,8 +201,8 @@ async fn menu<R, W>(
     state: &'static GlobalState,
 ) -> Result<()>
 where
-    R: asynch::Read + Io<Error = sunset::Error>,
-    W: asynch::Write + Io<Error = sunset::Error>,
+    R: Read<Error = sunset::Error>,
+    W: Write<Error = sunset::Error>,
 {
     let mut menu_buf = [0u8; 64];
     let menu_ctx = picowmenu::MenuCtx::new(state, local);
@@ -251,8 +249,8 @@ pub(crate) async fn serial<R, W>(
     serial_pipe: &'static TakePipe<'static>,
 ) -> Result<()>
 where
-    R: asynch::Read + Io<Error = sunset::Error>,
-    W: asynch::Write + Io<Error = sunset::Error>,
+    R: Read<Error = sunset::Error>,
+    W: Write<Error = sunset::Error>,
 {
     info!("start serial");
     let (mut rx, mut tx) = serial_pipe.take().await;
diff --git a/embassy/demos/picow/src/picowmenu.rs b/embassy/demos/picow/src/picowmenu.rs
index 53b301f..1e498cb 100644
--- a/embassy/demos/picow/src/picowmenu.rs
+++ b/embassy/demos/picow/src/picowmenu.rs
@@ -9,13 +9,13 @@ pub use log::{debug, error, info, log, trace, warn};
 #[cfg(feature = "defmt")]
 pub use defmt::{debug, error, info, panic, trace, warn};
 
-use core::fmt::{Write, Debug, Display};
+use core::fmt::{Write as _, Debug, Display};
 use core::future::{poll_fn, Future};
 use core::ops::DerefMut;
 use core::sync::atomic::Ordering::{Relaxed, SeqCst};
 use core::str::FromStr;
 
-use embedded_io::{asynch, Io};
+use embedded_io_async::{Write as AsyncWrite, Read as AsyncRead, ErrorType};
 
 use embassy_sync::waitqueue::MultiWakerRegistration;
 use embassy_time::Duration;
@@ -99,8 +99,8 @@ impl MenuCtx {
         mut chanw: &mut W,
     ) -> Result<bool>
     where
-        R: asynch::Read + Io<Error = sunset::Error>,
-        W: asynch::Write + Io<Error = sunset::Error>,
+        R: AsyncRead<Error = sunset::Error>,
+        W: AsyncWrite<Error = sunset::Error>,
     {
         if self.switch_usb1 {
             self.switch_usb1 = false;
@@ -527,7 +527,7 @@ fn endis(v: bool) -> &'static str {
     }
 }
 
-fn prkey(context: &mut dyn Write, name: &str, k: &Option<Ed25519PubKey>) {
+fn prkey(context: &mut dyn core::fmt::Write, name: &str, k: &Option<Ed25519PubKey>) {
     if let Some(k) = k {
         let _ = writeln!(context, "{} ed25519 todo", name);
     } else {
@@ -779,8 +779,8 @@ fn do_net_static(_item: &Item<MenuCtx>, args: &[&str], context: &mut MenuCtx) {
 
 // Returns an error on EOF etc.
 pub(crate) async fn request_pw<E>(
-    tx: &mut impl asynch::Write<Error = E>,
-    rx: &mut impl asynch::Read<Error = E>,
+    tx: &mut impl AsyncWrite<Error = E>,
+    rx: &mut impl AsyncRead<Error = E>,
 ) -> Result<String<MAX_PW_LEN>, ()> {
     tx.write_all(b"\r\nEnter Password: ").await.map_err(|_| ())?;
     let mut pw = Vec::<u8, MAX_PW_LEN>::new();
diff --git a/embassy/demos/picow/src/takepipe.rs b/embassy/demos/picow/src/takepipe.rs
index c5011ef..79c126d 100644
--- a/embassy/demos/picow/src/takepipe.rs
+++ b/embassy/demos/picow/src/takepipe.rs
@@ -10,7 +10,7 @@ pub use defmt::{debug, info, warn, panic, error, trace};
 
 use core::ops::DerefMut;
 
-use embedded_io::{asynch, Io};
+use embedded_io_async::{Write, Read, ErrorType};
 
 use embassy_sync::{pipe, mutex::Mutex, signal::Signal};
 use embassy_sync::pipe::Pipe;
@@ -123,25 +123,25 @@ pub(crate) struct TakePipeWrite<'a> {
     pipe: &'a TakePipeStorage,
 }
 
-impl<'a> asynch::Read for TakePipeRead<'a> {
+impl<'a> Read for TakePipeRead<'a> {
     async fn read(&mut self, buf: &mut [u8]) -> sunset::Result<usize> {
         let r = self.pipe.fanin.read(buf).await;
         Ok(r)
     }
 }
 
-impl<'a> asynch::Write for TakePipeWrite<'a> {
+impl<'a> Write for TakePipeWrite<'a> {
     async fn write(&mut self, buf: &[u8]) -> sunset::Result<usize> {
         let r = self.pipe.fanout.write(buf).await;
         Ok(r)
     }
 }
 
-impl Io for TakePipeRead<'_> {
+impl ErrorType for TakePipeRead<'_> {
     type Error = sunset::Error;
 }
 
-impl Io for TakePipeWrite<'_> {
+impl ErrorType for TakePipeWrite<'_> {
     type Error = sunset::Error;
 }
 
@@ -151,7 +151,7 @@ pub(crate) struct TakeRead<'a> {
     counter: u64,
 }
 
-impl asynch::Read for TakeRead<'_> {
+impl Read for TakeRead<'_> {
 
     async fn read(&mut self, buf: &mut [u8]) -> sunset::Result<usize> {
         let p = self.shared.ok_or(sunset::Error::ChannelEOF)?;
@@ -182,7 +182,7 @@ impl asynch::Read for TakeRead<'_> {
     }
 }
 
-impl Io for TakeRead<'_> {
+impl ErrorType for TakeRead<'_> {
     type Error = sunset::Error;
 }
 
@@ -192,7 +192,7 @@ pub(crate) struct TakeWrite<'a> {
     counter: u64,
 }
 
-impl asynch::Write for TakeWrite<'_> {
+impl Write for TakeWrite<'_> {
     async fn write(&mut self, buf: &[u8]) -> sunset::Result<usize> {
         let p = self.shared.ok_or(sunset::Error::ChannelEOF)?;
 
@@ -222,6 +222,6 @@ impl asynch::Write for TakeWrite<'_> {
     }
 }
 
-impl Io for TakeWrite<'_> {
+impl ErrorType for TakeWrite<'_> {
     type Error = sunset::Error;
 }
diff --git a/embassy/demos/picow/src/usbserial.rs b/embassy/demos/picow/src/usbserial.rs
index f4fa29a..86bdad7 100644
--- a/embassy/demos/picow/src/usbserial.rs
+++ b/embassy/demos/picow/src/usbserial.rs
@@ -14,7 +14,7 @@ use embassy_usb::class::cdc_acm::{self, CdcAcmClass, State};
 use embassy_usb::Builder;
 use embassy_usb_driver::Driver;
 
-use embedded_io::{asynch, Io, asynch::BufRead};
+use embedded_io_async::{Read, Write, BufRead, ErrorType};
 
 use sunset_embassy::*;
 
@@ -153,7 +153,7 @@ impl<'a, 'p, D: Driver<'a>> CDCRead<'a, 'p, D> {
     }
 }
 
-impl<'a, D: Driver<'a>> asynch::Read for CDCRead<'a, '_, D> {
+impl<'a, D: Driver<'a>> Read for CDCRead<'a, '_, D> {
     async fn read(&mut self, ret: &mut [u8]) -> sunset::Result<usize> {
         debug_assert!(self.start < self.end || self.end == 0);
 
@@ -175,7 +175,7 @@ impl<'a, D: Driver<'a>> asynch::Read for CDCRead<'a, '_, D> {
     }
 }
 
-impl<'a, D: Driver<'a>> asynch::BufRead for CDCRead<'a, '_, D> {
+impl<'a, D: Driver<'a>> BufRead for CDCRead<'a, '_, D> {
     async fn fill_buf(&mut self) -> sunset::Result<&[u8]> {
         debug_assert!(self.start < self.end || self.end == 0);
 
@@ -207,7 +207,7 @@ impl<'a, D: Driver<'a>> asynch::BufRead for CDCRead<'a, '_, D> {
     }
 }
 
-impl<'a, D: Driver<'a>> Io for CDCRead<'a, '_, D> {
+impl<'a, D: Driver<'a>> ErrorType for CDCRead<'a, '_, D> {
     type Error = sunset::Error;
 }
 
@@ -219,7 +219,7 @@ impl<'a, 'p, D: Driver<'a>> CDCWrite<'a, 'p, D> {
     }
 }
 
-impl<'a, D: Driver<'a>> asynch::Write for CDCWrite<'a, '_, D> {
+impl<'a, D: Driver<'a>> Write for CDCWrite<'a, '_, D> {
     async fn write(&mut self, buf: &[u8]) -> sunset::Result<usize> {
         // limit to 63 so we can ignore dealing with ZLPs for now
         let b = &buf[..buf.len().min(63)];
@@ -228,6 +228,6 @@ impl<'a, D: Driver<'a>> asynch::Write for CDCWrite<'a, '_, D> {
     }
 }
 
-impl<'a, D: Driver<'a>> Io for CDCWrite<'a, '_, D> {
+impl<'a, D: Driver<'a>> ErrorType for CDCWrite<'a, '_, D> {
     type Error = sunset::Error;
 }
diff --git a/embassy/demos/std/Cargo.toml b/embassy/demos/std/Cargo.toml
index bd6393f..797640c 100644
--- a/embassy/demos/std/Cargo.toml
+++ b/embassy/demos/std/Cargo.toml
@@ -17,7 +17,7 @@ static_cell = "1.0"
 log = { version = "0.4" }
 env_logger = "0.9.0"
 
-embedded-io = { version = "0.4", default-features=false, features = ["async"] }
+embedded-io-async = "0.5"
 heapless = "0.7.15"
 
 # for tuntap
diff --git a/embassy/demos/std/src/main.rs b/embassy/demos/std/src/main.rs
index 8c95432..fdef7a5 100644
--- a/embassy/demos/std/src/main.rs
+++ b/embassy/demos/std/src/main.rs
@@ -15,7 +15,7 @@ use rand::rngs::OsRng;
 use rand::RngCore;
 
 use demo_common::menu::Runner as MenuRunner;
-use embedded_io::asynch::Read;
+use embedded_io_async::Read;
 use embassy_sync::signal::Signal;
 use embassy_sync::blocking_mutex::raw::NoopRawMutex;
 use embassy_net_tuntap::TunTapDevice;
diff --git a/embassy/src/client.rs b/embassy/src/client.rs
index 0369a12..ca7c77a 100644
--- a/embassy/src/client.rs
+++ b/embassy/src/client.rs
@@ -1,6 +1,6 @@
 use embassy_sync::mutex::Mutex;
 use embassy_sync::blocking_mutex::raw::RawMutex;
-use embedded_io::asynch;
+use embedded_io_async::{Read, Write};
 
 use sunset::*;
 use sunset::behaviour::UnusedServ;
@@ -25,8 +25,8 @@ impl<'a, C: CliBehaviour> SSHClient<'a, C> {
     }
 
     pub async fn run<B: ?Sized, M: RawMutex>(&self,
-        rsock: &mut impl asynch::Read,
-        wsock: &mut impl asynch::Write,
+        rsock: &mut impl Read,
+        wsock: &mut impl Write,
         b: &Mutex<M, B>) -> Result<()>
         where
             for<'f> Behaviour<'f, C, S>: From<&'f mut B>
diff --git a/embassy/src/embassy_channel.rs b/embassy/src/embassy_channel.rs
index 735e10b..0b20e21 100644
--- a/embassy/src/embassy_channel.rs
+++ b/embassy/src/embassy_channel.rs
@@ -5,7 +5,7 @@
 #[allow(unused_imports)]
 use log::{debug, error, info, log, trace, warn};
 
-use embedded_io::{asynch, Io};
+use embedded_io_async::{Read, Write, ErrorType};
 
 use crate::*;
 use embassy_sunset::EmbassySunset;
@@ -50,17 +50,17 @@ impl<C: CliBehaviour, S: ServBehaviour> Clone for ChanIO<'_, C, S> {
     }
 }
 
-impl<C: CliBehaviour, S: ServBehaviour> Io for ChanIO<'_, C, S> {
+impl<C: CliBehaviour, S: ServBehaviour> ErrorType for ChanIO<'_, C, S> {
     type Error = sunset::Error;
 }
 
-impl<'a, C: CliBehaviour, S: ServBehaviour> asynch::Read for ChanIO<'a, C, S> {
+impl<'a, C: CliBehaviour, S: ServBehaviour> Read for ChanIO<'a, C, S> {
     async fn read(&mut self, buf: &mut [u8]) -> Result<usize, sunset::Error> {
         self.sunset.read_channel(self.num, self.dt, buf).await
     }
 }
 
-impl<'a, C: CliBehaviour, S: ServBehaviour> asynch::Write for ChanIO<'a, C, S> {
+impl<'a, C: CliBehaviour, S: ServBehaviour> Write for ChanIO<'a, C, S> {
     async fn write(&mut self, buf: &[u8]) -> Result<usize, sunset::Error> {
         self.sunset.write_channel(self.num, self.dt, buf).await
     }
@@ -146,37 +146,37 @@ impl<'a, C: CliBehaviour, S: ServBehaviour> ChanOut<'a, C, S> {
     }
 }
 
-impl<C: CliBehaviour, S: ServBehaviour> Io for ChanInOut<'_, C, S> {
+impl<C: CliBehaviour, S: ServBehaviour> ErrorType for ChanInOut<'_, C, S> {
     type Error = sunset::Error;
 }
 
-impl<C: CliBehaviour, S: ServBehaviour> Io for ChanIn<'_, C, S> {
+impl<C: CliBehaviour, S: ServBehaviour> ErrorType for ChanIn<'_, C, S> {
     type Error = sunset::Error;
 }
 
-impl<C: CliBehaviour, S: ServBehaviour> Io for ChanOut<'_, C, S> {
+impl<C: CliBehaviour, S: ServBehaviour> ErrorType for ChanOut<'_, C, S> {
     type Error = sunset::Error;
 }
 
-impl<'a, C: CliBehaviour, S: ServBehaviour> asynch::Read for ChanInOut<'a, C, S> {
+impl<'a, C: CliBehaviour, S: ServBehaviour> Read for ChanInOut<'a, C, S> {
     async fn read(&mut self, buf: &mut [u8]) -> Result<usize, sunset::Error> {
         self.0.read(buf).await
     }
 }
 
-impl<'a, C: CliBehaviour, S: ServBehaviour> asynch::Write for ChanInOut<'a, C, S> {
+impl<'a, C: CliBehaviour, S: ServBehaviour> Write for ChanInOut<'a, C, S> {
     async fn write(&mut self, buf: &[u8]) -> Result<usize, sunset::Error> {
         self.0.write(buf).await
     }
 }
 
-impl<'a, C: CliBehaviour, S: ServBehaviour> asynch::Read for ChanIn<'a, C, S> {
+impl<'a, C: CliBehaviour, S: ServBehaviour> Read for ChanIn<'a, C, S> {
     async fn read(&mut self, buf: &mut [u8]) -> Result<usize, sunset::Error> {
         self.0.read(buf).await
     }
 }
 
-impl<'a, C: CliBehaviour, S: ServBehaviour> asynch::Write for ChanOut<'a, C, S> {
+impl<'a, C: CliBehaviour, S: ServBehaviour> Write for ChanOut<'a, C, S> {
     async fn write(&mut self, buf: &[u8]) -> Result<usize, sunset::Error> {
         self.0.write(buf).await
     }
diff --git a/embassy/src/embassy_sunset.rs b/embassy/src/embassy_sunset.rs
index 1ee2e34..f9806f1 100644
--- a/embassy/src/embassy_sunset.rs
+++ b/embassy/src/embassy_sunset.rs
@@ -18,7 +18,7 @@ use embassy_sync::mutex::Mutex;
 use embassy_sync::signal::Signal;
 use embassy_futures::select::select;
 use embassy_futures::join;
-use embedded_io::{asynch, Io};
+use embedded_io_async::{Read, Write, BufRead};
 
 // thumbv6m has no atomic usize add/sub
 use atomic_polyfill::AtomicUsize;
@@ -121,8 +121,8 @@ impl<'a, C: CliBehaviour, S: ServBehaviour> EmbassySunset<'a, C, S> {
     }
 
     pub async fn run<B: ?Sized, M: RawMutex>(&self,
-        rsock: &mut impl asynch::Read,
-        wsock: &mut impl asynch::Write,
+        rsock: &mut impl Read,
+        wsock: &mut impl Write,
         b: &Mutex<M, B>) -> Result<()>
         where
             for<'f> Behaviour<'f, C, S>: From<&'f mut B>
@@ -517,8 +517,8 @@ impl<'a, C: CliBehaviour, S: ServBehaviour> EmbassySunset<'a, C, S> {
 
 
 pub async fn io_copy<const B: usize, R, W>(r: &mut R, w: &mut W) -> Result<()>
-    where R: asynch::Read+Io<Error=sunset::Error>,
-        W: asynch::Write+Io<Error=sunset::Error>
+    where R: Read<Error=sunset::Error>,
+        W: Write<Error=sunset::Error>
 {
     let mut b = [0u8; B];
     loop {
@@ -527,15 +527,15 @@ pub async fn io_copy<const B: usize, R, W>(r: &mut R, w: &mut W) -> Result<()>
             return sunset::error::ChannelEOF.fail();
         }
         let b = &b[..n];
-        w.write_all(b).await?;
+        w.write_all(b).await?
     }
     #[allow(unreachable_code)]
     Ok::<_, Error>(())
 }
 
 pub async fn io_copy_nowriteerror<const B: usize, R, W>(r: &mut R, w: &mut W) -> Result<()>
-    where R: asynch::Read+Io<Error=sunset::Error>,
-        W: asynch::Write,
+    where R: Read<Error=sunset::Error>,
+        W: Write,
 {
     let mut b = [0u8; B];
     loop {
@@ -553,8 +553,8 @@ pub async fn io_copy_nowriteerror<const B: usize, R, W>(r: &mut R, w: &mut W) ->
 }
 
 pub async fn io_buf_copy<R, W>(r: &mut R, w: &mut W) -> Result<()>
-    where R: asynch::BufRead+Io<Error=sunset::Error>,
-        W: asynch::Write+Io<Error=sunset::Error>
+    where R: BufRead<Error=sunset::Error>,
+        W: Write<Error=sunset::Error>
 {
     loop {
         let b = r.fill_buf().await?;
@@ -570,8 +570,8 @@ pub async fn io_buf_copy<R, W>(r: &mut R, w: &mut W) -> Result<()>
 }
 
 pub async fn io_buf_copy_noreaderror<R, W>(r: &mut R, w: &mut W) -> Result<()>
-    where R: asynch::BufRead,
-        W: asynch::Write+Io<Error=sunset::Error>
+    where R: BufRead,
+        W: Write<Error=sunset::Error>
 {
     loop {
         let b = match r.fill_buf().await {
diff --git a/embassy/src/server.rs b/embassy/src/server.rs
index 7954c5d..5d0e1ae 100644
--- a/embassy/src/server.rs
+++ b/embassy/src/server.rs
@@ -1,6 +1,6 @@
 use embassy_sync::mutex::Mutex;
 use embassy_sync::blocking_mutex::raw::RawMutex;
-use embedded_io::asynch;
+use embedded_io_async::{Read, Write};
 
 use sunset::*;
 use sunset::behaviour::UnusedCli;
@@ -24,8 +24,8 @@ impl<'a, S: ServBehaviour> SSHServer<'a, S> {
     }
 
     pub async fn run<B: ?Sized, M: RawMutex>(&self,
-        rsock: &mut impl asynch::Read,
-        wsock: &mut impl asynch::Write,
+        rsock: &mut impl Read,
+        wsock: &mut impl Write,
         b: &Mutex<M, B>) -> Result<()>
         where
             for<'f> Behaviour<'f, UnusedCli, S>: From<&'f mut B>
diff --git a/src/error.rs b/src/error.rs
index de25bf5..87282c2 100644
--- a/src/error.rs
+++ b/src/error.rs
@@ -204,6 +204,16 @@ impl embedded_io::Error for Error {
     }
 }
 
+#[cfg(feature = "embedded-io")]
+impl From<embedded_io::WriteAllError<Error>> for Error {
+    fn from(e: embedded_io::WriteAllError<Error>) -> Error {
+        match e {
+            embedded_io::WriteAllError::WriteZero => ChannelEOF.build(),
+            embedded_io::WriteAllError::Other(e) => e,
+        }
+    }
+}
+
 pub type Result<T, E = Error> = core::result::Result<T, E>;
 
 pub trait TrapBug<T> {
-- 
GitLab