blob: 32a4ebbc4b2d443dea3649a7fe9e91468eb64d10 [file] [log] [blame]
#![feature(alloc)]
#![no_std]
extern crate alloc;
extern crate tock;
use alloc::string::String;
use alloc::vec::Vec;
use tock::console::Console;
use tock::ipc;
use tock::ipc::IpcClientCallback;
use tock::ipc::ServerHandle;
use tock::timer;
use tock::timer::Duration;
fn main() {
let mut server_buf = ipc::reserve_shared_buffer();
let mut my_buf = ipc::reserve_shared_buffer();
let mut console = Console::new();
// This sleep is neccessary to assure, that during installation of
// the client/server pair the tests are only run once.
timer::sleep(Duration::from_ms(3000));
console.write(String::from("[test-results]\n"));
let mut string = String::from("heap_test = \"Heap ");
string.push_str("works.\"\n");
console.write(string);
let mut server = ServerHandle::discover_service(String::from("hardware_test_server")).unwrap();
let mut payload: [u8; 32] = [0; 32];
let m = String::from("client");
let b = m.as_bytes();
let l = b.len();
payload[..l].clone_from_slice(b);
let mut handle = server.share(&mut server_buf).unwrap();
handle.write_bytes(&payload);
let mut callback = IpcClientCallback::new(|_: usize, _: usize| {
handle.read_bytes(&mut my_buf.buffer);
let filtered = my_buf
.buffer
.iter()
.cloned()
.filter(|&x| x != 0)
.collect::<Vec<_>>();
let s = String::from_utf8_lossy(&filtered);
console.write(String::from(s).clone());
console.write(String::from("test=\"done\"\n"));
});
let handle = server.subscribe_callback(&mut callback);
server.notify().unwrap();
for _ in 0.. {
timer::sleep(Duration::from_ms(500))
}
handle.unwrap();
}