aboutsummaryrefslogtreecommitdiff
path: root/embassy-std-examples/src/bin
diff options
context:
space:
mode:
authorDario Nieuwenhuis <[email protected]>2021-02-03 05:05:05 +0100
committerDario Nieuwenhuis <[email protected]>2021-02-03 05:05:05 +0100
commit42c9a603bbe0a98db140e252b6ab2ad7eab56425 (patch)
tree2386be4a7b3c9ffb834a73e5be39b8c535832311 /embassy-std-examples/src/bin
parentcbea07716b49d026506a61d261a551ff62c1b6c3 (diff)
Add embassy-std-examples
Diffstat (limited to 'embassy-std-examples/src/bin')
-rw-r--r--embassy-std-examples/src/bin/serial.rs57
-rw-r--r--embassy-std-examples/src/bin/tick.rs29
2 files changed, 86 insertions, 0 deletions
diff --git a/embassy-std-examples/src/bin/serial.rs b/embassy-std-examples/src/bin/serial.rs
new file mode 100644
index 000000000..b66b7de20
--- /dev/null
+++ b/embassy-std-examples/src/bin/serial.rs
@@ -0,0 +1,57 @@
1#![feature(type_alias_impl_trait)]
2
3#[path = "../serial_port.rs"]
4mod serial_port;
5
6use async_io::Async;
7use embassy::executor::task;
8use embassy::io::{AsyncBufRead, AsyncBufReadExt, AsyncWrite, AsyncWriteExt};
9use embassy::util::Forever;
10use embassy_std::Executor;
11use log::*;
12use nix::sys::termios;
13
14use self::serial_port::SerialPort;
15
16#[task]
17async fn run() {
18 // Open the serial port.
19 let baudrate = termios::BaudRate::B115200;
20 let port = SerialPort::new("/dev/ttyACM0", baudrate).unwrap();
21 //let port = Spy::new(port);
22
23 // Use async_io's reactor for async IO.
24 // This demonstrates how embassy's executor can drive futures from another IO library.
25 // Essentially, async_io::Async converts from AsRawFd+Read+Write to futures's AsyncRead+AsyncWrite
26 let port = Async::new(port).unwrap();
27
28 // This implements futures's AsyncBufRead based on futures's AsyncRead
29 let port = futures::io::BufReader::new(port);
30
31 // We can then use FromStdIo to convert from futures's AsyncBufRead+AsyncWrite
32 // to embassy's AsyncBufRead+AsyncWrite
33 let mut port = embassy::io::FromStdIo::new(port);
34
35 info!("Serial opened!");
36
37 loop {
38 let mut buf = [0u8; 256];
39 let n = port.read(&mut buf).await.unwrap();
40 info!("read {:?}", &buf[..n]);
41 }
42}
43
44static EXECUTOR: Forever<Executor> = Forever::new();
45
46fn main() {
47 env_logger::builder()
48 .filter_level(log::LevelFilter::Debug)
49 .filter_module("async_io", log::LevelFilter::Info)
50 .format_timestamp_nanos()
51 .init();
52
53 let executor = EXECUTOR.put(Executor::new());
54 executor.run(|spawner| {
55 spawner.spawn(run()).unwrap();
56 });
57}
diff --git a/embassy-std-examples/src/bin/tick.rs b/embassy-std-examples/src/bin/tick.rs
new file mode 100644
index 000000000..af2305f33
--- /dev/null
+++ b/embassy-std-examples/src/bin/tick.rs
@@ -0,0 +1,29 @@
1#![feature(type_alias_impl_trait)]
2
3use embassy::executor::task;
4use embassy::time::{Duration, Timer};
5use embassy::util::Forever;
6use embassy_std::Executor;
7use log::*;
8
9#[task]
10async fn run() {
11 loop {
12 info!("tick");
13 Timer::after(Duration::from_secs(1)).await;
14 }
15}
16
17static EXECUTOR: Forever<Executor> = Forever::new();
18
19fn main() {
20 env_logger::builder()
21 .filter_level(log::LevelFilter::Debug)
22 .format_timestamp_nanos()
23 .init();
24
25 let executor = EXECUTOR.put(Executor::new());
26 executor.run(|spawner| {
27 spawner.spawn(run()).unwrap();
28 });
29}