blob: e1003e8cd9c87e01c8fe8a2fbf5068564b223e65 [file] [log] [blame]
#![feature(alloc)]
#![no_std]
extern crate alloc;
extern crate tock;
use alloc::string::String;
use alloc::vec::Vec;
use tock::ipc;
use tock::ipc::IpcServerCallback;
use tock::ipc::IpcServerDriver;
#[allow(unreachable_code)]
// Prints the payload and adds one to the first byte.
fn main() {
let mut callback = IpcServerCallback::new(|pid: usize, _: usize, message: &mut [u8]| {
let filtered = message
.iter()
.cloned()
.filter(|&x| x != 0)
.collect::<Vec<u8>>();
let s = String::from_utf8_lossy(&filtered);
if s == String::from("client") {
let m = String::from("test_ipc = \"passed\"\n");
let b = m.as_bytes();
let l = b.len();
message[..l].clone_from_slice(b);
ipc::notify_client(pid);
}
});
let _server = IpcServerDriver::start(&mut callback);
loop {
tock::syscalls::yieldk();
}
_server.unwrap();
}