Stopping and Stopped notifications distinct

This commit is contained in:
2024-08-24 10:12:23 -04:00
parent 7c2d3df16b
commit 70947d5fa7
5 changed files with 20 additions and 11 deletions

View File

@ -39,8 +39,9 @@ impl BleServer {
//Commands::BluetoothDown { data: 0 }, //Commands::BluetoothDown { data: 0 },
//Commands::BluetoothStop { data: 0 }, //Commands::BluetoothStop { data: 0 },
Commands::NotifyMotorDown, Commands::NotifyMotorDown,
Commands::NotifyMotorStop, Commands::NotifyMotorStopping,
Commands::NotifyMotorUp, Commands::NotifyMotorUp,
Commands::NotifyMotorStopped,
]; ];
let r = dp.get_callback_channel(&cmds); let r = dp.get_callback_channel(&cmds);
let s = dp.get_cmd_channel(); let s = dp.get_cmd_channel();
@ -94,7 +95,7 @@ impl BleServer {
); );
button_stop.lock().set_value(&[1]) button_stop.lock().set_value(&[1])
.on_write(closure!(clone sender, |args: &mut OnWriteArgs| { .on_write(closure!(clone sender, |args: &mut OnWriteArgs| {
on_bluetooth_cmd(&sender, args, Commands::BluetoothStop {data: 0}) on_bluetooth_cmd(&sender, args, Commands::BluetoothStop {_data: 0})
})); }));
@ -119,11 +120,16 @@ impl BleServer {
button_down.lock().set_value(&BUTTON_PRESSED).notify(); button_down.lock().set_value(&BUTTON_PRESSED).notify();
button_stop.lock().set_value(&BUTTON_RELEASED).notify(); button_stop.lock().set_value(&BUTTON_RELEASED).notify();
} }
Commands::NotifyMotorStop => { Commands::NotifyMotorStopping => {
button_up.lock().set_value(&BUTTON_RELEASED).notify(); button_up.lock().set_value(&BUTTON_RELEASED).notify();
button_down.lock().set_value(&BUTTON_RELEASED).notify(); button_down.lock().set_value(&BUTTON_RELEASED).notify();
button_stop.lock().set_value(&BUTTON_PRESSED).notify(); button_stop.lock().set_value(&BUTTON_PRESSED).notify();
} }
Commands::NotifyMotorStopped => {
button_up.lock().set_value(&BUTTON_RELEASED).notify();
button_down.lock().set_value(&BUTTON_RELEASED).notify();
button_stop.lock().set_value(&BUTTON_RELEASED).notify();
}
_ => { _ => {
error!("Invalid command received by bluetooth handler {:?}", cmd); error!("Invalid command received by bluetooth handler {:?}", cmd);
// No need to reboot as state is recoverable. // No need to reboot as state is recoverable.
@ -148,9 +154,9 @@ fn on_bluetooth_cmd(sender: &SendQ, args: &mut OnWriteArgs, cmd: Commands) {
sender.send_blocking(Commands::BluetoothDown {data: v[0]} ) sender.send_blocking(Commands::BluetoothDown {data: v[0]} )
} else {error!("Received zero-byte bluetooth characteristic update {:?}", cmd); Ok(())} } else {error!("Received zero-byte bluetooth characteristic update {:?}", cmd); Ok(())}
} }
Commands::BluetoothStop { data: _ } => { Commands::BluetoothStop { _data: _ } => {
if v.len() > 0 { if v.len() > 0 {
sender.send_blocking(Commands::BluetoothStop {data: v[0]} ) sender.send_blocking(Commands::BluetoothStop {_data: v[0]} )
} else {error!("Received zero-byte bluetooth characteristic update {:?}", cmd); Ok(())} } else {error!("Received zero-byte bluetooth characteristic update {:?}", cmd); Ok(())}
} }
_ => {error!("Tried to handle an unknown bluetooth command: {:?}",cmd);Ok(())} _ => {error!("Tried to handle an unknown bluetooth command: {:?}",cmd);Ok(())}

View File

@ -14,7 +14,7 @@ pub enum Commands {
// Inputs from bluetooth // Inputs from bluetooth
BluetoothUp {data: u8}, BluetoothUp {data: u8},
BluetoothDown {data: u8}, BluetoothDown {data: u8},
BluetoothStop {data: u8}, // There is no state where releasing the stop button induces a change. BluetoothStop {_data: u8}, // There is no state where releasing the stop button induces a change.
// Internal messages // Internal messages
StopTimerExpired, // Sent when the 2 second stop sequence is complete StopTimerExpired, // Sent when the 2 second stop sequence is complete
@ -26,7 +26,8 @@ pub enum Commands {
NotifyMotorUp, NotifyMotorUp,
NotifyMotorDown, NotifyMotorDown,
NotifyMotorStop, NotifyMotorStopping,
NotifyMotorStopped, // Signaled after stop timeout
} }
pub type CmdType = std::mem::Discriminant<Commands>; pub type CmdType = std::mem::Discriminant<Commands>;

View File

@ -44,7 +44,7 @@ impl Controller {
Commands::PicRecvStop, Commands::PicRecvStop,
Commands::BluetoothUp{data: 0}, Commands::BluetoothUp{data: 0},
Commands::BluetoothDown{data: 0}, Commands::BluetoothDown{data: 0},
Commands::BluetoothStop{data: 0}, Commands::BluetoothStop{_data: 0},
Commands::StopTimerExpired, Commands::StopTimerExpired,
Commands::ButtonTimerExpired, Commands::ButtonTimerExpired,
]; ];
@ -53,7 +53,9 @@ impl Controller {
async fn enter_state(&mut self, new_s: &ControllerStates) -> Result<()> { async fn enter_state(&mut self, new_s: &ControllerStates) -> Result<()> {
match new_s { match new_s {
ControllerStates::Stopped => {} ControllerStates::Stopped => {
self.send.send(Commands::NotifyMotorStopped).await?;
}
ControllerStates::Stopping => { ControllerStates::Stopping => {
self.send.send(Commands::StopTimerRestart).await?; self.send.send(Commands::StopTimerRestart).await?;
self.motor_q.send(MotorCommands::Stop).await?; self.motor_q.send(MotorCommands::Stop).await?;

View File

@ -80,7 +80,7 @@ impl MotorDriverDebug {
} }
pub async fn stop(&self) -> Result<()> { pub async fn stop(&self) -> Result<()> {
warn!("Stopping motor"); warn!("Stopping motor");
self.dispatch.send(Dispatch_Commands::NotifyMotorStop).await?; self.dispatch.send(Dispatch_Commands::NotifyMotorStopping).await?;
Ok(()) Ok(())
} }
} }

View File

@ -114,7 +114,7 @@ pub fn process_menu(
Menu::BluetoothStop { data } => { Menu::BluetoothStop { data } => {
cli.writer() cli.writer()
.write_str("SendingBluetoothStop")?; .write_str("SendingBluetoothStop")?;
let _ = dispatch.send_blocking(Commands::BluetoothStop { data: data }); let _ = dispatch.send_blocking(Commands::BluetoothStop { _data: data });
} }
Menu::BluetoothLearn { data } => { Menu::BluetoothLearn { data } => {
cli.writer() cli.writer()