diff --git a/Cargo.lock b/Cargo.lock index bbe4eee10..a3413ab1c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -169,6 +169,22 @@ dependencies = [ "bitflags", ] +[[package]] +name = "com" +version = "0.1.0" +dependencies = [ + "com_rs", + "heapless", + "log", + "log-server", + "utralib", + "xous", +] + +[[package]] +name = "com_rs" +version = "0.1.0" + [[package]] name = "crc" version = "1.8.1" @@ -857,6 +873,7 @@ name = "shell" version = "0.1.0" dependencies = [ "bitflags", + "com", "graphics-server", "log", "log-server", diff --git a/Cargo.toml b/Cargo.toml index 797b41324..4dd45fd9a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,6 +7,7 @@ members = [ "services/graphics-server", "services/log-server", "services/ticktimer-server", + "services/com", "svd2utra", "xtask", ] @@ -15,6 +16,7 @@ default-members = [ "services/log-server", "services/graphics-server", "services/ticktimer-server", + "services/com", ] # These packages have custom RUSTFLAGS, so if they diff --git a/services/shell/Cargo.toml b/services/shell/Cargo.toml index 78743eeda..cca84b3c8 100644 --- a/services/shell/Cargo.toml +++ b/services/shell/Cargo.toml @@ -12,6 +12,7 @@ graphics-server = { path = "../graphics-server" } ticktimer-server = { path = "../ticktimer-server" } log-server = { path = "../log-server" } log = "0.4" +com = { path = "../com"} [target.'cfg(not(any(windows,unix)))'.dependencies] utralib = { path = "../../utralib"} diff --git a/services/shell/src/main.rs b/services/shell/src/main.rs index d30ac0dbe..f7db2c346 100644 --- a/services/shell/src/main.rs +++ b/services/shell/src/main.rs @@ -71,8 +71,9 @@ impl Bounce { } pub fn next_rand(&mut self) -> i16 { - let ret = move_lfsr(self.lfsr); + let mut ret = move_lfsr(self.lfsr); self.lfsr = ret; + ret *= 2; // make the ball move faster (ret % 8) as i16 } @@ -122,15 +123,17 @@ fn shell_main() -> ! { let graphics_server_id = xous::SID::from_bytes(b"graphics-server ").unwrap(); let ticktimer_server_id = xous::SID::from_bytes(b"ticktimer-server").unwrap(); let log_server_id = xous::SID::from_bytes(b"xous-log-server ").unwrap(); + let com_id = xous::SID::from_bytes(b"com ").unwrap(); println!("SHELL: Attempting to connect to servers..."); let log_conn = xous::connect(log_server_id).unwrap(); let graphics_conn = xous::connect(graphics_server_id).unwrap(); let ticktimer_conn = xous::connect(ticktimer_server_id).unwrap(); + let com_conn = xous::connect(com_id).unwrap(); println!( - "SHELL: Connected to Log server: {} Graphics server: {} Ticktimer server: {}", - log_conn, graphics_conn, ticktimer_conn, + "SHELL: Connected to Log server: {} Graphics server: {} Ticktimer server: {} Com: {}", + log_conn, graphics_conn, ticktimer_conn, com_conn, ); assert_ne!( @@ -222,6 +225,9 @@ fn shell_main() -> ! { graphics_server::draw_string(graphics_conn, &string_buffer).expect("unable to draw string"); // ticktimer_server::sleep_ms(ticktimer_conn, 500).expect("couldn't sleep"); + if last_time > 10_000 { // after 10 seconds issue a shutdown command + com::power_off_soc(com_conn).expect("Couldn't issue powerdown command to COM"); + } // draw the ball bouncyball.update(); diff --git a/xtask/src/main.rs b/xtask/src/main.rs index a73f89988..a623661a5 100644 --- a/xtask/src/main.rs +++ b/xtask/src/main.rs @@ -76,7 +76,7 @@ fn build_hw_image(debug: bool, svd: Option) -> Result<(), DynError> { let kernel = build_kernel(debug)?; let mut init = vec![]; - for pkg in &["shell", "graphics-server", "ticktimer-server", "log-server"] { + for pkg in &["shell", "graphics-server", "ticktimer-server", "log-server", "com"] { init.push(build(pkg, debug, Some(TARGET), None)?); } let loader = build("loader", debug, Some(TARGET), Some("loader".into()))?; @@ -145,7 +145,7 @@ fn renode_image(debug: bool) -> Result<(), DynError> { std::env::set_var("XOUS_SVD_FILE", path.canonicalize().unwrap()); let kernel = build_kernel(debug)?; let mut init = vec![]; - for pkg in &["shell", "log-server", "graphics-server", "ticktimer-server"] { + for pkg in &["shell", "log-server", "graphics-server", "ticktimer-server", "com"] { init.push(build(pkg, debug, Some(TARGET), None)?); } build("loader", debug, Some(TARGET), Some("loader".into()))?; @@ -162,7 +162,7 @@ fn renode_image(debug: bool) -> Result<(), DynError> { fn run(debug: bool) -> Result<(), DynError> { let stream = if debug { "debug" } else { "release" }; - let init = ["shell", "log-server", "graphics-server", "ticktimer-server"]; + let init = ["shell", "log-server", "graphics-server", "ticktimer-server", "com"]; // let mut init_paths = vec![]; for pkg in &init {