From dff03ecfc74d6af716637888338ebfa99ab7a027 Mon Sep 17 00:00:00 2001 From: Dario Nieuwenhuis Date: Wed, 2 Jun 2021 01:30:07 +0200 Subject: Move examples to a subdirectory --- examples/std/src/bin/serial.rs | 59 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 examples/std/src/bin/serial.rs (limited to 'examples/std/src/bin/serial.rs') diff --git a/examples/std/src/bin/serial.rs b/examples/std/src/bin/serial.rs new file mode 100644 index 000000000..1b22dc0de --- /dev/null +++ b/examples/std/src/bin/serial.rs @@ -0,0 +1,59 @@ +#![feature(min_type_alias_impl_trait)] +#![feature(impl_trait_in_bindings)] +#![feature(type_alias_impl_trait)] +#![allow(incomplete_features)] + +#[path = "../serial_port.rs"] +mod serial_port; + +use async_io::Async; +use embassy::io::AsyncBufReadExt; +use embassy::util::Forever; +use embassy_std::Executor; +use log::*; +use nix::sys::termios; + +use self::serial_port::SerialPort; + +#[embassy::task] +async fn run() { + // Open the serial port. + let baudrate = termios::BaudRate::B115200; + let port = SerialPort::new("/dev/ttyACM0", baudrate).unwrap(); + //let port = Spy::new(port); + + // Use async_io's reactor for async IO. + // This demonstrates how embassy's executor can drive futures from another IO library. + // Essentially, async_io::Async converts from AsRawFd+Read+Write to futures's AsyncRead+AsyncWrite + let port = Async::new(port).unwrap(); + + // This implements futures's AsyncBufRead based on futures's AsyncRead + let port = futures::io::BufReader::new(port); + + // We can then use FromStdIo to convert from futures's AsyncBufRead+AsyncWrite + // to embassy's AsyncBufRead+AsyncWrite + let mut port = embassy::io::FromStdIo::new(port); + + info!("Serial opened!"); + + loop { + let mut buf = [0u8; 256]; + let n = port.read(&mut buf).await.unwrap(); + info!("read {:?}", &buf[..n]); + } +} + +static EXECUTOR: Forever = Forever::new(); + +fn main() { + env_logger::builder() + .filter_level(log::LevelFilter::Debug) + .filter_module("async_io", log::LevelFilter::Info) + .format_timestamp_nanos() + .init(); + + let executor = EXECUTOR.put(Executor::new()); + executor.run(|spawner| { + spawner.spawn(run()).unwrap(); + }); +} -- cgit