aboutsummaryrefslogtreecommitdiff
path: root/embassy-std-examples
diff options
context:
space:
mode:
Diffstat (limited to 'embassy-std-examples')
-rw-r--r--embassy-std-examples/Cargo.toml14
-rw-r--r--embassy-std-examples/src/bin/serial.rs59
-rw-r--r--embassy-std-examples/src/bin/tick.rs31
-rw-r--r--embassy-std-examples/src/serial_port.rs71
4 files changed, 0 insertions, 175 deletions
diff --git a/embassy-std-examples/Cargo.toml b/embassy-std-examples/Cargo.toml
deleted file mode 100644
index 0998899c8..000000000
--- a/embassy-std-examples/Cargo.toml
+++ /dev/null
@@ -1,14 +0,0 @@
1[package]
2authors = ["Dario Nieuwenhuis <[email protected]>"]
3edition = "2018"
4name = "embassy-std-examples"
5version = "0.1.0"
6
7[dependencies]
8async-io = "1.3.1"
9embassy = { version = "0.1.0", path = "../embassy", features = ["log"] }
10embassy-std = { version = "0.1.0", path = "../embassy-std" }
11env_logger = "0.8.2"
12futures = { version = "0.3.8", default-features = false, features = ["async-await"] }
13log = "0.4.11"
14nix = "0.19.1"
diff --git a/embassy-std-examples/src/bin/serial.rs b/embassy-std-examples/src/bin/serial.rs
deleted file mode 100644
index 1b22dc0de..000000000
--- a/embassy-std-examples/src/bin/serial.rs
+++ /dev/null
@@ -1,59 +0,0 @@
1#![feature(min_type_alias_impl_trait)]
2#![feature(impl_trait_in_bindings)]
3#![feature(type_alias_impl_trait)]
4#![allow(incomplete_features)]
5
6#[path = "../serial_port.rs"]
7mod serial_port;
8
9use async_io::Async;
10use embassy::io::AsyncBufReadExt;
11use embassy::util::Forever;
12use embassy_std::Executor;
13use log::*;
14use nix::sys::termios;
15
16use self::serial_port::SerialPort;
17
18#[embassy::task]
19async fn run() {
20 // Open the serial port.
21 let baudrate = termios::BaudRate::B115200;
22 let port = SerialPort::new("/dev/ttyACM0", baudrate).unwrap();
23 //let port = Spy::new(port);
24
25 // Use async_io's reactor for async IO.
26 // This demonstrates how embassy's executor can drive futures from another IO library.
27 // Essentially, async_io::Async converts from AsRawFd+Read+Write to futures's AsyncRead+AsyncWrite
28 let port = Async::new(port).unwrap();
29
30 // This implements futures's AsyncBufRead based on futures's AsyncRead
31 let port = futures::io::BufReader::new(port);
32
33 // We can then use FromStdIo to convert from futures's AsyncBufRead+AsyncWrite
34 // to embassy's AsyncBufRead+AsyncWrite
35 let mut port = embassy::io::FromStdIo::new(port);
36
37 info!("Serial opened!");
38
39 loop {
40 let mut buf = [0u8; 256];
41 let n = port.read(&mut buf).await.unwrap();
42 info!("read {:?}", &buf[..n]);
43 }
44}
45
46static EXECUTOR: Forever<Executor> = Forever::new();
47
48fn main() {
49 env_logger::builder()
50 .filter_level(log::LevelFilter::Debug)
51 .filter_module("async_io", log::LevelFilter::Info)
52 .format_timestamp_nanos()
53 .init();
54
55 let executor = EXECUTOR.put(Executor::new());
56 executor.run(|spawner| {
57 spawner.spawn(run()).unwrap();
58 });
59}
diff --git a/embassy-std-examples/src/bin/tick.rs b/embassy-std-examples/src/bin/tick.rs
deleted file mode 100644
index 6f30edb34..000000000
--- a/embassy-std-examples/src/bin/tick.rs
+++ /dev/null
@@ -1,31 +0,0 @@
1#![feature(min_type_alias_impl_trait)]
2#![feature(impl_trait_in_bindings)]
3#![feature(type_alias_impl_trait)]
4#![allow(incomplete_features)]
5
6use embassy::time::{Duration, Timer};
7use embassy::util::Forever;
8use embassy_std::Executor;
9use log::*;
10
11#[embassy::task]
12async fn run() {
13 loop {
14 info!("tick");
15 Timer::after(Duration::from_secs(1)).await;
16 }
17}
18
19static EXECUTOR: Forever<Executor> = Forever::new();
20
21fn main() {
22 env_logger::builder()
23 .filter_level(log::LevelFilter::Debug)
24 .format_timestamp_nanos()
25 .init();
26
27 let executor = EXECUTOR.put(Executor::new());
28 executor.run(|spawner| {
29 spawner.spawn(run()).unwrap();
30 });
31}
diff --git a/embassy-std-examples/src/serial_port.rs b/embassy-std-examples/src/serial_port.rs
deleted file mode 100644
index 7ac1b1edb..000000000
--- a/embassy-std-examples/src/serial_port.rs
+++ /dev/null
@@ -1,71 +0,0 @@
1use nix::fcntl::OFlag;
2use nix::sys::termios;
3use nix::Error;
4use std::io;
5use std::os::unix::io::{AsRawFd, RawFd};
6
7pub struct SerialPort {
8 fd: RawFd,
9}
10
11impl SerialPort {
12 pub fn new<'a, P: ?Sized + nix::NixPath>(
13 path: &P,
14 baudrate: termios::BaudRate,
15 ) -> io::Result<Self> {
16 let fd = nix::fcntl::open(
17 path,
18 OFlag::O_RDWR | OFlag::O_NOCTTY | OFlag::O_NONBLOCK,
19 nix::sys::stat::Mode::empty(),
20 )
21 .map_err(to_io_error)?;
22
23 let mut cfg = termios::tcgetattr(fd).map_err(to_io_error)?;
24 cfg.input_flags = termios::InputFlags::empty();
25 cfg.output_flags = termios::OutputFlags::empty();
26 cfg.control_flags = termios::ControlFlags::empty();
27 cfg.local_flags = termios::LocalFlags::empty();
28 termios::cfmakeraw(&mut cfg);
29 cfg.input_flags |= termios::InputFlags::IGNBRK;
30 cfg.control_flags |= termios::ControlFlags::CREAD;
31 //cfg.control_flags |= termios::ControlFlags::CRTSCTS;
32 termios::cfsetospeed(&mut cfg, baudrate).map_err(to_io_error)?;
33 termios::cfsetispeed(&mut cfg, baudrate).map_err(to_io_error)?;
34 termios::cfsetspeed(&mut cfg, baudrate).map_err(to_io_error)?;
35 // Set VMIN = 1 to block until at least one character is received.
36 cfg.control_chars[termios::SpecialCharacterIndices::VMIN as usize] = 1;
37 termios::tcsetattr(fd, termios::SetArg::TCSANOW, &cfg).map_err(to_io_error)?;
38 termios::tcflush(fd, termios::FlushArg::TCIOFLUSH).map_err(to_io_error)?;
39
40 Ok(Self { fd })
41 }
42}
43
44impl AsRawFd for SerialPort {
45 fn as_raw_fd(&self) -> RawFd {
46 self.fd
47 }
48}
49
50impl io::Read for SerialPort {
51 fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
52 nix::unistd::read(self.fd, buf).map_err(to_io_error)
53 }
54}
55
56impl io::Write for SerialPort {
57 fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
58 nix::unistd::write(self.fd, buf).map_err(to_io_error)
59 }
60
61 fn flush(&mut self) -> io::Result<()> {
62 Ok(())
63 }
64}
65
66fn to_io_error(e: Error) -> io::Error {
67 match e {
68 Error::Sys(errno) => errno.into(),
69 e => io::Error::new(io::ErrorKind::InvalidInput, e),
70 }
71}