UART

Using the UART is similar to using the USB serial, because the uart::Uart::new(uart_id) object implements serial::Serial, where uart_id is the UART index. The uart::count() function returns how many UARTs are available on the device. UART indices must be smaller than this count.

It is usually a good idea to write code that is generic over the serial implementation. This can be done by using a serial variable implementing serial::Serial. This variable may be instantiated differently based on a compilation feature:

#[cfg(feature = "serial_uart")]
let serial = uart::Uart::new(0).unwrap();
#[cfg(feature = "serial_usb")]
let serial = usb::serial::UsbSerial;

serial::write_all(&serial, b"hello").unwrap();

Host platforms don't have a real UART. Instead they create a UNIX socket. You can connect to such a UART by connecting to the UNIX socket. In a terminal dedicated for the connection (you will need to close the terminal to close the connection) and from the directory where the host platform is running, you can run:

socat -,cfmakeraw UNIX-CONNECT:wasefire/host/uart0

You can install socat with sudo apt-get install socat.