comments and abort
This commit is contained in:
@ -21,7 +21,7 @@ pub struct Dispatch {
|
|||||||
|
|
||||||
impl Dispatch {
|
impl Dispatch {
|
||||||
pub fn new() -> Dispatch {
|
pub fn new() -> Dispatch {
|
||||||
let (s, r) = unbounded();
|
let (s, r) = unbounded(); //This should always be unbounded, because some callbacks have to send_blocking to it, and if the thread blocks, other tasks can't empty the queue!
|
||||||
let mut hmap = HashMap::new();
|
let mut hmap = HashMap::new();
|
||||||
hmap.reserve(Commands::COUNT);
|
hmap.reserve(Commands::COUNT);
|
||||||
Dispatch { callbacks: hmap, recv: r, endpoint: s}
|
Dispatch { callbacks: hmap, recv: r, endpoint: s}
|
||||||
@ -29,7 +29,7 @@ impl Dispatch {
|
|||||||
|
|
||||||
/// Get a channel receiver that will get callbacks for all commands in the listen_for vec.
|
/// Get a channel receiver that will get callbacks for all commands in the listen_for vec.
|
||||||
pub fn get_callback_channel(&mut self, listen_for: &Vec<Commands>) -> RecvQ {
|
pub fn get_callback_channel(&mut self, listen_for: &Vec<Commands>) -> RecvQ {
|
||||||
let (send, rec) = unbounded();
|
let (send, rec) = unbounded(); // TODO: these could be bounded instead, as these calls are all non-blocking.
|
||||||
for cmd in listen_for {
|
for cmd in listen_for {
|
||||||
let callback_list = self.callbacks.get_mut(&discriminant(&cmd));
|
let callback_list = self.callbacks.get_mut(&discriminant(&cmd));
|
||||||
match callback_list {
|
match callback_list {
|
||||||
@ -48,9 +48,6 @@ impl Dispatch {
|
|||||||
rec
|
rec
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO: Make a discriminant version of this function that takes a vec of discriminants
|
|
||||||
//TODO: Most of these channels could be fixed size instead unbound; probably only the incomming channel needs to be large.
|
|
||||||
|
|
||||||
/// Get a channel sender that will send commands to this dispatcher
|
/// Get a channel sender that will send commands to this dispatcher
|
||||||
pub fn get_cmd_channel(&mut self) -> SendQ {
|
pub fn get_cmd_channel(&mut self) -> SendQ {
|
||||||
self.endpoint.clone()
|
self.endpoint.clone()
|
||||||
|
|||||||
@ -76,6 +76,9 @@ pub enum Menu<'a> {
|
|||||||
|
|
||||||
Log { level: u8 },
|
Log { level: u8 },
|
||||||
|
|
||||||
|
/// Abort (resets microcontroller)
|
||||||
|
Abort,
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn process_menu(
|
pub fn process_menu(
|
||||||
@ -176,6 +179,7 @@ pub fn process_menu(
|
|||||||
debug!("debug test");
|
debug!("debug test");
|
||||||
trace!("trace test");
|
trace!("trace test");
|
||||||
}
|
}
|
||||||
|
Menu::Abort => {panic!("CLI user requested abort");}
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
@ -224,8 +228,8 @@ pub async fn start_cli(dispatch: Sender<Commands>) -> anyhow::Result<()> {
|
|||||||
}
|
}
|
||||||
Err(e) => match e.kind() {
|
Err(e) => match e.kind() {
|
||||||
std::io::ErrorKind::WouldBlock => {} // This is expected if there is no input
|
std::io::ErrorKind::WouldBlock => {} // This is expected if there is no input
|
||||||
_ => {warn!("Error waiting for input: {}", e)}
|
_ => {warn!("Error waiting for CLI input: {}", e)}
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user