stm32f3discovery/virtual_uart_rx_test.rs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
// Licensed under the Apache License, Version 2.0 or the MIT License.
// SPDX-License-Identifier: Apache-2.0 OR MIT
// Copyright Tock Contributors 2022.
//! Test reception on the virtualized UART by creating two readers that
//! read in parallel. To add this test, include the line
//! ```
//! virtual_uart_rx_test::run_virtual_uart_receive(mux_uart);
//! ```
//! to the nucleo_446re boot sequence, where `mux_uart` is a
//! `capsules_core::virtualizers::virtual_uart::MuxUart`. There is a 3-byte and a 7-byte read
//! running in parallel. Test that they are both working by typing and seeing
//! that they both get all characters. If you repeatedly type 'a', for example
//! (0x61), you should see something like:
//! ```
//! Starting receive of length 3
//! Virtual uart read complete: CommandComplete:
//! 61
//! 61
//! 61
//! 61
//! 61
//! 61
//! 61
//! Starting receive of length 7
//! Virtual uart read complete: CommandComplete:
//! 61
//! 61
//! 61
//! Starting receive of length 3
//! Virtual uart read complete: CommandComplete:
//! 61
//! 61
//! 61
//! Starting receive of length 3
//! Virtual uart read complete: CommandComplete:
//! 61
//! 61
//! 61
//! 61
//! 61
//! 61
//! 61
//! Starting receive of length 7
//! Virtual uart read complete: CommandComplete:
//! 61
//! 61
//! 61
//! ```
use core::ptr::addr_of_mut;
use capsules_core::test::virtual_uart::TestVirtualUartReceive;
use capsules_core::virtualizers::virtual_uart::{MuxUart, UartDevice};
use kernel::debug;
use kernel::hil::uart::Receive;
use kernel::static_init;
pub unsafe fn run_virtual_uart_receive(mux: &'static MuxUart<'static>) {
debug!("Starting virtual reads.");
let small = static_init_test_receive_small(mux);
let large = static_init_test_receive_large(mux);
small.run();
large.run();
}
unsafe fn static_init_test_receive_small(
mux: &'static MuxUart<'static>,
) -> &'static TestVirtualUartReceive {
static mut SMALL: [u8; 3] = [0; 3];
let device = static_init!(UartDevice<'static>, UartDevice::new(mux, true));
device.setup();
let test = static_init!(
TestVirtualUartReceive,
TestVirtualUartReceive::new(device, &mut *addr_of_mut!(SMALL))
);
device.set_receive_client(test);
test
}
unsafe fn static_init_test_receive_large(
mux: &'static MuxUart<'static>,
) -> &'static TestVirtualUartReceive {
static mut BUFFER: [u8; 7] = [0; 7];
let device = static_init!(UartDevice<'static>, UartDevice::new(mux, true));
device.setup();
let test = static_init!(
TestVirtualUartReceive,
TestVirtualUartReceive::new(device, &mut *addr_of_mut!(BUFFER))
);
device.set_receive_client(test);
test
}