xous-core/services/content-plugin-api/src/lib.rs

60 lines
1.6 KiB
Rust
Raw Normal View History

#![cfg_attr(target_os = "none", no_std)]
use xous::{send_message, Message, ScalarMessage, CID};
#[derive(Debug)]
pub enum Opcode {
/// request a redraw of our canvas
Redraw,
}
impl core::convert::TryFrom<&Message> for Opcode {
type Error = &'static str;
fn try_from(message: &Message) -> Result<Self, Self::Error> {
match message {
Message::Scalar(m) => match m.id {
0 => Ok(Opcode::Redraw),
_ => Err("SHCH api: unknown Scalar ID"),
},
_ => Err("SHCH api: unhandled message type"),
}
}
}
impl Into<Message> for Opcode {
fn into(self) -> Message {
match self {
Opcode::Redraw => Message::Scalar(ScalarMessage {
id: 0,
arg1: 0,
arg2: 0,
arg3: 0,
arg4: 0,
}),
// _ => panic!("SHCH api: Opcode type not handled by Into(), refer to helper method"),
}
}
}
pub trait ContentCanvasApi {
fn redraw_canvas(&self) -> Result<(), xous::Error>;
}
pub struct ContentCanvasConnection {
pub connection: Option<CID>,
pub redraw_id: Option<usize>,
}
impl ContentCanvasApi for ContentCanvasConnection {
fn redraw_canvas(&self) -> Result<(), xous::Error> {
if let Some(id) = self.redraw_id {
match self.connection {
Some(cid) => send_message(cid, Message::new_scalar(id, 0, 0, 0, 0)).map(|_| ()),
_ => Err(xous::Error::UseBeforeInit),
}
} else {
Err(xous::Error::UseBeforeInit)
}
}
}