ft_hal_generic/
ft_motor.rs

1pub 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    /// Drive forward with defined speed (in percent)
14    Forward(u8),
15    // Drive backward with defined speed (in percent)
16    Backward(u8),
17    /// Stop the motor by actively braking
18    Stop,
19    /// Stop the motor by coasting
20    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}