From 7c51ee47b586202c28617433a2fee8edbeaab44b Mon Sep 17 00:00:00 2001 From: Daniel Bulant Date: Mon, 4 May 2026 12:38:00 +0200 Subject: [PATCH] working tcp --- pico/src/main.rs | 45 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/pico/src/main.rs b/pico/src/main.rs index a8f0d0e..c27d1da 100644 --- a/pico/src/main.rs +++ b/pico/src/main.rs @@ -2,6 +2,8 @@ #![no_main] use arrayvec::ArrayVec; +use core::convert::Infallible; +use core::ops::Deref; use core::str::FromStr; use embassy_net::tcp::ConnectError; use embedded_io::ReadReady; @@ -191,7 +193,7 @@ async fn main(spawner: Spawner) { info!("Connected to {:?}", socket.remote_endpoint()); let delay = Duration::from_millis(100); - let mut buffer = ArrayVec::::new(); + let mut buffer = WriteBuffer::<1024>::new(); loop { let in1 = in1.is_low(); let in2 = in2.is_low(); @@ -201,7 +203,7 @@ async fn main(spawner: Spawner) { { use embedded_io::Write; let _ = core::writeln!( - &mut buffer[..], + &mut buffer, "in1={} in2={} in3={} in4={} angle={}", in1, in2, @@ -234,6 +236,45 @@ async fn main(spawner: Spawner) { } } +struct WriteBuffer(ArrayVec); + +impl Deref for WriteBuffer { + type Target = [u8]; + + fn deref(&self) -> &Self::Target { + &self.0 + } +} + +impl WriteBuffer { + fn new() -> Self { + Self(ArrayVec::new()) + } +} + +impl embedded_io::ErrorType for WriteBuffer { + type Error = Infallible; +} + +impl embedded_io::Write for WriteBuffer { + #[inline] + fn write(&mut self, buf: &[u8]) -> Result { + let _ = self.0.try_extend_from_slice(buf); //silently fails! + Ok(buf.len()) + } + + #[inline] + fn write_all(&mut self, buf: &[u8]) -> Result<(), Self::Error> { + self.write(buf)?; + Ok(()) + } + + #[inline] + fn flush(&mut self) -> Result<(), Self::Error> { + Ok(()) + } +} + async fn wait_for_config(stack: Stack<'static>) -> embassy_net::StaticConfigV4 { loop { if let Some(config) = stack.config_v4() {