ft_hal_generic/
ft_motor.rs1pub const MAX_SPEED: u8 = 100;
2
3pub fn validate_speed(speed: u8) -> Result<(), ()> {
4 if speed > MAX_SPEED {
5 Err(())
6 } else {
7 Ok(())
8 }
9}
10
11#[derive(Clone, Copy, PartialEq)]
12pub enum FtMotorCommand {
13 Forward(u8),
15 Backward(u8),
17 Stop,
19 Coast,
21}
22
23pub trait FtMotor<E> {
24 fn forward(&mut self, speed: u8) -> Result<(), E>;
25
26 fn backward(&mut self, speed: u8) -> Result<(), E>;
27
28 fn coast(&mut self) -> Result<(), E>;
29
30 fn stop(&mut self) -> Result<(), E>;
31
32 fn drive(&mut self, cmd: FtMotorCommand) -> Result<(), E> {
33 match cmd {
34 FtMotorCommand::Forward(speed) => self.forward(speed),
35 FtMotorCommand::Backward(speed) => self.backward(speed),
36 FtMotorCommand::Stop => self.stop(),
37 FtMotorCommand::Coast => self.coast(),
38 }
39 }
40}