diff --git a/Cargo.lock b/Cargo.lock index 7e7631c54..d34ffc098 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -377,6 +377,7 @@ dependencies = [ "typenum", "utralib", "xous", + "xous-ipc", "xous-names", ] diff --git a/services/fcc-agent/Cargo.toml b/services/fcc-agent/Cargo.toml index efee2af01..e054f114f 100644 --- a/services/fcc-agent/Cargo.toml +++ b/services/fcc-agent/Cargo.toml @@ -14,6 +14,7 @@ log-server = { path = "../log-server" } log = "0.4" typenum = "1.12" xous-names = { path = "../xous-names" } +xous-ipc = {path = "../../xous-ipc"} [target.'cfg(not(any(windows,unix)))'.dependencies] utralib = { path = "../../utralib"} diff --git a/services/fcc-agent/src/main.rs b/services/fcc-agent/src/main.rs index 50992feea..67b01042d 100644 --- a/services/fcc-agent/src/main.rs +++ b/services/fcc-agent/src/main.rs @@ -147,7 +147,7 @@ impl Into for Opcode { } } -use log::{error, info}; +use log::info; use core::fmt::{Error, Write}; use utralib::generated::*; @@ -158,9 +158,6 @@ use heapless::consts::*; use core::convert::TryFrom; -use com::*; - - pub struct Uart { uart_csr: utralib::CSR, rx_conn: xous::CID, @@ -195,7 +192,7 @@ macro_rules! println }); } -fn handle_irq(_irq_no: usize, arg: *mut usize) { +fn handle_irq(_irq_no: usize, _arg: *mut usize) { let uart = unsafe { &mut UART_STRUCT }; while let Some(c) = uart.getc() { @@ -263,8 +260,8 @@ impl Write for Uart { fn was_continuous(cmd: &mut String) -> bool { let mut tokens = Vec::<_, U16>::new(); - for i in 0..16 { - let mut empty: String = String::from(""); + for _ in 0..16 { + let empty: String = String::from(""); tokens.push(empty).unwrap(); } @@ -300,7 +297,7 @@ fn was_continuous(cmd: &mut String) -> bool { false } -fn do_agent(cmd: &mut String, com_cid: xous::CID, pds_list: &mut Vec, U16>, info_csr: &utralib::CSR) -> Result<(), xous::Error> { +fn do_agent(cmd: &mut String, com: &com::Com, pds_list: &mut Vec, U16>, info_csr: &utralib::CSR) -> Result<(), xous::Error> { if false { let tokens: Vec<&str, U16> = cmd.as_mut_str().split(' ').collect(); for token in tokens.iter() { @@ -314,8 +311,8 @@ fn do_agent(cmd: &mut String, com_cid: xous::CID, pds_list: &mut Vec::new(); - for i in 0..16 { - let mut empty: String = String::from(""); + for _ in 0..16 { + let empty: String = String::from(""); tokens.push(empty).unwrap(); } @@ -359,7 +356,7 @@ fn do_agent(cmd: &mut String, com_cid: xous::CID, pds_list: &mut Vec, com_cid: xous::CID, pds_list: &mut Vec = String::from(""); for c in pdsline.chars() { if c != '"' { - stripped.push(c); + stripped.push(c).unwrap(); } } - pds_list.push(stripped); + pds_list.push(stripped).unwrap(); } else if tokens[1].trim() == "read_rx_stats" { println!("rx stats request disabled!!"); - //get_rx_stats_agent(com_cid).unwrap(); + //com.get_rx_stats_agent().unwrap(); } else if tokens[1].trim() == "commit_pds" { let ticktimer = ticktimer_server::Ticktimer::new().expect("Couldn't connect to Ticktimer"); let mut last_time: u64 = ticktimer.elapsed_ms(); for pds in pds_list.iter() { - let mut sendable_string = xous::String::<512>::new(); - write!(&mut sendable_string, "{}", pds); + let mut sendable_string = xous_ipc::String::<512>::new(); + write!(&mut sendable_string, "{}", pds).unwrap(); println!("{}", sendable_string); - send_pds_line(com_cid, &sendable_string); + com.send_pds_line(&sendable_string).unwrap(); loop { - if let Ok(elapsed_time) = ticktimer.elapsed_ms() { - if elapsed_time - last_time > 250 { - last_time = elapsed_time; - break; - } + let elapsed_time = ticktimer.elapsed_ms(); + if elapsed_time - last_time > 250 { + last_time = elapsed_time; + break; } } } pds_list.clear(); } else if tokens[1].trim() == "ec_version" { - let (gitrev, dirty) = get_ec_git_rev(com_cid).unwrap(); + let (gitrev, dirty) = com.get_ec_git_rev().unwrap(); if dirty { println!("ecrev: {:08x} dirty", gitrev); } else { @@ -457,6 +453,8 @@ pub union sl_wfx_indication_data_u { _bindgen_union_align: [u8; 376], } +const SERVER_NAME_FCCAGENT: &str = "_Agent for EMC Testing_"; + #[xous::xous_main] fn xmain() -> ! { /* @@ -477,14 +475,14 @@ fn xmain() -> ! { info!("FCCAGENT: my PID is {}", xous::process::id()); let xns = xous_names::XousNames::new().unwrap(); - let agent_server_sid = xns.register_name(xous::names::SERVER_NAME_FCCAGENT).expect("FCCAGENT: can't register server"); - let agent_server_client = xns.request_connection_blocking(xous::names::SERVER_NAME_FCCAGENT).expect("FCCAGENT: can't connect to COM"); + let agent_server_sid = xns.register_name(SERVER_NAME_FCCAGENT).expect("FCCAGENT: can't register server"); + let agent_server_client = xns.request_connection_blocking(SERVER_NAME_FCCAGENT).expect("FCCAGENT: can't connect to COM"); let ticktimer = ticktimer_server::Ticktimer::new().expect("Couldn't connect to Ticktimer"); let mut uart = Uart::new(agent_server_client); - let com_conn = xns.request_connection_blocking(xous::names::SERVER_NAME_COM).expect("FCCAGENT: can't connect to COM"); + let com = com::Com::new(&xns).unwrap(); let mut cmd_string: String = String::from(""); @@ -503,7 +501,7 @@ fn xmain() -> ! { let mut last_time: u64 = ticktimer.elapsed_ms(); let mut pds_list: Vec, U16> = Vec::new(); let mut repeat = false; - let mut phase = 0; + let mut _phase = 0; loop { let envelope = xous::try_receive_message(agent_server_sid).unwrap(); match envelope { @@ -516,7 +514,7 @@ fn xmain() -> ! { cmd_string.push(c as char).unwrap(); } else { println!(""); - do_agent(&mut cmd_string, com_conn, &mut pds_list, &info_csr,/* &mut gpio */).unwrap(); + do_agent(&mut cmd_string, &com, &mut pds_list, &info_csr,/* &mut gpio */).unwrap(); repeat = was_continuous(&mut cmd_string); // print!("agent@precursor:~$ "); cmd_string.clear(); @@ -535,78 +533,70 @@ fn xmain() -> ! { println!("Throughput on correct frames received: {}", unsafe{stats_u.rx_stats.throughput}); // TODO: fill in more stats output },*/ - _ => println!("Unknown opcode received.") + // _ => println!("Unknown opcode received.") } } } _ => () //xous::yield_slice(), // no message received, idle } // Periodic tasks - if let Ok(elapsed_time) = ticktimer.elapsed_ms() { - if elapsed_time - last_time > 20_000 { - last_time = elapsed_time; + let elapsed_time = ticktimer.elapsed_ms(); + if elapsed_time - last_time > 20_000 { + last_time = elapsed_time; - if repeat { - for pds in pds_list.iter() { - let mut sendable_string = xous::String::<512>::new(); - write!(&mut sendable_string, "{}", pds); - println!("{}", sendable_string); - send_pds_line(com_conn, &sendable_string); - } + if repeat { + for pds in pds_list.iter() { + let mut sendable_string = xous_ipc::String::<512>::new(); + write!(&mut sendable_string, "{}", pds).unwrap(); + println!("{}", sendable_string); + com.send_pds_line(&sendable_string).unwrap(); } - - /* // for testing the PDS API - let mut string_buffer = xous::String::<512>::new(); - write!(&mut string_buffer, "\"{{i:{{a:7,b:1,f:3E8,c:{{a:0,b:0,c:0,d:44}},d:{{a:BB8,b:0,c:0,d:15,e:64,f:4}},e:{{}}}}}}\"").expect("Can't write"); - //write!(&mut string_buffer, "{{i:{{a:7,b:1,f:3E8,c:{{a:0,b:0,c:0,d:44}},d:{{a:BB8,b:0,c:0,d:15,e:64,f:4}},e:{{}}}}}}").expect("Can't write"); - println!("sending line: {}", string_buffer); - send_pds_line(com_conn, &string_buffer); */ - - //// full simulation of commands - /* - if phase == 0 { - info!("FCCAGENT: sending PDS start commands"); - let mut pds1: String = String::from(""); - write!(&mut pds1, "{{j:{{a:0}}}}"); - pds_list.push(pds1); - let mut pds2: String = String::from(""); - write!(&mut pds2, "{{h:{{e:0,a:50,b:0,c:[{{a:[1,E],b:[0,0,0,0,0,0]}}],d:0}},i:{{a:1,b:1,f:F4240,c:{{a:0,b:0,c:0,d:44}},d:{{a:5DC,b:0,c:0,d:0,e:0,f:1}},e:{{}}}}}}"); - pds_list.push(pds2); - let mut pds3: String = String::from(""); - write!(&mut pds3, "{{i:{{a:1,b:1,f:F4240,c:{{a:0,b:0,c:0,d:44}},d:{{a:5DC,b:0,c:0,d:0,e:0,f:1}},e:{{}}}}}}"); - pds_list.push(pds3); - - let mut cmd: String = String::from(""); - write!(&mut cmd, "wfx_test_agent commit_pds"); - do_agent(&mut cmd, com_conn, &mut pds_list, &info_csr).unwrap(); - phase = 1; - } else if phase == 1 { - info!("FCCAGENT: waiting..."); - phase = 2; - } else if phase == 2 { - info!("FCCAGENT: sending PDS stop commands"); - let mut pds_stop: String = String::from(""); - write!(&mut pds_stop, "{{i:{{a:1,b:1,f:F4240,c:{{a:0,b:0,c:0,d:44}},d:{{a:5DC,b:0,c:0,d:0,e:64,f:1}},e:{{}}}}}}"); - pds_list.push(pds_stop); - - let mut cmd: String = String::from(""); - write!(&mut cmd, "wfx_test_agent commit_pds"); - do_agent(&mut cmd, com_conn, &mut pds_list, &info_csr).unwrap(); - phase = 3; - } else { - info!("FCCAGENT: waiting again..."); - phase = 0; - } - */ - } - } else { - error!("error requesting ticktimer!") + + /* // for testing the PDS API + let mut string_buffer = xous_ipc::String::<512>::new(); + write!(&mut string_buffer, "\"{{i:{{a:7,b:1,f:3E8,c:{{a:0,b:0,c:0,d:44}},d:{{a:BB8,b:0,c:0,d:15,e:64,f:4}},e:{{}}}}}}\"").expect("Can't write"); + //write!(&mut string_buffer, "{{i:{{a:7,b:1,f:3E8,c:{{a:0,b:0,c:0,d:44}},d:{{a:BB8,b:0,c:0,d:15,e:64,f:4}},e:{{}}}}}}").expect("Can't write"); + println!("sending line: {}", string_buffer); + com.send_pds_line(&string_buffer); */ + + //// full simulation of commands + /* + if phase == 0 { + info!("FCCAGENT: sending PDS start commands"); + let mut pds1: String = String::from(""); + write!(&mut pds1, "{{j:{{a:0}}}}"); + pds_list.push(pds1); + let mut pds2: String = String::from(""); + write!(&mut pds2, "{{h:{{e:0,a:50,b:0,c:[{{a:[1,E],b:[0,0,0,0,0,0]}}],d:0}},i:{{a:1,b:1,f:F4240,c:{{a:0,b:0,c:0,d:44}},d:{{a:5DC,b:0,c:0,d:0,e:0,f:1}},e:{{}}}}}}"); + pds_list.push(pds2); + let mut pds3: String = String::from(""); + write!(&mut pds3, "{{i:{{a:1,b:1,f:F4240,c:{{a:0,b:0,c:0,d:44}},d:{{a:5DC,b:0,c:0,d:0,e:0,f:1}},e:{{}}}}}}"); + pds_list.push(pds3); + + let mut cmd: String = String::from(""); + write!(&mut cmd, "wfx_test_agent commit_pds"); + com.do_agent(&mut cmd, &mut pds_list, &info_csr).unwrap(); + phase = 1; + } else if phase == 1 { + info!("FCCAGENT: waiting..."); + phase = 2; + } else if phase == 2 { + info!("FCCAGENT: sending PDS stop commands"); + let mut pds_stop: String = String::from(""); + write!(&mut pds_stop, "{{i:{{a:1,b:1,f:F4240,c:{{a:0,b:0,c:0,d:44}},d:{{a:5DC,b:0,c:0,d:0,e:64,f:1}},e:{{}}}}}}"); + pds_list.push(pds_stop); + + let mut cmd: String = String::from(""); + write!(&mut cmd, "wfx_test_agent commit_pds"); + com.do_agent(&mut cmd, &mut pds_list, &info_csr).unwrap(); + phase = 3; + } else { + info!("FCCAGENT: waiting again..."); + phase = 0; + } + */ + } } - // clean up our program - log::trace!("main loop exit, destroying servers"); - xns.unregister_server(agent_server_sid).unwrap(); - xous::destroy_server(agent_server_sid).unwrap(); - log::trace!("quitting"); } diff --git a/xous-rs/src/names.rs b/xous-rs/src/names.rs index ceb7977df..7ed15dd52 100644 --- a/xous-rs/src/names.rs +++ b/xous-rs/src/names.rs @@ -10,7 +10,6 @@ pub const SERVER_NAME_IME_PLUGIN_SHELL: &str = "_IME shell plugin_"; pub const SERVER_NAME_SHELL: &str = "_Shell_"; pub const SERVER_NAME_RTC: &str = "_Real time clock application server_"; -pub const SERVER_NAME_FCCAGENT: &str = "_Agent for EMC Testing_"; pub const SERVER_NAME_BENCHMARK: &str= "_Benchmark target_"; /* diff --git a/xtask/src/main.rs b/xtask/src/main.rs index 041248f00..19d2faf7e 100644 --- a/xtask/src/main.rs +++ b/xtask/src/main.rs @@ -48,13 +48,9 @@ fn try_main() -> Result<(), DynError> { "xous-names", "keyboard", "trng", - - "llio", // still to convert - //"rkyv-test-client", - //"rkyv-test-server", + "llio", ]; let fcc_pkgs = [ - "shell", "fcc-agent", "graphics-server", "ticktimer-server",